module Galley.Run
( run,
mkApp,
mkLogger,
)
where
import AWS.Util (readAuthExpiration)
import Amazonka qualified as AWS
import Cassandra (runClient, shutdown)
import Cassandra.Schema (versionCheck)
import Control.Concurrent.Async qualified as Async
import Control.Exception (finally)
import Control.Lens (view, (.~), (^.))
import Control.Monad.Codensity
import Data.Aeson qualified as Aeson
import Data.ByteString.UTF8 qualified as UTF8
import Data.Metrics.AWS (gaugeTokenRemaing)
import Data.Metrics.Servant
import Data.Misc (portNumber)
import Data.Singletons
import Data.Text (unpack)
import Galley.API.Federation
import Galley.API.Internal
import Galley.API.Public.Servant
import Galley.App
import Galley.App qualified as App
import Galley.Aws (awsEnv)
import Galley.Cassandra
import Galley.Monad
import Galley.Options
import Galley.Queue qualified as Q
import Imports
import Network.HTTP.Media.RenderHeader qualified as HTTPMedia
import Network.HTTP.Types qualified as HTTP
import Network.Wai
import Network.Wai.Middleware.Gunzip qualified as GZip
import Network.Wai.Middleware.Gzip qualified as GZip
import Network.Wai.Utilities.Error
import Network.Wai.Utilities.Request
import Network.Wai.Utilities.Server
import OpenTelemetry.Instrumentation.Wai qualified as Otel
import OpenTelemetry.Trace as Otel
import Prometheus qualified as Prom
import Servant hiding (route)
import System.Logger qualified as Log
import System.Logger.Extended (mkLogger)
import Util.Options
import Wire.API.Routes.API
import Wire.API.Routes.Public.Galley
import Wire.API.Routes.Version
import Wire.API.Routes.Version.Wai
import Wire.OpenTelemetry (withTracerC)
run :: Opts -> IO ()
run :: Opts -> IO ()
run Opts
opts = Codensity IO () -> IO ()
forall (f :: * -> *) a. Applicative f => Codensity f a -> f a
lowerCodensity do
Tracer
tracer <- Codensity IO Tracer
withTracerC
(Application
app, Env
env) <- Opts -> Codensity IO (Application, Env)
mkApp Opts
opts
Settings
settings' <-
IO Settings -> Codensity IO Settings
forall (m :: * -> *) a. Monad m => m a -> Codensity m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Settings -> Codensity IO Settings)
-> IO Settings -> Codensity IO Settings
forall a b. (a -> b) -> a -> b
$
Server -> IO Settings
forall (m :: * -> *). MonadIO m => Server -> m Settings
newSettings (Server -> IO Settings) -> Server -> IO Settings
forall a b. (a -> b) -> a -> b
$
String -> Word16 -> Logger -> Server
defaultServer
(Text -> String
unpack (Text -> String) -> Text -> String
forall a b. (a -> b) -> a -> b
$ Opts
opts._galley.host)
(Port -> Word16
portNumber (Port -> Word16) -> Port -> Word16
forall a b. (a -> b) -> a -> b
$ Word16 -> Port
forall a b. (Integral a, Num b) => a -> b
fromIntegral Opts
opts._galley.port)
(Env
env Env -> Getting Logger Env Logger -> Logger
forall s a. s -> Getting a s a -> a
^. Getting Logger Env Logger
Lens' Env Logger
App.applog)
Maybe Env -> (Env -> Codensity IO ()) -> Codensity IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ (Env
env Env -> Getting (Maybe Env) Env (Maybe Env) -> Maybe Env
forall s a. s -> Getting a s a -> a
^. Getting (Maybe Env) Env (Maybe Env)
Lens' Env (Maybe Env)
aEnv) ((Env -> Codensity IO ()) -> Codensity IO ())
-> (Env -> Codensity IO ()) -> Codensity IO ()
forall a b. (a -> b) -> a -> b
$ \Env
aws ->
Codensity IO (Async ()) -> Codensity IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Codensity IO (Async ()) -> Codensity IO ())
-> Codensity IO (Async ()) -> Codensity IO ()
forall a b. (a -> b) -> a -> b
$ (forall b. (Async () -> IO b) -> IO b) -> Codensity IO (Async ())
forall k (m :: k -> *) a.
(forall (b :: k). (a -> m b) -> m b) -> Codensity m a
Codensity ((forall b. (Async () -> IO b) -> IO b) -> Codensity IO (Async ()))
-> (forall b. (Async () -> IO b) -> IO b)
-> Codensity IO (Async ())
forall a b. (a -> b) -> a -> b
$ IO () -> (Async () -> IO b) -> IO b
forall a b. IO a -> (Async a -> IO b) -> IO b
Async.withAsync (IO () -> (Async () -> IO b) -> IO b)
-> IO () -> (Async () -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ Env -> IO ()
forall (m :: * -> *). MonadIO m => Env -> m ()
collectAuthMetrics (Env
aws Env -> Getting Env Env Env -> Env
forall s a. s -> Getting a s a -> a
^. Getting Env Env Env
Lens' Env Env
awsEnv)
Codensity IO (Async ()) -> Codensity IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Codensity IO (Async ()) -> Codensity IO ())
-> Codensity IO (Async ()) -> Codensity IO ()
forall a b. (a -> b) -> a -> b
$ (forall b. (Async () -> IO b) -> IO b) -> Codensity IO (Async ())
forall k (m :: k -> *) a.
(forall (b :: k). (a -> m b) -> m b) -> Codensity m a
Codensity ((forall b. (Async () -> IO b) -> IO b) -> Codensity IO (Async ()))
-> (forall b. (Async () -> IO b) -> IO b)
-> Codensity IO (Async ())
forall a b. (a -> b) -> a -> b
$ IO () -> (Async () -> IO b) -> IO b
forall a b. IO a -> (Async a -> IO b) -> IO b
Async.withAsync (IO () -> (Async () -> IO b) -> IO b)
-> IO () -> (Async () -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ Env -> App () -> IO ()
forall a. Env -> App a -> IO a
runApp Env
env App ()
deleteLoop
Codensity IO (Async ()) -> Codensity IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Codensity IO (Async ()) -> Codensity IO ())
-> Codensity IO (Async ()) -> Codensity IO ()
forall a b. (a -> b) -> a -> b
$ (forall b. (Async () -> IO b) -> IO b) -> Codensity IO (Async ())
forall k (m :: k -> *) a.
(forall (b :: k). (a -> m b) -> m b) -> Codensity m a
Codensity ((forall b. (Async () -> IO b) -> IO b) -> Codensity IO (Async ()))
-> (forall b. (Async () -> IO b) -> IO b)
-> Codensity IO (Async ())
forall a b. (a -> b) -> a -> b
$ IO () -> (Async () -> IO b) -> IO b
forall a b. IO a -> (Async a -> IO b) -> IO b
Async.withAsync (IO () -> (Async () -> IO b) -> IO b)
-> IO () -> (Async () -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ Env -> App () -> IO ()
forall a. Env -> App a -> IO a
runApp Env
env App ()
refreshMetrics
IO () -> Codensity IO ()
forall (m :: * -> *) a. Monad m => m a -> Codensity m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> Codensity IO ()) -> IO () -> Codensity IO ()
forall a b. (a -> b) -> a -> b
$ Tracer -> Text -> SpanArguments -> IO () -> IO ()
forall (m :: * -> *) a.
(MonadUnliftIO m, HasCallStack) =>
Tracer -> Text -> SpanArguments -> m a -> m a
inSpan Tracer
tracer Text
"galley" SpanArguments
defaultSpanArguments {kind = Otel.Server} (Settings -> Application -> Maybe Int -> IO ()
runSettingsWithShutdown Settings
settings' Application
app Maybe Int
forall a. Maybe a
Nothing) IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO a
`finally` Env -> IO ()
closeApp Env
env
mkApp :: Opts -> Codensity IO (Application, Env)
mkApp :: Opts -> Codensity IO (Application, Env)
mkApp Opts
opts =
do
Logger
logger <- IO Logger -> Codensity IO Logger
forall (m :: * -> *) a. Monad m => m a -> Codensity m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Logger -> Codensity IO Logger)
-> IO Logger -> Codensity IO Logger
forall a b. (a -> b) -> a -> b
$ Level -> Maybe (Last Bool) -> Maybe (Last LogFormat) -> IO Logger
mkLogger (Opts
opts Opts -> Getting Level Opts Level -> Level
forall s a. s -> Getting a s a -> a
^. Getting Level Opts Level
Lens' Opts Level
logLevel) (Opts
opts Opts
-> Getting (Maybe (Last Bool)) Opts (Maybe (Last Bool))
-> Maybe (Last Bool)
forall s a. s -> Getting a s a -> a
^. Getting (Maybe (Last Bool)) Opts (Maybe (Last Bool))
Lens' Opts (Maybe (Last Bool))
logNetStrings) (Opts
opts Opts
-> Getting (Maybe (Last LogFormat)) Opts (Maybe (Last LogFormat))
-> Maybe (Last LogFormat)
forall s a. s -> Getting a s a -> a
^. Getting (Maybe (Last LogFormat)) Opts (Maybe (Last LogFormat))
Lens' Opts (Maybe (Last LogFormat))
logFormat)
Env
env <- IO Env -> Codensity IO Env
forall (m :: * -> *) a. Monad m => m a -> Codensity m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Env -> Codensity IO Env) -> IO Env -> Codensity IO Env
forall a b. (a -> b) -> a -> b
$ Opts -> Logger -> IO Env
App.createEnv Opts
opts Logger
logger
Middleware
otelMiddleware <- IO Middleware -> Codensity IO Middleware
forall (m :: * -> *) a. Monad m => m a -> Codensity m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift IO Middleware
HasCallStack => IO Middleware
Otel.newOpenTelemetryWaiMiddleware
IO () -> Codensity IO ()
forall (m :: * -> *) a. Monad m => m a -> Codensity m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> Codensity IO ()) -> IO () -> Codensity IO ()
forall a b. (a -> b) -> a -> b
$ ClientState -> Client () -> IO ()
forall (m :: * -> *) a. MonadIO m => ClientState -> Client a -> m a
runClient (Env
env Env -> Getting ClientState Env ClientState -> ClientState
forall s a. s -> Getting a s a -> a
^. Getting ClientState Env ClientState
Lens' Env ClientState
cstate) (Client () -> IO ()) -> Client () -> IO ()
forall a b. (a -> b) -> a -> b
$ Int32 -> Client ()
versionCheck Int32
schemaVersion
let middlewares :: Middleware
middlewares =
Set Version -> Middleware
versionMiddleware ((VersionExp -> Set Version) -> Set VersionExp -> Set Version
forall m a. Monoid m => (a -> m) -> Set a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap VersionExp -> Set Version
expandVersionExp (Opts
opts Opts
-> Getting (Set VersionExp) Opts (Set VersionExp) -> Set VersionExp
forall s a. s -> Getting a s a -> a
^. (Settings -> Const (Set VersionExp) Settings)
-> Opts -> Const (Set VersionExp) Opts
Lens' Opts Settings
settings ((Settings -> Const (Set VersionExp) Settings)
-> Opts -> Const (Set VersionExp) Opts)
-> ((Set VersionExp -> Const (Set VersionExp) (Set VersionExp))
-> Settings -> Const (Set VersionExp) Settings)
-> Getting (Set VersionExp) Opts (Set VersionExp)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Set VersionExp -> Const (Set VersionExp) (Set VersionExp))
-> Settings -> Const (Set VersionExp) Settings
Lens' Settings (Set VersionExp)
disabledAPIVersions))
Middleware -> Middleware -> Middleware
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Logger -> HeaderName -> Middleware
requestIdMiddleware Logger
logger HeaderName
defaultRequestIdHeaderName
Middleware -> Middleware -> Middleware
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy
(((Named
"get-unqualified-conversation"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond 'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-unqualified-conversation-legalhold-alias"
(Summary "Get a conversation by ID (Legalhold alias)"
:> (Until 'V2
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("legalhold"
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation))))))))
:<|> (Named
"get-conversation@v2"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-conversation@v5"
(Summary "Get a conversation by ID"
:> (From 'V3
:> (Until 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5 200 "Conversation" Conversation]
Conversation))))))))
:<|> (Named
"get-conversation"
(Summary "Get a conversation by ID"
:> (From 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> Get '[JSON] Conversation)))))))
:<|> (Named
"get-conversation-roles"
(Summary
"Get existing roles available for the given conversation"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("roles"
:> Get
'[JSON]
ConversationRolesList)))))))
:<|> (Named
"get-group-info"
(Summary "Get MLS group information"
:> (From 'V5
:> (CanThrow 'ConvNotFound
:> (CanThrow 'MLSMissingGroupInfo
:> (CanThrow 'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv" ConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))
:<|> (Named
"list-conversation-ids-unqualified"
(Summary
"[deprecated] Get all local conversation IDs."
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("ids"
:> (QueryParam'
'[Optional, Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional, Strict,
Description
"Maximum number of IDs to return"]
"size"
(Range 1 1000 Int32)
:> Get
'[JSON]
(ConversationList
ConvId))))))))
:<|> (Named
"list-conversation-ids-v2"
(Summary "Get all conversation IDs."
:> (Until 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"list-conversation-ids"
(Summary "Get all conversation IDs."
:> (From 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"get-conversations"
(Summary
"Get all *local* conversations."
:> (Until 'V3
:> (Description
"Will not return remote conversations.\n\nUse `POST /conversations/list-ids` followed by `POST /conversations/list` instead."
:> (ZLocalUser
:> ("conversations"
:> (QueryParam'
'[Optional,
Strict,
Description
"Mutually exclusive with 'start' (at most 32 IDs per request)"]
"ids"
(Range
1
32
(CommaSeparatedList
ConvId))
:> (QueryParam'
'[Optional,
Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum number of conversations to return"]
"size"
(Range
1
500
Int32)
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2
200
"List of local conversations"
(ConversationList
Conversation)]
(ConversationList
Conversation)))))))))
:<|> (Named
"list-conversations@v1"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (Until 'V2
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> ("v2"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v2"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V2
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V2
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v5"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V5
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse))))))
:<|> (Named
"get-conversation-by-reusable-code"
(Summary
"Get limited conversation information by key/code pair"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'NotATeamMember
:> (ZLocalUser
:> ("conversations"
:> ("join"
:> (QueryParam'
'[Required,
Strict]
"key"
Key
:> (QueryParam'
'[Required,
Strict]
"code"
Value
:> Get
'[JSON]
ConversationCoverView))))))))))))
:<|> (Named
"create-group-conversation@v2"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))))))))
:<|> (Named
"create-group-conversation@v3"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (From
'V3
:> (Until
'V4
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-group-conversation@v5"
(Summary
"Create a new conversation"
:> (From
'V4
:> (Until
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V5
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse)))))))))))))))))
:<|> (Named
"create-group-conversation"
(Summary
"Create a new conversation"
:> (From
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V6
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse))))))))))))))))
:<|> (Named
"create-self-conversation@v2"
(Summary
"Create a self-conversation"
:> (Until
'V3
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"create-self-conversation@v5"
(Summary
"Create a self-conversation"
:> (From
'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))
:<|> (Named
"create-self-conversation"
(Summary
"Create a self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"get-mls-self-conversation@v5"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"The MLS self-conversation"
Conversation]
Conversation)))))))
:<|> (Named
"get-mls-self-conversation"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"The MLS self-conversation"
Conversation]
Conversation))))))
:<|> (Named
"get-subconversation"
(Summary
"Get information about an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSSubConvUnsupportedConvType
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Subconversation"
PublicSubConversation]
PublicSubConversation))))))))))
:<|> (Named
"leave-subconversation"
(Summary
"Leave an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> (ZClient
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("self"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))))))))))))))
:<|> (Named
"delete-subconversation"
(Summary
"Delete an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSStaleMessage
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> (ReqBody
'[JSON]
DeleteSubConversationRequest
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Deletion successful"
()]
()))))))))))))
:<|> (Named
"get-subconversation-group-info"
(Summary
"Get MLS group information of subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSMissingGroupInfo
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))))
:<|> (Named
"create-one-to-one-conversation@v2"
(Summary
"Create a 1:1 conversation"
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-one-to-one-conversation"
(Summary
"Create a 1:1 conversation"
:> (From
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v5"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'MLSFederatedOne2OneNotSupported
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"MLS 1-1 conversation"
Conversation]
Conversation))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v6"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V6
:> (Until
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
MLSPublicKey)]
(MLSOne2OneConversation
MLSPublicKey))))))))))
:<|> (Named
"get-one-to-one-mls-conversation"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
SomeKey)]
(MLSOne2OneConversation
SomeKey))))))))))
:<|> (Named
"add-members-to-conversation-unqualified"
(Summary
"Add members to an existing conversation (deprecated)"
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
Invite
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"add-members-to-conversation-unqualified2"
(Summary
"Add qualified members to an existing conversation."
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> ("v2"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event)))))))))))))))))))))
:<|> (Named
"add-members-to-conversation"
(Summary
"Add qualified members to an existing conversation."
:> (From
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"join-conversation-by-id-unqualified"
(Summary
"Join a conversation by its ID (if link access enabled) (deprecated)"
:> (Until
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("join"
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event)))))))))))))
:<|> (Named
"join-conversation-by-code-unqualified"
(Summary
"Join a conversation using a reusable code"
:> (Description
"If the guest links team feature is disabled, this will fail with 409 GuestLinksDisabled.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/code-check` which responds with 404 CodeNotFound if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("join"
:> (ReqBody
'[JSON]
JoinConversationByCode
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event))))))))))))))))
:<|> (Named
"code-check"
(Summary
"Check validity of a conversation code."
:> (Description
"If the guest links team feature is disabled, this will fail with 404 CodeNotFound.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/join` which responds with 409 GuestLinksDisabled if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidConversationPassword
:> ("conversations"
:> ("code-check"
:> (ReqBody
'[JSON]
ConversationCode
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Valid"]
()))))))))
:<|> (Named
"create-conversation-code-unqualified@v3"
(Summary
"Create or recreate a conversation code"
:> (Until
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> CreateConversationCodeVerb)))))))))))))
:<|> (Named
"create-conversation-code-unqualified"
(Summary
"Create or recreate a conversation code"
:> (From
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> (ReqBody
'[JSON]
CreateConversationCodeRequest
:> CreateConversationCodeVerb))))))))))))))
:<|> (Named
"get-conversation-guest-links-status"
(Summary
"Get the status of the guest links feature for a conversation that potentially has been created by someone from another team."
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))
:<|> (Named
"remove-code-unqualified"
(Summary
"Delete conversation code"
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Conversation code deleted."
Event]
Event))))))))
:<|> (Named
"get-code"
(Summary
"Get existing conversation code"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (ZHostOpt
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Conversation Code"
ConversationCodeInfo]
ConversationCodeInfo))))))))))
:<|> (Named
"member-typing-unqualified"
(Summary
"Sending typing notifications"
:> (Until
'V3
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
())))))))))
:<|> (Named
"member-typing-qualified"
(Summary
"Sending typing notifications"
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
()))))))))
:<|> (Named
"remove-member-unqualified"
(Summary
"Remove a member from a conversation (deprecated)"
:> (Until
'V2
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb)))))))))))
:<|> (Named
"remove-member"
(Summary
"Remove a member from a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb))))))))))
:<|> (Named
"update-other-member-unqualified"
(Summary
"Update membership of the specified user (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:cnv_domain/:cnv/members/:usr_domain/:usr` instead"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
())))))))))))))))
:<|> (Named
"update-other-member"
(Summary
"Update membership of the specified user"
:> (Description
"**Note**: at least one field has to be provided."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
()))))))))))))))
:<|> (Named
"update-conversation-name-deprecated"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-name-unqualified"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event)))))))))))))
:<|> (Named
"update-conversation-name"
(Summary
"Update conversation name"
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name updated"
"Name unchanged"
Event)
(UpdateResult
Event)))))))))))
:<|> (Named
"update-conversation-message-timer-unqualified"
(Summary
"Update the message timer for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:cnv/message-timer` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-message-timer"
(Summary
"Update the message timer for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-receipt-mode-unqualified"
(Summary
"Update receipt mode for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:domain/:cnv/receipt-mode` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-receipt-mode"
(Summary
"Update receipt mode for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-access-unqualified"
(Summary
"Update access modes for a conversation (deprecated)"
:> (Until
'V3
:> (Description
"Use PUT `/conversations/:domain/:cnv/access` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event))))))))))))))))
:<|> (Named
"update-conversation-access@v2"
(Summary
"Update access modes for a conversation"
:> (Until
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"update-conversation-access"
(Summary
"Update access modes for a conversation"
:> (From
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (ReqBody
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"get-conversation-self-unqualified"
(Summary
"Get self membership properties (deprecated)"
:> (Deprecated
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> Get
'[JSON]
(Maybe
Member)))))))
:<|> (Named
"update-conversation-self-unqualified"
(Summary
"Update self membership properties (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/self` instead."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
()))))))))))
:<|> (Named
"update-conversation-self"
(Summary
"Update self membership properties"
:> (Description
"**Note**: at least one field has to be provided."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
())))))))))
:<|> Named
"update-conversation-protocol"
(Summary
"Update the protocol of the conversation"
:> (From
'V5
:> (Description
"**Note**: Only proteus->mixed upgrade is supported."
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvInvalidProtocolTransition
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'InvalidOperation
:> (CanThrow
'MLSMigrationCriteriaNotSatisfied
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("protocol"
:> (ReqBody
'[JSON]
ProtocolUpdate
:> MultiVerb
'PUT
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
:<|> (TeamConversationAPI
:<|> ((Named
"post-otr-message-unqualified"
(Summary
"Post an encrypted message to a conversation (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("otr"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON, Proto] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))
:<|> (Named
"post-otr-broadcast-unqualified"
(Summary
"Broadcast an encrypted message to all team members and all contacts (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("otr"
:> ("messages"
:> (QueryParam
"ignore_missing" IgnoreMissing
:> (QueryParam
"report_missing"
ReportMissing
:> (ReqBody
'[JSON, Proto]
NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))))
:<|> (Named
"post-proteus-message"
(Summary
"Post an encrypted message to a conversation (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
(RawProto QualifiedNewOtrMessage)
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus))))))))))
:<|> Named
"post-proteus-broadcast"
(Summary
"Post an encrypted message to all team members and all contacts (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
QualifiedNewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus)))))))))))))))
:<|> ((Named
"post-bot-message-unqualified"
(ZBot
:> (ZConversation
:> (CanThrow 'ConvNotFound
:> ("bot"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse 'MissingLegalholdConsent,
Respond
412 "Missing clients" ClientMismatch,
Respond
201 "Message sent" ClientMismatch]
(PostOtrResponse ClientMismatch)))))))))
:<|> Named
"get-bot-conversation"
(CanThrow 'AccessDenied
:> (CanThrow 'ConvNotFound
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("bot"
:> ("conversation"
:> (ZBot
:> (ZConversation
:> Get '[JSON] BotConvView))))))))))
:<|> (TeamAPI
:<|> ((Named
'("get", SSOConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for sso"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig)))))))))))
:<|> ((Named
'("get", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))
:<|> Named
'("put", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Put config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid" TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("get", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))
:<|> Named
'("put", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary
"Put config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany '[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> (SearchVisibilityGet
:<|> (SearchVisibilitySet
:<|> (Named
'("get",
ValidateSAMLEmailsConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))
:<|> (Named
'("get",
DigitalSignaturesConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))
:<|> ((Named
'("get",
AppLockConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig)))))))))))
:<|> Named
'("put",
AppLockConfig)
(Description ""
:> (ZUser
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("get",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))
:<|> Named
'("put",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("get",
ClassifiedDomainsConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig)))))))))))
:<|> ((Named
'("get",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))
:<|> Named
'("put",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("get",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))
:<|> Named
'("put",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("get",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))
:<|> Named
'("put",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("get",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))
:<|> Named
'("put",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("get",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))))
:<|> Named
'("put",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig))))))))))))))))
:<|> ((Named
'("get",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))
:<|> Named
'("put",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("get",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))
:<|> Named
'("put",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("get",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))
:<|> Named
'("put",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> (Named
'("get",
MlsE2EIdConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))))
:<|> (Named
"put-MlsE2EIdConfig@v5"
(From
'V5
:> (Until
'V6
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> (Named
'("put",
MlsE2EIdConfig)
(From
'V6
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("get",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))
:<|> Named
'("put",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))))))
:<|> ((Named
'("get",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))
:<|> Named
'("put",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))))))
:<|> (Named
'("get",
LimitedEventFanoutConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))
:<|> (AllTeamFeaturesUserGet
:<|> (AllTeamFeaturesTeamGet
:<|> ((Named
'("get-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))
:<|> (Named
'("put-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `PUT /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))))
:<|> (Named
'("get-deprecated",
ValidateSAMLEmailsConfig)
(ZUser
:> (Summary
"[deprecated] Get config for validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/validateSAMLemails` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validate-saml-emails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))))
:<|> Named
'("get-deprecated",
DigitalSignaturesConfig)
(ZUser
:> (Summary
"[deprecated] Get config for digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/digitalSignatures` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digital-signatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> (Named
'("get-config",
LegalholdConfig)
(Summary
"[deprecated] Get feature config for feature legalhold"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("get-config",
SSOConfig)
(Summary
"[deprecated] Get feature config for feature sso"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("get-config",
SearchVisibilityAvailableConfig)
(Summary
"[deprecated] Get feature config for feature searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("get-config",
ValidateSAMLEmailsConfig)
(Summary
"[deprecated] Get feature config for feature validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("get-config",
DigitalSignaturesConfig)
(Summary
"[deprecated] Get feature config for feature digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("get-config",
AppLockConfig)
(Summary
"[deprecated] Get feature config for feature appLock"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("get-config",
FileSharingConfig)
(Summary
"[deprecated] Get feature config for feature fileSharing"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("get-config",
ClassifiedDomainsConfig)
(Summary
"[deprecated] Get feature config for feature classifiedDomains"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> (Named
'("get-config",
ConferenceCallingConfig)
(Summary
"[deprecated] Get feature config for feature conferenceCalling"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("get-config",
SelfDeletingMessagesConfig)
(Summary
"[deprecated] Get feature config for feature selfDeletingMessages"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("get-config",
GuestLinksConfig)
(Summary
"[deprecated] Get feature config for feature conversationGuestLinks"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("get-config",
SndFactorPasswordChallengeConfig)
(Summary
"[deprecated] Get feature config for feature sndFactorPasswordChallenge"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> Named
'("get-config",
MLSConfig)
(Summary
"[deprecated] Get feature config for feature mls"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"mls-message"
("mls"
:> (Summary "Post an MLS message"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow 'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("messages"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
Message)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Message sent"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))
:<|> (Named
"mls-commit-bundle"
("mls"
:> (Summary "Post a MLS CommitBundle"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow
'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
'MLSWelcomeMismatch
:> (CanThrow
'MLSLegalholdIncompatible
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("commit-bundles"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
CommitBundle)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Commit accepted and forwarded"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))))
:<|> Named
"mls-public-keys"
("mls"
:> (Summary
"Get public keys used by the backend to sign external proposals"
:> (Description
"The format of the returned key is determined by the `format` query parameter:\n - raw (default): base64-encoded raw public keys\n - jwk: keys are nested objects in JWK format."
:> (From 'V5
:> (CanThrow 'MLSNotEnabled
:> ("public-keys"
:> (ZLocalUser
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Public keys"
(MLSKeysByPurpose
(MLSKeys
SomeKey))]
(MLSKeysByPurpose
(MLSKeys
SomeKey))))))))))))
:<|> (CustomBackendAPI
:<|> ((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"
:> (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"
:> (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"
:> (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"
:> (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"
:> (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"]
()))))))))))))))))))))))))))))
:<|> ((Named
"get-team-members"
(Summary "Get team members"
:> (CanThrow 'NotATeamMember
:> (ZLocalUser
:> ("teams"
:> (Capture "tid" TeamId
:> ("members"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
"pagingState"
TeamMembersPagingState
:> Get
'[JSON]
TeamMembersPage))))))))
:<|> (Named
"get-team-member"
(Summary "Get single team member"
:> (CanThrow 'NotATeamMember
:> (CanThrow
'TeamMemberNotFound
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> Get
'[JSON]
TeamMemberOptPerms))))))))
:<|> (Named
"get-team-members-by-ids"
(Summary
"Get team members by user id list"
:> (Description
"The `has_more` field in the response body is always `false`."
:> (CanThrow
'NotATeamMember
:> (CanThrow
'BulkGetMemberLimitExceeded
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("get-members-by-ids-using-post"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (ReqBody
'[JSON]
UserIdList
:> Post
'[JSON]
TeamMemberListOptPerms))))))))))
:<|> (Named
"add-team-member"
(Summary
"Add a new team member"
:> (Until 'V4
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'NoAddToBinding
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'UserBindingExists
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))))))
:<|> (Named
"delete-team-member"
(Summary
"Remove an existing team member"
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> (ReqBody
'[JSON]
TeamMemberDeleteData
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"delete-non-binding-team-member"
(Summary
"Remove an existing team member"
:> (Until
'V4
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"update-team-member"
(Summary
"Update an existing team member"
:> (CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))
:<|> Named
"get-team-members-csv"
(Summary
"Get all members of the team as a CSV file"
:> (CanThrow
'AccessDenied
:> (Description
"The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> ("csv"
:> LowLevelStream
'GET
200
'[ '("Content-Disposition",
"attachment; filename=\"wire_team_members.csv\"")]
"CSV of team members"
CSV)))))))))))))))
:<|> TeamNotificationAPI))))))))))
:<|> (("i"
:> (Named
"status"
("status" :> MultiVerb 'GET '[JSON] '[RespondEmpty 200 "OK"] ())
:<|> (Named
"delete-user"
(Summary
"Remove a user from their teams and conversations and erase their clients"
:> (ZLocalUser
:> (ZOptConn
:> ("user"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty 200 "Remove a user from Galley"]
()))))
:<|> (Named
"connect"
(Summary "Create a connect conversation (deprecated)"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'InvalidOperation
:> (CanThrow 'NotConnected
:> (CanThrow UnreachableBackends
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> ("connect"
:> (ReqBody '[JSON] Connect
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))
:<|> (Named
"get-conversation-clients"
(Summary "Get mls conversation client list"
:> (CanThrow 'ConvNotFound
:> ("group"
:> (Capture "gid" GroupId
:> MultiVerb
'GET
'[JSON]
'[Respond 200 "Clients" ClientList]
ClientList))))
:<|> (Named
"guard-legalhold-policy-conflicts"
("guard-legalhold-policy-conflicts"
:> (CanThrow 'MissingLegalholdConsent
:> (CanThrow 'MissingLegalholdConsentOldClients
:> (ReqBody '[JSON] GuardLegalholdPolicyConflicts
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200 "Guard Legalhold Policy"]
()))))
:<|> (("legalhold"
:> ("whitelisted-teams"
:> (Capture "tid" TeamId
:> (Named
"set-team-legalhold-whitelisted"
(MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200 "Team Legalhold Whitelisted"]
())
:<|> (Named
"unset-team-legalhold-whitelisted"
(MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
204
"Team Legalhold un-Whitelisted"]
())
:<|> Named
"get-team-legalhold-whitelisted"
(MultiVerb
'GET
'[JSON]
'[RespondEmpty
404
"Team not Legalhold Whitelisted",
RespondEmpty
200
"Team Legalhold Whitelisted"]
Bool))))))
:<|> (("teams"
:> (Capture "tid" TeamId
:> (Named
"get-team-internal"
(CanThrow 'TeamNotFound
:> Get '[JSON] TeamData)
:<|> (Named
"create-binding-team"
(ZUser
:> (ReqBody '[JSON] NewTeam
:> MultiVerb
'PUT
'[JSON]
'[WithHeaders
'[Header
"Location"
TeamId]
TeamId
(RespondEmpty
201 "OK")]
TeamId))
:<|> (Named
"delete-binding-team"
(CanThrow 'NoBindingTeam
:> (CanThrow
'NotAOneMemberTeam
:> (CanThrow
'DeleteQueueFull
:> (CanThrow
'TeamNotFound
:> (QueryFlag
"force"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
202
"OK"]
())))))
:<|> (Named
"get-team-name"
("name"
:> (CanThrow
'TeamNotFound
:> Get
'[JSON]
TeamName))
:<|> (Named
"update-team-status"
("status"
:> (CanThrow
'TeamNotFound
:> (CanThrow
'InvalidTeamStatusUpdate
:> (ReqBody
'[JSON]
TeamStatusUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (("members"
:> (Named
"unchecked-add-team-member"
(CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (CanThrow
'TooManyTeamAdmins
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (Named
"unchecked-get-team-members"
(QueryParam'
'[Strict]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> Get
'[JSON]
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(Capture
"uid"
UserId
:> (CanThrow
'TeamMemberNotFound
:> Get
'[JSON]
TeamMember))
:<|> (Named
"can-user-join-team"
("check"
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User can join"]
()))
:<|> Named
"unchecked-update-team-member"
(CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
())))))))))))))
:<|> (Named
"user-is-team-owner"
("is-team-owner"
:> (Capture
"uid"
UserId
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'NotATeamMember
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User is team owner"]
())))))
:<|> ("search-visibility"
:> (Named
"get-search-visibility-internal"
(Get
'[JSON]
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(CanThrow
'TeamSearchVisibilityNotEnabled
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (ReqBody
'[JSON]
TeamSearchVisibilityView
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
204
"OK"]
()))))))))))))))))
:<|> ((Named
"get-team-members"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> ("members"
:> Get
'[JSON]
TeamMemberList))))))
:<|> (Named
"get-team-id"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> Get
'[JSON]
TeamId)))))
:<|> (Named
"test-get-clients"
("test"
:> ("clients"
:> (ZUser
:> Get
'[JSON]
[ClientId])))
:<|> (Named
"test-add-client"
("clients"
:> (ZUser
:> (Capture
"cid"
ClientId
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
())))
:<|> (Named
"test-delete-client"
("clients"
:> (ZUser
:> (Capture
"cid"
ClientId
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))
:<|> (Named
"add-service"
("services"
:> (ReqBody
'[JSON]
Service
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"delete-service"
("services"
:> (ReqBody
'[JSON]
ServiceRef
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"i-add-bot"
(CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> ("bots"
:> (ZLocalUser
:> (ZConn
:> (ReqBody
'[JSON]
AddBot
:> Post
'[JSON]
Event))))))))
:<|> (Named
"delete-bot"
(CanThrow
'ConvNotFound
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> ("bots"
:> (ZLocalUser
:> (ZOptConn
:> (ReqBody
'[JSON]
RemoveBot
:> MultiVerb
'DELETE
'[JSON]
(UpdateResponses
"Bot not found"
"Bot deleted"
Event)
(UpdateResult
Event)))))))
:<|> (Named
"put-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> (ReqBody
'[JSON]
CustomBackend
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
201
"OK"]
()))))
:<|> Named
"delete-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))))))))))))
:<|> (Named
"upsert-one2one"
(Summary
"Create or Update a connect or one2one conversation."
:> ("conversations"
:> ("one2one"
:> ("upsert"
:> (ReqBody
'[JSON]
UpsertOne2OneConversationRequest
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Upsert One2One Policy"]
())))))
:<|> ((((Named
'("iget", LegalholdConfig)
(Description ""
:> (Summary
"Get config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("iput",
LegalholdConfig)
(Description ""
:> (Summary
"Put config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))
:<|> Named
'("ipatch",
LegalholdConfig)
(Description ""
:> (Summary
"Patch config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LegalholdConfig)
:> Patch
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("iget", SSOConfig)
(Description ""
:> (Summary
"Get config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("iput",
SSOConfig)
(Description ""
:> (Summary
"Put config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(Feature
SSOConfig)
:> Put
'[JSON]
(LockableFeature
SSOConfig)))))))))))))
:<|> Named
'("ipatch",
SSOConfig)
(Description
""
:> (Summary
"Patch config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SSOConfig)
:> Patch
'[JSON]
(LockableFeature
SSOConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(Description ""
:> (Summary
"Get config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Put config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Patch config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityAvailableConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Patch config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityInboundConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Put config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(Feature
ValidateSAMLEmailsConfig)
:> Put
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Patch config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ValidateSAMLEmailsConfig)
:> Patch
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Put config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(Feature
DigitalSignaturesConfig)
:> Put
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Patch config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
DigitalSignaturesConfig)
:> Patch
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> ((Named
'("iget",
AppLockConfig)
(Description
""
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("iput",
AppLockConfig)
(Description
""
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))
:<|> Named
'("ipatch",
AppLockConfig)
(Description
""
:> (Summary
"Patch config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
AppLockConfig)
:> Patch
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("iget",
FileSharingConfig)
(Description
""
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("iput",
FileSharingConfig)
(Description
""
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))
:<|> Named
'("ipatch",
FileSharingConfig)
(Description
""
:> (Summary
"Patch config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
FileSharingConfig)
:> Patch
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(Description
""
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Patch config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ConferenceCallingConfig)
:> Patch
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Patch config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SelfDeletingMessagesConfig)
:> Patch
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(Description
""
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("iput",
GuestLinksConfig)
(Description
""
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))
:<|> Named
'("ipatch",
GuestLinksConfig)
(Description
""
:> (Summary
"Patch config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
GuestLinksConfig)
:> Patch
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Patch config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SndFactorPasswordChallengeConfig)
:> Patch
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("iget",
MLSConfig)
(Description
""
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))
:<|> (Named
'("iput",
MLSConfig)
(Description
""
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig)))))))))))))
:<|> Named
'("ipatch",
MLSConfig)
(Description
""
:> (Summary
"Patch config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MLSConfig)
:> Patch
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))))))))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Patch config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig)
:> Patch
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig))))))))))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Patch config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
OutlookCalIntegrationConfig)
:> Patch
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Patch config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsE2EIdConfig)
:> Patch
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(Description
""
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))
:<|> (Named
'("iput",
MlsMigrationConfig)
(Description
""
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(Description
""
:> (Summary
"Patch config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsMigrationConfig)
:> Patch
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Patch config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
EnforceFileDownloadLocationConfig)
:> Patch
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Put config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(Feature
LimitedEventFanoutConfig)
:> Put
'[JSON]
(LockableFeature
LimitedEventFanoutConfig)))))))))))))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Patch config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LimitedEventFanoutConfig)
:> Patch
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))))))))))))))))))))))))
:<|> (Named
'("ilock",
FileSharingConfig)
(Summary
"(Un-)lock fileSharing"
:> (Description ""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(Summary
"(Un-)lock conferenceCalling"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(Summary
"(Un-)lock selfDeletingMessages"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
GuestLinksConfig)
(Summary
"(Un-)lock conversationGuestLinks"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(Summary
"(Un-)lock sndFactorPasswordChallenge"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MLSConfig)
(Summary
"(Un-)lock mls"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(Summary
"(Un-)lock outlookCalIntegration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(Summary
"(Un-)lock mlsE2EId"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsMigrationConfig)
(Summary
"(Un-)lock mlsMigration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(Summary
"(Un-)lock enforceFileDownloadLocation"
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(Summary
"Get team feature status in bulk for feature searchVisibilityInbound"
:> ("features-multi-teams"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
TeamFeatureNoConfigMultiRequest
:> Post
'[JSON]
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig)))))
:<|> Named
"feature-configs-internal"
(Summary
"Get all feature configs (for user/team; if n/a fall back to site config)."
:> ("feature-configs"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional user id"]
"user_id"
UserId
:> Get
'[JSON]
AllTeamFeatures))))))))))))))))))
:<|> (IFederationAPI
:<|> (IConversationAPI
:<|> IEJPDAPI)))))))))))))
:<|> (("federation"
:> (Named
"on-conversation-created"
("on-conversation-created"
:> (OriginDomainHeader
:> (ReqBody '[JSON] (ConversationCreated ConvId)
:> Post '[JSON] EmptyResponse)))
:<|> (Named
"get-conversations@v1"
(Until 'V2
:> ("get-conversations"
:> (OriginDomainHeader
:> (ReqBody '[JSON] GetConversationsRequest
:> Post '[JSON] GetConversationsResponse))))
:<|> (Named
"get-conversations"
(From 'V2
:> ("get-conversations"
:> (OriginDomainHeader
:> (ReqBody '[JSON] GetConversationsRequest
:> Post '[JSON] GetConversationsResponseV2))))
:<|> (Named
"leave-conversation"
("leave-conversation"
:> (OriginDomainHeader
:> (ReqBody '[JSON] LeaveConversationRequest
:> Post '[JSON] LeaveConversationResponse)))
:<|> (Named
"send-message"
("send-message"
:> (OriginDomainHeader
:> (ReqBody '[JSON] ProteusMessageSendRequest
:> Post '[JSON] MessageSendResponse)))
:<|> (Named
"update-conversation"
("update-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON] ConversationUpdateRequest
:> Post
'[JSON]
ConversationUpdateResponse)))
:<|> (Named
"mls-welcome"
("mls-welcome"
:> (OriginDomainHeader
:> (ReqBody '[JSON] MLSWelcomeRequest
:> Post
'[JSON]
MLSWelcomeResponse)))
:<|> (Named
"send-mls-message"
("send-mls-message"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
MLSMessageSendRequest
:> Post
'[JSON]
MLSMessageResponse)))
:<|> (Named
"send-mls-commit-bundle"
("send-mls-commit-bundle"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
MLSMessageSendRequest
:> Post
'[JSON]
MLSMessageResponse)))
:<|> (Named
"query-group-info"
("query-group-info"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetGroupInfoRequest
:> Post
'[JSON]
GetGroupInfoResponse)))
:<|> (Named
"update-typing-indicator"
("update-typing-indicator"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
TypingDataUpdateRequest
:> Post
'[JSON]
TypingDataUpdateResponse)))
:<|> (Named
"on-typing-indicator-updated"
("on-typing-indicator-updated"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
TypingDataUpdated
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
"get-sub-conversation"
(From
'V1
:> ("get-sub-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetSubConversationsRequest
:> Post
'[JSON]
GetSubConversationsResponse))))
:<|> (Named
"delete-sub-conversation"
(From
'V1
:> ("delete-sub-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
DeleteSubConversationFedRequest
:> Post
'[JSON]
DeleteSubConversationResponse))))
:<|> (Named
"leave-sub-conversation"
(From
'V1
:> ("leave-sub-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
LeaveSubConversationRequest
:> Post
'[JSON]
LeaveSubConversationResponse))))
:<|> (Named
"get-one2one-conversation@v1"
(From
'V1
:> (Until
'V2
:> ("get-one2one-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetOne2OneConversationRequest
:> Post
'[JSON]
GetOne2OneConversationResponse)))))
:<|> (Named
"get-one2one-conversation"
(From
'V2
:> ("get-one2one-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetOne2OneConversationRequest
:> Post
'[JSON]
GetOne2OneConversationResponseV2))))
:<|> (Named
"on-client-removed"
("on-client-removed"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
ClientRemovedRequest
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
"on-message-sent"
("on-message-sent"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
(RemoteMessage
ConvId)
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
"on-mls-message-sent"
("on-mls-message-sent"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
RemoteMLSMessage
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
(Versioned
'V0
"on-conversation-updated")
(Until
'V1
:> ("on-conversation-updated"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
ConversationUpdateV0
:> Post
'[JSON]
EmptyResponse))))
:<|> (Named
"on-conversation-updated"
(From
'V1
:> ("on-conversation-updated"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
ConversationUpdate
:> Post
'[JSON]
EmptyResponse))))
:<|> Named
"on-user-deleted-conversations"
("on-user-deleted-conversations"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
UserDeletedConversationsNotification
:> Post
'[JSON]
EmptyResponse))))))))))))))))))))))))))
:<|> Raw)))
-> Middleware
forall {k} (proxy :: k -> *) (api :: k).
RoutesToPaths api =>
proxy api -> Middleware
servantPrometheusMiddleware (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @CombinedAPI)
Middleware -> Middleware -> Middleware
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Middleware
otelMiddleware
Middleware -> Middleware -> Middleware
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Middleware
GZip.gunzip
Middleware -> Middleware -> Middleware
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GzipSettings -> Middleware
GZip.gzip GzipSettings
forall a. Default a => a
GZip.def
Middleware -> Middleware -> Middleware
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Logger -> HeaderName -> Middleware
catchErrors Logger
logger HeaderName
defaultRequestIdHeaderName
(forall b. (() -> IO b) -> IO b) -> Codensity IO ()
forall k (m :: k -> *) a.
(forall (b :: k). (a -> m b) -> m b) -> Codensity m a
Codensity \() -> IO b
k ->
() -> IO b
k () IO b -> IO () -> IO b
forall a b. IO a -> IO b -> IO a
`finally` do
Logger -> (Msg -> Msg) -> IO ()
forall (m :: * -> *). MonadIO m => Logger -> (Msg -> Msg) -> m ()
Log.info Logger
logger ((Msg -> Msg) -> IO ()) -> (Msg -> Msg) -> IO ()
forall a b. (a -> b) -> a -> b
$ forall a. ToBytes a => a -> Msg -> Msg
Log.msg @Text Text
"Galley application finished."
Logger -> IO ()
forall (m :: * -> *). MonadIO m => Logger -> m ()
Log.flush Logger
logger
Logger -> IO ()
forall (m :: * -> *). MonadIO m => Logger -> m ()
Log.close Logger
logger
(Application, Env) -> Codensity IO (Application, Env)
forall a. a -> Codensity IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Middleware
middlewares Middleware -> Middleware
forall a b. (a -> b) -> a -> b
$ Env -> Application
servantApp Env
env, Env
env)
where
fallback :: Application
fallback :: Application
fallback Request
_ Response -> IO ResponseReceived
k =
Response -> IO ResponseReceived
k (Response -> IO ResponseReceived)
-> Response -> IO ResponseReceived
forall a b. (a -> b) -> a -> b
$
Status -> ResponseHeaders -> LByteString -> Response
responseLBS Status
HTTP.status404 [(HeaderName
"Content-Type", ByteString
"application/json")] (LByteString -> Response) -> LByteString -> Response
forall a b. (a -> b) -> a -> b
$
Error -> LByteString
forall a. ToJSON a => a -> LByteString
Aeson.encode (Error -> LByteString) -> Error -> LByteString
forall a b. (a -> b) -> a -> b
$
Status -> LText -> LText -> Error
mkError Status
HTTP.status404 LText
"no-endpoint" LText
"The requested endpoint does not exist"
servantApp :: Env -> Application
servantApp :: Env -> Application
servantApp Env
e0 Request
r Response -> IO ResponseReceived
cont = do
let rid :: RequestId
rid = HeaderName -> Request -> RequestId
getRequestId HeaderName
defaultRequestIdHeaderName Request
r
e :: Env
e = (RequestId -> Identity RequestId) -> Env -> Identity Env
Lens' Env RequestId
reqId ((RequestId -> Identity RequestId) -> Env -> Identity Env)
-> RequestId -> Env -> Env
forall s t a b. ASetter s t a b -> b -> s -> t
.~ RequestId
rid (Env -> Env) -> Env -> Env
forall a b. (a -> b) -> a -> b
$ Env
e0
Proxy
(((Named
"get-unqualified-conversation"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond 'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-unqualified-conversation-legalhold-alias"
(Summary "Get a conversation by ID (Legalhold alias)"
:> (Until 'V2
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("legalhold"
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation))))))))
:<|> (Named
"get-conversation@v2"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-conversation@v5"
(Summary "Get a conversation by ID"
:> (From 'V3
:> (Until 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5 200 "Conversation" Conversation]
Conversation))))))))
:<|> (Named
"get-conversation"
(Summary "Get a conversation by ID"
:> (From 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> Get '[JSON] Conversation)))))))
:<|> (Named
"get-conversation-roles"
(Summary
"Get existing roles available for the given conversation"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("roles"
:> Get
'[JSON]
ConversationRolesList)))))))
:<|> (Named
"get-group-info"
(Summary "Get MLS group information"
:> (From 'V5
:> (CanThrow 'ConvNotFound
:> (CanThrow 'MLSMissingGroupInfo
:> (CanThrow 'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv" ConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))
:<|> (Named
"list-conversation-ids-unqualified"
(Summary
"[deprecated] Get all local conversation IDs."
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("ids"
:> (QueryParam'
'[Optional, Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional, Strict,
Description
"Maximum number of IDs to return"]
"size"
(Range 1 1000 Int32)
:> Get
'[JSON]
(ConversationList
ConvId))))))))
:<|> (Named
"list-conversation-ids-v2"
(Summary "Get all conversation IDs."
:> (Until 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"list-conversation-ids"
(Summary "Get all conversation IDs."
:> (From 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"get-conversations"
(Summary
"Get all *local* conversations."
:> (Until 'V3
:> (Description
"Will not return remote conversations.\n\nUse `POST /conversations/list-ids` followed by `POST /conversations/list` instead."
:> (ZLocalUser
:> ("conversations"
:> (QueryParam'
'[Optional,
Strict,
Description
"Mutually exclusive with 'start' (at most 32 IDs per request)"]
"ids"
(Range
1
32
(CommaSeparatedList
ConvId))
:> (QueryParam'
'[Optional,
Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum number of conversations to return"]
"size"
(Range
1
500
Int32)
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2
200
"List of local conversations"
(ConversationList
Conversation)]
(ConversationList
Conversation)))))))))
:<|> (Named
"list-conversations@v1"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (Until 'V2
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> ("v2"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v2"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V2
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V2
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v5"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V5
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse))))))
:<|> (Named
"get-conversation-by-reusable-code"
(Summary
"Get limited conversation information by key/code pair"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'NotATeamMember
:> (ZLocalUser
:> ("conversations"
:> ("join"
:> (QueryParam'
'[Required,
Strict]
"key"
Key
:> (QueryParam'
'[Required,
Strict]
"code"
Value
:> Get
'[JSON]
ConversationCoverView))))))))))))
:<|> (Named
"create-group-conversation@v2"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))))))))
:<|> (Named
"create-group-conversation@v3"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (From
'V3
:> (Until
'V4
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-group-conversation@v5"
(Summary
"Create a new conversation"
:> (From
'V4
:> (Until
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V5
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse)))))))))))))))))
:<|> (Named
"create-group-conversation"
(Summary
"Create a new conversation"
:> (From
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V6
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse))))))))))))))))
:<|> (Named
"create-self-conversation@v2"
(Summary
"Create a self-conversation"
:> (Until
'V3
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"create-self-conversation@v5"
(Summary
"Create a self-conversation"
:> (From
'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))
:<|> (Named
"create-self-conversation"
(Summary
"Create a self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"get-mls-self-conversation@v5"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"The MLS self-conversation"
Conversation]
Conversation)))))))
:<|> (Named
"get-mls-self-conversation"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"The MLS self-conversation"
Conversation]
Conversation))))))
:<|> (Named
"get-subconversation"
(Summary
"Get information about an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSSubConvUnsupportedConvType
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Subconversation"
PublicSubConversation]
PublicSubConversation))))))))))
:<|> (Named
"leave-subconversation"
(Summary
"Leave an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> (ZClient
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("self"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))))))))))))))
:<|> (Named
"delete-subconversation"
(Summary
"Delete an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSStaleMessage
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> (ReqBody
'[JSON]
DeleteSubConversationRequest
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Deletion successful"
()]
()))))))))))))
:<|> (Named
"get-subconversation-group-info"
(Summary
"Get MLS group information of subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSMissingGroupInfo
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))))
:<|> (Named
"create-one-to-one-conversation@v2"
(Summary
"Create a 1:1 conversation"
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-one-to-one-conversation"
(Summary
"Create a 1:1 conversation"
:> (From
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v5"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'MLSFederatedOne2OneNotSupported
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"MLS 1-1 conversation"
Conversation]
Conversation))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v6"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V6
:> (Until
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
MLSPublicKey)]
(MLSOne2OneConversation
MLSPublicKey))))))))))
:<|> (Named
"get-one-to-one-mls-conversation"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
SomeKey)]
(MLSOne2OneConversation
SomeKey))))))))))
:<|> (Named
"add-members-to-conversation-unqualified"
(Summary
"Add members to an existing conversation (deprecated)"
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
Invite
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"add-members-to-conversation-unqualified2"
(Summary
"Add qualified members to an existing conversation."
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> ("v2"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event)))))))))))))))))))))
:<|> (Named
"add-members-to-conversation"
(Summary
"Add qualified members to an existing conversation."
:> (From
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"join-conversation-by-id-unqualified"
(Summary
"Join a conversation by its ID (if link access enabled) (deprecated)"
:> (Until
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("join"
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event)))))))))))))
:<|> (Named
"join-conversation-by-code-unqualified"
(Summary
"Join a conversation using a reusable code"
:> (Description
"If the guest links team feature is disabled, this will fail with 409 GuestLinksDisabled.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/code-check` which responds with 404 CodeNotFound if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("join"
:> (ReqBody
'[JSON]
JoinConversationByCode
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event))))))))))))))))
:<|> (Named
"code-check"
(Summary
"Check validity of a conversation code."
:> (Description
"If the guest links team feature is disabled, this will fail with 404 CodeNotFound.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/join` which responds with 409 GuestLinksDisabled if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidConversationPassword
:> ("conversations"
:> ("code-check"
:> (ReqBody
'[JSON]
ConversationCode
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Valid"]
()))))))))
:<|> (Named
"create-conversation-code-unqualified@v3"
(Summary
"Create or recreate a conversation code"
:> (Until
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> CreateConversationCodeVerb)))))))))))))
:<|> (Named
"create-conversation-code-unqualified"
(Summary
"Create or recreate a conversation code"
:> (From
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> (ReqBody
'[JSON]
CreateConversationCodeRequest
:> CreateConversationCodeVerb))))))))))))))
:<|> (Named
"get-conversation-guest-links-status"
(Summary
"Get the status of the guest links feature for a conversation that potentially has been created by someone from another team."
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))
:<|> (Named
"remove-code-unqualified"
(Summary
"Delete conversation code"
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Conversation code deleted."
Event]
Event))))))))
:<|> (Named
"get-code"
(Summary
"Get existing conversation code"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (ZHostOpt
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Conversation Code"
ConversationCodeInfo]
ConversationCodeInfo))))))))))
:<|> (Named
"member-typing-unqualified"
(Summary
"Sending typing notifications"
:> (Until
'V3
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
())))))))))
:<|> (Named
"member-typing-qualified"
(Summary
"Sending typing notifications"
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
()))))))))
:<|> (Named
"remove-member-unqualified"
(Summary
"Remove a member from a conversation (deprecated)"
:> (Until
'V2
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb)))))))))))
:<|> (Named
"remove-member"
(Summary
"Remove a member from a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb))))))))))
:<|> (Named
"update-other-member-unqualified"
(Summary
"Update membership of the specified user (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:cnv_domain/:cnv/members/:usr_domain/:usr` instead"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
())))))))))))))))
:<|> (Named
"update-other-member"
(Summary
"Update membership of the specified user"
:> (Description
"**Note**: at least one field has to be provided."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
()))))))))))))))
:<|> (Named
"update-conversation-name-deprecated"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-name-unqualified"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event)))))))))))))
:<|> (Named
"update-conversation-name"
(Summary
"Update conversation name"
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name updated"
"Name unchanged"
Event)
(UpdateResult
Event)))))))))))
:<|> (Named
"update-conversation-message-timer-unqualified"
(Summary
"Update the message timer for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:cnv/message-timer` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-message-timer"
(Summary
"Update the message timer for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-receipt-mode-unqualified"
(Summary
"Update receipt mode for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:domain/:cnv/receipt-mode` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-receipt-mode"
(Summary
"Update receipt mode for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-access-unqualified"
(Summary
"Update access modes for a conversation (deprecated)"
:> (Until
'V3
:> (Description
"Use PUT `/conversations/:domain/:cnv/access` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event))))))))))))))))
:<|> (Named
"update-conversation-access@v2"
(Summary
"Update access modes for a conversation"
:> (Until
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"update-conversation-access"
(Summary
"Update access modes for a conversation"
:> (From
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (ReqBody
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"get-conversation-self-unqualified"
(Summary
"Get self membership properties (deprecated)"
:> (Deprecated
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> Get
'[JSON]
(Maybe
Member)))))))
:<|> (Named
"update-conversation-self-unqualified"
(Summary
"Update self membership properties (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/self` instead."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
()))))))))))
:<|> (Named
"update-conversation-self"
(Summary
"Update self membership properties"
:> (Description
"**Note**: at least one field has to be provided."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
())))))))))
:<|> Named
"update-conversation-protocol"
(Summary
"Update the protocol of the conversation"
:> (From
'V5
:> (Description
"**Note**: Only proteus->mixed upgrade is supported."
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvInvalidProtocolTransition
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'InvalidOperation
:> (CanThrow
'MLSMigrationCriteriaNotSatisfied
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("protocol"
:> (ReqBody
'[JSON]
ProtocolUpdate
:> MultiVerb
'PUT
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
:<|> (TeamConversationAPI
:<|> ((Named
"post-otr-message-unqualified"
(Summary
"Post an encrypted message to a conversation (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("otr"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON, Proto] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))
:<|> (Named
"post-otr-broadcast-unqualified"
(Summary
"Broadcast an encrypted message to all team members and all contacts (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("otr"
:> ("messages"
:> (QueryParam
"ignore_missing" IgnoreMissing
:> (QueryParam
"report_missing"
ReportMissing
:> (ReqBody
'[JSON, Proto]
NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))))
:<|> (Named
"post-proteus-message"
(Summary
"Post an encrypted message to a conversation (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
(RawProto QualifiedNewOtrMessage)
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus))))))))))
:<|> Named
"post-proteus-broadcast"
(Summary
"Post an encrypted message to all team members and all contacts (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
QualifiedNewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus)))))))))))))))
:<|> ((Named
"post-bot-message-unqualified"
(ZBot
:> (ZConversation
:> (CanThrow 'ConvNotFound
:> ("bot"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse 'MissingLegalholdConsent,
Respond
412 "Missing clients" ClientMismatch,
Respond
201 "Message sent" ClientMismatch]
(PostOtrResponse ClientMismatch)))))))))
:<|> Named
"get-bot-conversation"
(CanThrow 'AccessDenied
:> (CanThrow 'ConvNotFound
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("bot"
:> ("conversation"
:> (ZBot
:> (ZConversation
:> Get '[JSON] BotConvView))))))))))
:<|> (TeamAPI
:<|> ((Named
'("get", SSOConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for sso"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig)))))))))))
:<|> ((Named
'("get", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))
:<|> Named
'("put", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Put config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid" TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("get", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))
:<|> Named
'("put", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary
"Put config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany '[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> (SearchVisibilityGet
:<|> (SearchVisibilitySet
:<|> (Named
'("get",
ValidateSAMLEmailsConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))
:<|> (Named
'("get",
DigitalSignaturesConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))
:<|> ((Named
'("get",
AppLockConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig)))))))))))
:<|> Named
'("put",
AppLockConfig)
(Description ""
:> (ZUser
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("get",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))
:<|> Named
'("put",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("get",
ClassifiedDomainsConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig)))))))))))
:<|> ((Named
'("get",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))
:<|> Named
'("put",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("get",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))
:<|> Named
'("put",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("get",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))
:<|> Named
'("put",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("get",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))
:<|> Named
'("put",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("get",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))))
:<|> Named
'("put",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig))))))))))))))))
:<|> ((Named
'("get",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))
:<|> Named
'("put",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("get",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))
:<|> Named
'("put",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("get",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))
:<|> Named
'("put",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> (Named
'("get",
MlsE2EIdConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))))
:<|> (Named
"put-MlsE2EIdConfig@v5"
(From
'V5
:> (Until
'V6
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> (Named
'("put",
MlsE2EIdConfig)
(From
'V6
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("get",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))
:<|> Named
'("put",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))))))
:<|> ((Named
'("get",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))
:<|> Named
'("put",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))))))
:<|> (Named
'("get",
LimitedEventFanoutConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))
:<|> (AllTeamFeaturesUserGet
:<|> (AllTeamFeaturesTeamGet
:<|> ((Named
'("get-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))
:<|> (Named
'("put-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `PUT /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))))
:<|> (Named
'("get-deprecated",
ValidateSAMLEmailsConfig)
(ZUser
:> (Summary
"[deprecated] Get config for validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/validateSAMLemails` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validate-saml-emails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))))
:<|> Named
'("get-deprecated",
DigitalSignaturesConfig)
(ZUser
:> (Summary
"[deprecated] Get config for digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/digitalSignatures` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digital-signatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> (Named
'("get-config",
LegalholdConfig)
(Summary
"[deprecated] Get feature config for feature legalhold"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("get-config",
SSOConfig)
(Summary
"[deprecated] Get feature config for feature sso"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("get-config",
SearchVisibilityAvailableConfig)
(Summary
"[deprecated] Get feature config for feature searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("get-config",
ValidateSAMLEmailsConfig)
(Summary
"[deprecated] Get feature config for feature validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("get-config",
DigitalSignaturesConfig)
(Summary
"[deprecated] Get feature config for feature digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("get-config",
AppLockConfig)
(Summary
"[deprecated] Get feature config for feature appLock"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("get-config",
FileSharingConfig)
(Summary
"[deprecated] Get feature config for feature fileSharing"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("get-config",
ClassifiedDomainsConfig)
(Summary
"[deprecated] Get feature config for feature classifiedDomains"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> (Named
'("get-config",
ConferenceCallingConfig)
(Summary
"[deprecated] Get feature config for feature conferenceCalling"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("get-config",
SelfDeletingMessagesConfig)
(Summary
"[deprecated] Get feature config for feature selfDeletingMessages"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("get-config",
GuestLinksConfig)
(Summary
"[deprecated] Get feature config for feature conversationGuestLinks"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("get-config",
SndFactorPasswordChallengeConfig)
(Summary
"[deprecated] Get feature config for feature sndFactorPasswordChallenge"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> Named
'("get-config",
MLSConfig)
(Summary
"[deprecated] Get feature config for feature mls"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"mls-message"
("mls"
:> (Summary "Post an MLS message"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow 'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("messages"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
Message)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Message sent"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))
:<|> (Named
"mls-commit-bundle"
("mls"
:> (Summary "Post a MLS CommitBundle"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow
'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
'MLSWelcomeMismatch
:> (CanThrow
'MLSLegalholdIncompatible
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("commit-bundles"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
CommitBundle)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Commit accepted and forwarded"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))))
:<|> Named
"mls-public-keys"
("mls"
:> (Summary
"Get public keys used by the backend to sign external proposals"
:> (Description
"The format of the returned key is determined by the `format` query parameter:\n - raw (default): base64-encoded raw public keys\n - jwk: keys are nested objects in JWK format."
:> (From 'V5
:> (CanThrow 'MLSNotEnabled
:> ("public-keys"
:> (ZLocalUser
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Public keys"
(MLSKeysByPurpose
(MLSKeys
SomeKey))]
(MLSKeysByPurpose
(MLSKeys
SomeKey))))))))))))
:<|> (CustomBackendAPI
:<|> ((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"
:> (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"
:> (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"
:> (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"
:> (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"
:> (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"]
()))))))))))))))))))))))))))))
:<|> ((Named
"get-team-members"
(Summary "Get team members"
:> (CanThrow 'NotATeamMember
:> (ZLocalUser
:> ("teams"
:> (Capture "tid" TeamId
:> ("members"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
"pagingState"
TeamMembersPagingState
:> Get
'[JSON]
TeamMembersPage))))))))
:<|> (Named
"get-team-member"
(Summary "Get single team member"
:> (CanThrow 'NotATeamMember
:> (CanThrow
'TeamMemberNotFound
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> Get
'[JSON]
TeamMemberOptPerms))))))))
:<|> (Named
"get-team-members-by-ids"
(Summary
"Get team members by user id list"
:> (Description
"The `has_more` field in the response body is always `false`."
:> (CanThrow
'NotATeamMember
:> (CanThrow
'BulkGetMemberLimitExceeded
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("get-members-by-ids-using-post"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (ReqBody
'[JSON]
UserIdList
:> Post
'[JSON]
TeamMemberListOptPerms))))))))))
:<|> (Named
"add-team-member"
(Summary
"Add a new team member"
:> (Until 'V4
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'NoAddToBinding
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'UserBindingExists
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))))))
:<|> (Named
"delete-team-member"
(Summary
"Remove an existing team member"
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> (ReqBody
'[JSON]
TeamMemberDeleteData
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"delete-non-binding-team-member"
(Summary
"Remove an existing team member"
:> (Until
'V4
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"update-team-member"
(Summary
"Update an existing team member"
:> (CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))
:<|> Named
"get-team-members-csv"
(Summary
"Get all members of the team as a CSV file"
:> (CanThrow
'AccessDenied
:> (Description
"The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> ("csv"
:> LowLevelStream
'GET
200
'[ '("Content-Disposition",
"attachment; filename=\"wire_team_members.csv\"")]
"CSV of team members"
CSV)))))))))))))))
:<|> TeamNotificationAPI))))))))))
:<|> (("i"
:> (Named
"status"
("status" :> MultiVerb 'GET '[JSON] '[RespondEmpty 200 "OK"] ())
:<|> (Named
"delete-user"
(Summary
"Remove a user from their teams and conversations and erase their clients"
:> (ZLocalUser
:> (ZOptConn
:> ("user"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty 200 "Remove a user from Galley"]
()))))
:<|> (Named
"connect"
(Summary "Create a connect conversation (deprecated)"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'InvalidOperation
:> (CanThrow 'NotConnected
:> (CanThrow UnreachableBackends
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> ("connect"
:> (ReqBody '[JSON] Connect
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))
:<|> (Named
"get-conversation-clients"
(Summary "Get mls conversation client list"
:> (CanThrow 'ConvNotFound
:> ("group"
:> (Capture "gid" GroupId
:> MultiVerb
'GET
'[JSON]
'[Respond 200 "Clients" ClientList]
ClientList))))
:<|> (Named
"guard-legalhold-policy-conflicts"
("guard-legalhold-policy-conflicts"
:> (CanThrow 'MissingLegalholdConsent
:> (CanThrow 'MissingLegalholdConsentOldClients
:> (ReqBody '[JSON] GuardLegalholdPolicyConflicts
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200 "Guard Legalhold Policy"]
()))))
:<|> (("legalhold"
:> ("whitelisted-teams"
:> (Capture "tid" TeamId
:> (Named
"set-team-legalhold-whitelisted"
(MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200 "Team Legalhold Whitelisted"]
())
:<|> (Named
"unset-team-legalhold-whitelisted"
(MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
204
"Team Legalhold un-Whitelisted"]
())
:<|> Named
"get-team-legalhold-whitelisted"
(MultiVerb
'GET
'[JSON]
'[RespondEmpty
404
"Team not Legalhold Whitelisted",
RespondEmpty
200
"Team Legalhold Whitelisted"]
Bool))))))
:<|> (("teams"
:> (Capture "tid" TeamId
:> (Named
"get-team-internal"
(CanThrow 'TeamNotFound
:> Get '[JSON] TeamData)
:<|> (Named
"create-binding-team"
(ZUser
:> (ReqBody '[JSON] NewTeam
:> MultiVerb
'PUT
'[JSON]
'[WithHeaders
'[Header
"Location"
TeamId]
TeamId
(RespondEmpty
201 "OK")]
TeamId))
:<|> (Named
"delete-binding-team"
(CanThrow 'NoBindingTeam
:> (CanThrow
'NotAOneMemberTeam
:> (CanThrow
'DeleteQueueFull
:> (CanThrow
'TeamNotFound
:> (QueryFlag
"force"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
202
"OK"]
())))))
:<|> (Named
"get-team-name"
("name"
:> (CanThrow
'TeamNotFound
:> Get
'[JSON]
TeamName))
:<|> (Named
"update-team-status"
("status"
:> (CanThrow
'TeamNotFound
:> (CanThrow
'InvalidTeamStatusUpdate
:> (ReqBody
'[JSON]
TeamStatusUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (("members"
:> (Named
"unchecked-add-team-member"
(CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (CanThrow
'TooManyTeamAdmins
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (Named
"unchecked-get-team-members"
(QueryParam'
'[Strict]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> Get
'[JSON]
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(Capture
"uid"
UserId
:> (CanThrow
'TeamMemberNotFound
:> Get
'[JSON]
TeamMember))
:<|> (Named
"can-user-join-team"
("check"
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User can join"]
()))
:<|> Named
"unchecked-update-team-member"
(CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
())))))))))))))
:<|> (Named
"user-is-team-owner"
("is-team-owner"
:> (Capture
"uid"
UserId
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'NotATeamMember
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User is team owner"]
())))))
:<|> ("search-visibility"
:> (Named
"get-search-visibility-internal"
(Get
'[JSON]
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(CanThrow
'TeamSearchVisibilityNotEnabled
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (ReqBody
'[JSON]
TeamSearchVisibilityView
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
204
"OK"]
()))))))))))))))))
:<|> ((Named
"get-team-members"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> ("members"
:> Get
'[JSON]
TeamMemberList))))))
:<|> (Named
"get-team-id"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> Get
'[JSON]
TeamId)))))
:<|> (Named
"test-get-clients"
("test"
:> ("clients"
:> (ZUser
:> Get
'[JSON]
[ClientId])))
:<|> (Named
"test-add-client"
("clients"
:> (ZUser
:> (Capture
"cid"
ClientId
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
())))
:<|> (Named
"test-delete-client"
("clients"
:> (ZUser
:> (Capture
"cid"
ClientId
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))
:<|> (Named
"add-service"
("services"
:> (ReqBody
'[JSON]
Service
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"delete-service"
("services"
:> (ReqBody
'[JSON]
ServiceRef
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"i-add-bot"
(CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> ("bots"
:> (ZLocalUser
:> (ZConn
:> (ReqBody
'[JSON]
AddBot
:> Post
'[JSON]
Event))))))))
:<|> (Named
"delete-bot"
(CanThrow
'ConvNotFound
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> ("bots"
:> (ZLocalUser
:> (ZOptConn
:> (ReqBody
'[JSON]
RemoveBot
:> MultiVerb
'DELETE
'[JSON]
(UpdateResponses
"Bot not found"
"Bot deleted"
Event)
(UpdateResult
Event)))))))
:<|> (Named
"put-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> (ReqBody
'[JSON]
CustomBackend
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
201
"OK"]
()))))
:<|> Named
"delete-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))))))))))))
:<|> (Named
"upsert-one2one"
(Summary
"Create or Update a connect or one2one conversation."
:> ("conversations"
:> ("one2one"
:> ("upsert"
:> (ReqBody
'[JSON]
UpsertOne2OneConversationRequest
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Upsert One2One Policy"]
())))))
:<|> ((((Named
'("iget", LegalholdConfig)
(Description ""
:> (Summary
"Get config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("iput",
LegalholdConfig)
(Description ""
:> (Summary
"Put config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))
:<|> Named
'("ipatch",
LegalholdConfig)
(Description ""
:> (Summary
"Patch config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LegalholdConfig)
:> Patch
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("iget", SSOConfig)
(Description ""
:> (Summary
"Get config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("iput",
SSOConfig)
(Description ""
:> (Summary
"Put config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(Feature
SSOConfig)
:> Put
'[JSON]
(LockableFeature
SSOConfig)))))))))))))
:<|> Named
'("ipatch",
SSOConfig)
(Description
""
:> (Summary
"Patch config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SSOConfig)
:> Patch
'[JSON]
(LockableFeature
SSOConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(Description ""
:> (Summary
"Get config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Put config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Patch config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityAvailableConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Patch config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityInboundConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Put config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(Feature
ValidateSAMLEmailsConfig)
:> Put
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Patch config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ValidateSAMLEmailsConfig)
:> Patch
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Put config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(Feature
DigitalSignaturesConfig)
:> Put
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Patch config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
DigitalSignaturesConfig)
:> Patch
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> ((Named
'("iget",
AppLockConfig)
(Description
""
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("iput",
AppLockConfig)
(Description
""
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))
:<|> Named
'("ipatch",
AppLockConfig)
(Description
""
:> (Summary
"Patch config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
AppLockConfig)
:> Patch
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("iget",
FileSharingConfig)
(Description
""
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("iput",
FileSharingConfig)
(Description
""
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))
:<|> Named
'("ipatch",
FileSharingConfig)
(Description
""
:> (Summary
"Patch config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
FileSharingConfig)
:> Patch
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(Description
""
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Patch config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ConferenceCallingConfig)
:> Patch
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Patch config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SelfDeletingMessagesConfig)
:> Patch
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(Description
""
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("iput",
GuestLinksConfig)
(Description
""
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))
:<|> Named
'("ipatch",
GuestLinksConfig)
(Description
""
:> (Summary
"Patch config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
GuestLinksConfig)
:> Patch
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Patch config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SndFactorPasswordChallengeConfig)
:> Patch
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("iget",
MLSConfig)
(Description
""
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))
:<|> (Named
'("iput",
MLSConfig)
(Description
""
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig)))))))))))))
:<|> Named
'("ipatch",
MLSConfig)
(Description
""
:> (Summary
"Patch config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MLSConfig)
:> Patch
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))))))))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Patch config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig)
:> Patch
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig))))))))))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Patch config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
OutlookCalIntegrationConfig)
:> Patch
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Patch config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsE2EIdConfig)
:> Patch
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(Description
""
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))
:<|> (Named
'("iput",
MlsMigrationConfig)
(Description
""
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(Description
""
:> (Summary
"Patch config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsMigrationConfig)
:> Patch
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Patch config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
EnforceFileDownloadLocationConfig)
:> Patch
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Put config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(Feature
LimitedEventFanoutConfig)
:> Put
'[JSON]
(LockableFeature
LimitedEventFanoutConfig)))))))))))))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Patch config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LimitedEventFanoutConfig)
:> Patch
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))))))))))))))))))))))))
:<|> (Named
'("ilock",
FileSharingConfig)
(Summary
"(Un-)lock fileSharing"
:> (Description ""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(Summary
"(Un-)lock conferenceCalling"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(Summary
"(Un-)lock selfDeletingMessages"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
GuestLinksConfig)
(Summary
"(Un-)lock conversationGuestLinks"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(Summary
"(Un-)lock sndFactorPasswordChallenge"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MLSConfig)
(Summary
"(Un-)lock mls"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(Summary
"(Un-)lock outlookCalIntegration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(Summary
"(Un-)lock mlsE2EId"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsMigrationConfig)
(Summary
"(Un-)lock mlsMigration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(Summary
"(Un-)lock enforceFileDownloadLocation"
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(Summary
"Get team feature status in bulk for feature searchVisibilityInbound"
:> ("features-multi-teams"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
TeamFeatureNoConfigMultiRequest
:> Post
'[JSON]
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig)))))
:<|> Named
"feature-configs-internal"
(Summary
"Get all feature configs (for user/team; if n/a fall back to site config)."
:> ("feature-configs"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional user id"]
"user_id"
UserId
:> Get
'[JSON]
AllTeamFeatures))))))))))))))))))
:<|> (IFederationAPI
:<|> (IConversationAPI
:<|> IEJPDAPI)))))))))))))
:<|> (("federation"
:> (Named
"on-conversation-created"
("on-conversation-created"
:> (OriginDomainHeader
:> (ReqBody '[JSON] (ConversationCreated ConvId)
:> Post '[JSON] EmptyResponse)))
:<|> (Named
"get-conversations@v1"
(Until 'V2
:> ("get-conversations"
:> (OriginDomainHeader
:> (ReqBody '[JSON] GetConversationsRequest
:> Post '[JSON] GetConversationsResponse))))
:<|> (Named
"get-conversations"
(From 'V2
:> ("get-conversations"
:> (OriginDomainHeader
:> (ReqBody '[JSON] GetConversationsRequest
:> Post '[JSON] GetConversationsResponseV2))))
:<|> (Named
"leave-conversation"
("leave-conversation"
:> (OriginDomainHeader
:> (ReqBody '[JSON] LeaveConversationRequest
:> Post '[JSON] LeaveConversationResponse)))
:<|> (Named
"send-message"
("send-message"
:> (OriginDomainHeader
:> (ReqBody '[JSON] ProteusMessageSendRequest
:> Post '[JSON] MessageSendResponse)))
:<|> (Named
"update-conversation"
("update-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON] ConversationUpdateRequest
:> Post
'[JSON]
ConversationUpdateResponse)))
:<|> (Named
"mls-welcome"
("mls-welcome"
:> (OriginDomainHeader
:> (ReqBody '[JSON] MLSWelcomeRequest
:> Post
'[JSON]
MLSWelcomeResponse)))
:<|> (Named
"send-mls-message"
("send-mls-message"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
MLSMessageSendRequest
:> Post
'[JSON]
MLSMessageResponse)))
:<|> (Named
"send-mls-commit-bundle"
("send-mls-commit-bundle"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
MLSMessageSendRequest
:> Post
'[JSON]
MLSMessageResponse)))
:<|> (Named
"query-group-info"
("query-group-info"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetGroupInfoRequest
:> Post
'[JSON]
GetGroupInfoResponse)))
:<|> (Named
"update-typing-indicator"
("update-typing-indicator"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
TypingDataUpdateRequest
:> Post
'[JSON]
TypingDataUpdateResponse)))
:<|> (Named
"on-typing-indicator-updated"
("on-typing-indicator-updated"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
TypingDataUpdated
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
"get-sub-conversation"
(From
'V1
:> ("get-sub-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetSubConversationsRequest
:> Post
'[JSON]
GetSubConversationsResponse))))
:<|> (Named
"delete-sub-conversation"
(From
'V1
:> ("delete-sub-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
DeleteSubConversationFedRequest
:> Post
'[JSON]
DeleteSubConversationResponse))))
:<|> (Named
"leave-sub-conversation"
(From
'V1
:> ("leave-sub-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
LeaveSubConversationRequest
:> Post
'[JSON]
LeaveSubConversationResponse))))
:<|> (Named
"get-one2one-conversation@v1"
(From
'V1
:> (Until
'V2
:> ("get-one2one-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetOne2OneConversationRequest
:> Post
'[JSON]
GetOne2OneConversationResponse)))))
:<|> (Named
"get-one2one-conversation"
(From
'V2
:> ("get-one2one-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetOne2OneConversationRequest
:> Post
'[JSON]
GetOne2OneConversationResponseV2))))
:<|> (Named
"on-client-removed"
("on-client-removed"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
ClientRemovedRequest
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
"on-message-sent"
("on-message-sent"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
(RemoteMessage
ConvId)
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
"on-mls-message-sent"
("on-mls-message-sent"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
RemoteMLSMessage
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
(Versioned
'V0
"on-conversation-updated")
(Until
'V1
:> ("on-conversation-updated"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
ConversationUpdateV0
:> Post
'[JSON]
EmptyResponse))))
:<|> (Named
"on-conversation-updated"
(From
'V1
:> ("on-conversation-updated"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
ConversationUpdate
:> Post
'[JSON]
EmptyResponse))))
:<|> Named
"on-user-deleted-conversations"
("on-user-deleted-conversations"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
UserDeletedConversationsNotification
:> Post
'[JSON]
EmptyResponse))))))))))))))))))))))))))
:<|> Raw)))
-> Context '[Domain, ErrorFormatters]
-> Server
(((Named
"get-unqualified-conversation"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond 'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-unqualified-conversation-legalhold-alias"
(Summary "Get a conversation by ID (Legalhold alias)"
:> (Until 'V2
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("legalhold"
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation))))))))
:<|> (Named
"get-conversation@v2"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-conversation@v5"
(Summary "Get a conversation by ID"
:> (From 'V3
:> (Until 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"Conversation"
Conversation]
Conversation))))))))
:<|> (Named
"get-conversation"
(Summary "Get a conversation by ID"
:> (From 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> Get '[JSON] Conversation)))))))
:<|> (Named
"get-conversation-roles"
(Summary
"Get existing roles available for the given conversation"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("roles"
:> Get
'[JSON]
ConversationRolesList)))))))
:<|> (Named
"get-group-info"
(Summary "Get MLS group information"
:> (From 'V5
:> (CanThrow 'ConvNotFound
:> (CanThrow 'MLSMissingGroupInfo
:> (CanThrow 'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv" ConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))
:<|> (Named
"list-conversation-ids-unqualified"
(Summary
"[deprecated] Get all local conversation IDs."
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("ids"
:> (QueryParam'
'[Optional, Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional, Strict,
Description
"Maximum number of IDs to return"]
"size"
(Range 1 1000 Int32)
:> Get
'[JSON]
(ConversationList
ConvId))))))))
:<|> (Named
"list-conversation-ids-v2"
(Summary "Get all conversation IDs."
:> (Until 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"list-conversation-ids"
(Summary "Get all conversation IDs."
:> (From 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"get-conversations"
(Summary
"Get all *local* conversations."
:> (Until 'V3
:> (Description
"Will not return remote conversations.\n\nUse `POST /conversations/list-ids` followed by `POST /conversations/list` instead."
:> (ZLocalUser
:> ("conversations"
:> (QueryParam'
'[Optional,
Strict,
Description
"Mutually exclusive with 'start' (at most 32 IDs per request)"]
"ids"
(Range
1
32
(CommaSeparatedList
ConvId))
:> (QueryParam'
'[Optional,
Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum number of conversations to return"]
"size"
(Range
1
500
Int32)
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2
200
"List of local conversations"
(ConversationList
Conversation)]
(ConversationList
Conversation)))))))))
:<|> (Named
"list-conversations@v1"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (Until 'V2
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> ("v2"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v2"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V2
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V2
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v5"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From
'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V5
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse))))))
:<|> (Named
"get-conversation-by-reusable-code"
(Summary
"Get limited conversation information by key/code pair"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'NotATeamMember
:> (ZLocalUser
:> ("conversations"
:> ("join"
:> (QueryParam'
'[Required,
Strict]
"key"
Key
:> (QueryParam'
'[Required,
Strict]
"code"
Value
:> Get
'[JSON]
ConversationCoverView))))))))))))
:<|> (Named
"create-group-conversation@v2"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))))))))
:<|> (Named
"create-group-conversation@v3"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (From
'V3
:> (Until
'V4
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-group-conversation@v5"
(Summary
"Create a new conversation"
:> (From
'V4
:> (Until
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V5
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse)))))))))))))))))
:<|> (Named
"create-group-conversation"
(Summary
"Create a new conversation"
:> (From
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V6
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse))))))))))))))))
:<|> (Named
"create-self-conversation@v2"
(Summary
"Create a self-conversation"
:> (Until
'V3
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"create-self-conversation@v5"
(Summary
"Create a self-conversation"
:> (From
'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))
:<|> (Named
"create-self-conversation"
(Summary
"Create a self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"get-mls-self-conversation@v5"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"The MLS self-conversation"
Conversation]
Conversation)))))))
:<|> (Named
"get-mls-self-conversation"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"The MLS self-conversation"
Conversation]
Conversation))))))
:<|> (Named
"get-subconversation"
(Summary
"Get information about an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSSubConvUnsupportedConvType
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Subconversation"
PublicSubConversation]
PublicSubConversation))))))))))
:<|> (Named
"leave-subconversation"
(Summary
"Leave an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> (ZClient
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("self"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))))))))))))))
:<|> (Named
"delete-subconversation"
(Summary
"Delete an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSStaleMessage
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> (ReqBody
'[JSON]
DeleteSubConversationRequest
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Deletion successful"
()]
()))))))))))))
:<|> (Named
"get-subconversation-group-info"
(Summary
"Get MLS group information of subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSMissingGroupInfo
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))))
:<|> (Named
"create-one-to-one-conversation@v2"
(Summary
"Create a 1:1 conversation"
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-one-to-one-conversation"
(Summary
"Create a 1:1 conversation"
:> (From
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v5"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'MLSFederatedOne2OneNotSupported
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"MLS 1-1 conversation"
Conversation]
Conversation))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v6"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V6
:> (Until
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
MLSPublicKey)]
(MLSOne2OneConversation
MLSPublicKey))))))))))
:<|> (Named
"get-one-to-one-mls-conversation"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
SomeKey)]
(MLSOne2OneConversation
SomeKey))))))))))
:<|> (Named
"add-members-to-conversation-unqualified"
(Summary
"Add members to an existing conversation (deprecated)"
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
Invite
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"add-members-to-conversation-unqualified2"
(Summary
"Add qualified members to an existing conversation."
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> ("v2"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event)))))))))))))))))))))
:<|> (Named
"add-members-to-conversation"
(Summary
"Add qualified members to an existing conversation."
:> (From
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"join-conversation-by-id-unqualified"
(Summary
"Join a conversation by its ID (if link access enabled) (deprecated)"
:> (Until
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("join"
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event)))))))))))))
:<|> (Named
"join-conversation-by-code-unqualified"
(Summary
"Join a conversation using a reusable code"
:> (Description
"If the guest links team feature is disabled, this will fail with 409 GuestLinksDisabled.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/code-check` which responds with 404 CodeNotFound if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("join"
:> (ReqBody
'[JSON]
JoinConversationByCode
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event))))))))))))))))
:<|> (Named
"code-check"
(Summary
"Check validity of a conversation code."
:> (Description
"If the guest links team feature is disabled, this will fail with 404 CodeNotFound.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/join` which responds with 409 GuestLinksDisabled if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidConversationPassword
:> ("conversations"
:> ("code-check"
:> (ReqBody
'[JSON]
ConversationCode
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Valid"]
()))))))))
:<|> (Named
"create-conversation-code-unqualified@v3"
(Summary
"Create or recreate a conversation code"
:> (Until
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> CreateConversationCodeVerb)))))))))))))
:<|> (Named
"create-conversation-code-unqualified"
(Summary
"Create or recreate a conversation code"
:> (From
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> (ReqBody
'[JSON]
CreateConversationCodeRequest
:> CreateConversationCodeVerb))))))))))))))
:<|> (Named
"get-conversation-guest-links-status"
(Summary
"Get the status of the guest links feature for a conversation that potentially has been created by someone from another team."
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))
:<|> (Named
"remove-code-unqualified"
(Summary
"Delete conversation code"
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Conversation code deleted."
Event]
Event))))))))
:<|> (Named
"get-code"
(Summary
"Get existing conversation code"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (ZHostOpt
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Conversation Code"
ConversationCodeInfo]
ConversationCodeInfo))))))))))
:<|> (Named
"member-typing-unqualified"
(Summary
"Sending typing notifications"
:> (Until
'V3
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
())))))))))
:<|> (Named
"member-typing-qualified"
(Summary
"Sending typing notifications"
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
()))))))))
:<|> (Named
"remove-member-unqualified"
(Summary
"Remove a member from a conversation (deprecated)"
:> (Until
'V2
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb)))))))))))
:<|> (Named
"remove-member"
(Summary
"Remove a member from a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb))))))))))
:<|> (Named
"update-other-member-unqualified"
(Summary
"Update membership of the specified user (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:cnv_domain/:cnv/members/:usr_domain/:usr` instead"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
())))))))))))))))
:<|> (Named
"update-other-member"
(Summary
"Update membership of the specified user"
:> (Description
"**Note**: at least one field has to be provided."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
()))))))))))))))
:<|> (Named
"update-conversation-name-deprecated"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-name-unqualified"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event)))))))))))))
:<|> (Named
"update-conversation-name"
(Summary
"Update conversation name"
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name updated"
"Name unchanged"
Event)
(UpdateResult
Event)))))))))))
:<|> (Named
"update-conversation-message-timer-unqualified"
(Summary
"Update the message timer for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:cnv/message-timer` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-message-timer"
(Summary
"Update the message timer for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-receipt-mode-unqualified"
(Summary
"Update receipt mode for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:domain/:cnv/receipt-mode` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-receipt-mode"
(Summary
"Update receipt mode for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-access-unqualified"
(Summary
"Update access modes for a conversation (deprecated)"
:> (Until
'V3
:> (Description
"Use PUT `/conversations/:domain/:cnv/access` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event))))))))))))))))
:<|> (Named
"update-conversation-access@v2"
(Summary
"Update access modes for a conversation"
:> (Until
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"update-conversation-access"
(Summary
"Update access modes for a conversation"
:> (From
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (ReqBody
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"get-conversation-self-unqualified"
(Summary
"Get self membership properties (deprecated)"
:> (Deprecated
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> Get
'[JSON]
(Maybe
Member)))))))
:<|> (Named
"update-conversation-self-unqualified"
(Summary
"Update self membership properties (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/self` instead."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
()))))))))))
:<|> (Named
"update-conversation-self"
(Summary
"Update self membership properties"
:> (Description
"**Note**: at least one field has to be provided."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
())))))))))
:<|> Named
"update-conversation-protocol"
(Summary
"Update the protocol of the conversation"
:> (From
'V5
:> (Description
"**Note**: Only proteus->mixed upgrade is supported."
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvInvalidProtocolTransition
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'InvalidOperation
:> (CanThrow
'MLSMigrationCriteriaNotSatisfied
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("protocol"
:> (ReqBody
'[JSON]
ProtocolUpdate
:> MultiVerb
'PUT
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
:<|> (TeamConversationAPI
:<|> ((Named
"post-otr-message-unqualified"
(Summary
"Post an encrypted message to a conversation (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("otr"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON, Proto] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))
:<|> (Named
"post-otr-broadcast-unqualified"
(Summary
"Broadcast an encrypted message to all team members and all contacts (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("otr"
:> ("messages"
:> (QueryParam
"ignore_missing"
IgnoreMissing
:> (QueryParam
"report_missing"
ReportMissing
:> (ReqBody
'[JSON, Proto]
NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))))
:<|> (Named
"post-proteus-message"
(Summary
"Post an encrypted message to a conversation (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
(RawProto
QualifiedNewOtrMessage)
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus))))))))))
:<|> Named
"post-proteus-broadcast"
(Summary
"Post an encrypted message to all team members and all contacts (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
QualifiedNewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus)))))))))))))))
:<|> ((Named
"post-bot-message-unqualified"
(ZBot
:> (ZConversation
:> (CanThrow 'ConvNotFound
:> ("bot"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201 "Message sent" ClientMismatch]
(PostOtrResponse
ClientMismatch)))))))))
:<|> Named
"get-bot-conversation"
(CanThrow 'AccessDenied
:> (CanThrow 'ConvNotFound
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("bot"
:> ("conversation"
:> (ZBot
:> (ZConversation
:> Get
'[JSON] BotConvView))))))))))
:<|> (TeamAPI
:<|> ((Named
'("get", SSOConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for sso"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig)))))))))))
:<|> ((Named
'("get", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))
:<|> Named
'("put", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Put config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("get", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture
"tid" TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))
:<|> Named
'("put", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary
"Put config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> (SearchVisibilityGet
:<|> (SearchVisibilitySet
:<|> (Named
'("get",
ValidateSAMLEmailsConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))
:<|> (Named
'("get",
DigitalSignaturesConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))
:<|> ((Named
'("get",
AppLockConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig)))))))))))
:<|> Named
'("put",
AppLockConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("get",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))
:<|> Named
'("put",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("get",
ClassifiedDomainsConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig)))))))))))
:<|> ((Named
'("get",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))
:<|> Named
'("put",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("get",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))
:<|> Named
'("put",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("get",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))
:<|> Named
'("put",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("get",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))
:<|> Named
'("put",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("get",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))))
:<|> Named
'("put",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig))))))))))))))))
:<|> ((Named
'("get",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))
:<|> Named
'("put",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("get",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))
:<|> Named
'("put",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("get",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))
:<|> Named
'("put",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> (Named
'("get",
MlsE2EIdConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))))
:<|> (Named
"put-MlsE2EIdConfig@v5"
(From
'V5
:> (Until
'V6
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> (Named
'("put",
MlsE2EIdConfig)
(From
'V6
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("get",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))
:<|> Named
'("put",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))))))
:<|> ((Named
'("get",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))
:<|> Named
'("put",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))))))
:<|> (Named
'("get",
LimitedEventFanoutConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))
:<|> (AllTeamFeaturesUserGet
:<|> (AllTeamFeaturesTeamGet
:<|> ((Named
'("get-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))
:<|> (Named
'("put-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `PUT /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))))
:<|> (Named
'("get-deprecated",
ValidateSAMLEmailsConfig)
(ZUser
:> (Summary
"[deprecated] Get config for validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/validateSAMLemails` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validate-saml-emails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))))
:<|> Named
'("get-deprecated",
DigitalSignaturesConfig)
(ZUser
:> (Summary
"[deprecated] Get config for digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/digitalSignatures` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digital-signatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> (Named
'("get-config",
LegalholdConfig)
(Summary
"[deprecated] Get feature config for feature legalhold"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("get-config",
SSOConfig)
(Summary
"[deprecated] Get feature config for feature sso"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("get-config",
SearchVisibilityAvailableConfig)
(Summary
"[deprecated] Get feature config for feature searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("get-config",
ValidateSAMLEmailsConfig)
(Summary
"[deprecated] Get feature config for feature validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("get-config",
DigitalSignaturesConfig)
(Summary
"[deprecated] Get feature config for feature digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("get-config",
AppLockConfig)
(Summary
"[deprecated] Get feature config for feature appLock"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("get-config",
FileSharingConfig)
(Summary
"[deprecated] Get feature config for feature fileSharing"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("get-config",
ClassifiedDomainsConfig)
(Summary
"[deprecated] Get feature config for feature classifiedDomains"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> (Named
'("get-config",
ConferenceCallingConfig)
(Summary
"[deprecated] Get feature config for feature conferenceCalling"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("get-config",
SelfDeletingMessagesConfig)
(Summary
"[deprecated] Get feature config for feature selfDeletingMessages"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("get-config",
GuestLinksConfig)
(Summary
"[deprecated] Get feature config for feature conversationGuestLinks"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("get-config",
SndFactorPasswordChallengeConfig)
(Summary
"[deprecated] Get feature config for feature sndFactorPasswordChallenge"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> Named
'("get-config",
MLSConfig)
(Summary
"[deprecated] Get feature config for feature mls"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"mls-message"
("mls"
:> (Summary "Post an MLS message"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow 'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("messages"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
Message)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Message sent"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))
:<|> (Named
"mls-commit-bundle"
("mls"
:> (Summary "Post a MLS CommitBundle"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow
'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
'MLSWelcomeMismatch
:> (CanThrow
'MLSLegalholdIncompatible
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("commit-bundles"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
CommitBundle)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Commit accepted and forwarded"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))))
:<|> Named
"mls-public-keys"
("mls"
:> (Summary
"Get public keys used by the backend to sign external proposals"
:> (Description
"The format of the returned key is determined by the `format` query parameter:\n - raw (default): base64-encoded raw public keys\n - jwk: keys are nested objects in JWK format."
:> (From 'V5
:> (CanThrow 'MLSNotEnabled
:> ("public-keys"
:> (ZLocalUser
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Public keys"
(MLSKeysByPurpose
(MLSKeys
SomeKey))]
(MLSKeysByPurpose
(MLSKeys
SomeKey))))))))))))
:<|> (CustomBackendAPI
:<|> ((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"
:> (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"
:> (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"
:> (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"
:> (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"
:> (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"]
()))))))))))))))))))))))))))))
:<|> ((Named
"get-team-members"
(Summary "Get team members"
:> (CanThrow 'NotATeamMember
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid" TeamId
:> ("members"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
"pagingState"
TeamMembersPagingState
:> Get
'[JSON]
TeamMembersPage))))))))
:<|> (Named
"get-team-member"
(Summary
"Get single team member"
:> (CanThrow 'NotATeamMember
:> (CanThrow
'TeamMemberNotFound
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> Get
'[JSON]
TeamMemberOptPerms))))))))
:<|> (Named
"get-team-members-by-ids"
(Summary
"Get team members by user id list"
:> (Description
"The `has_more` field in the response body is always `false`."
:> (CanThrow
'NotATeamMember
:> (CanThrow
'BulkGetMemberLimitExceeded
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("get-members-by-ids-using-post"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (ReqBody
'[JSON]
UserIdList
:> Post
'[JSON]
TeamMemberListOptPerms))))))))))
:<|> (Named
"add-team-member"
(Summary
"Add a new team member"
:> (Until 'V4
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'NoAddToBinding
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'UserBindingExists
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))))))
:<|> (Named
"delete-team-member"
(Summary
"Remove an existing team member"
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> (ReqBody
'[JSON]
TeamMemberDeleteData
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"delete-non-binding-team-member"
(Summary
"Remove an existing team member"
:> (Until
'V4
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"update-team-member"
(Summary
"Update an existing team member"
:> (CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))
:<|> Named
"get-team-members-csv"
(Summary
"Get all members of the team as a CSV file"
:> (CanThrow
'AccessDenied
:> (Description
"The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> ("csv"
:> LowLevelStream
'GET
200
'[ '("Content-Disposition",
"attachment; filename=\"wire_team_members.csv\"")]
"CSV of team members"
CSV)))))))))))))))
:<|> TeamNotificationAPI))))))))))
:<|> (("i"
:> (Named
"status"
("status" :> MultiVerb 'GET '[JSON] '[RespondEmpty 200 "OK"] ())
:<|> (Named
"delete-user"
(Summary
"Remove a user from their teams and conversations and erase their clients"
:> (ZLocalUser
:> (ZOptConn
:> ("user"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty 200 "Remove a user from Galley"]
()))))
:<|> (Named
"connect"
(Summary "Create a connect conversation (deprecated)"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'InvalidOperation
:> (CanThrow 'NotConnected
:> (CanThrow UnreachableBackends
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> ("connect"
:> (ReqBody '[JSON] Connect
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))
:<|> (Named
"get-conversation-clients"
(Summary "Get mls conversation client list"
:> (CanThrow 'ConvNotFound
:> ("group"
:> (Capture "gid" GroupId
:> MultiVerb
'GET
'[JSON]
'[Respond 200 "Clients" ClientList]
ClientList))))
:<|> (Named
"guard-legalhold-policy-conflicts"
("guard-legalhold-policy-conflicts"
:> (CanThrow 'MissingLegalholdConsent
:> (CanThrow 'MissingLegalholdConsentOldClients
:> (ReqBody
'[JSON] GuardLegalholdPolicyConflicts
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200 "Guard Legalhold Policy"]
()))))
:<|> (("legalhold"
:> ("whitelisted-teams"
:> (Capture "tid" TeamId
:> (Named
"set-team-legalhold-whitelisted"
(MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Team Legalhold Whitelisted"]
())
:<|> (Named
"unset-team-legalhold-whitelisted"
(MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
204
"Team Legalhold un-Whitelisted"]
())
:<|> Named
"get-team-legalhold-whitelisted"
(MultiVerb
'GET
'[JSON]
'[RespondEmpty
404
"Team not Legalhold Whitelisted",
RespondEmpty
200
"Team Legalhold Whitelisted"]
Bool))))))
:<|> (("teams"
:> (Capture "tid" TeamId
:> (Named
"get-team-internal"
(CanThrow 'TeamNotFound
:> Get '[JSON] TeamData)
:<|> (Named
"create-binding-team"
(ZUser
:> (ReqBody '[JSON] NewTeam
:> MultiVerb
'PUT
'[JSON]
'[WithHeaders
'[Header
"Location"
TeamId]
TeamId
(RespondEmpty
201 "OK")]
TeamId))
:<|> (Named
"delete-binding-team"
(CanThrow 'NoBindingTeam
:> (CanThrow
'NotAOneMemberTeam
:> (CanThrow
'DeleteQueueFull
:> (CanThrow
'TeamNotFound
:> (QueryFlag
"force"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
202
"OK"]
())))))
:<|> (Named
"get-team-name"
("name"
:> (CanThrow
'TeamNotFound
:> Get
'[JSON]
TeamName))
:<|> (Named
"update-team-status"
("status"
:> (CanThrow
'TeamNotFound
:> (CanThrow
'InvalidTeamStatusUpdate
:> (ReqBody
'[JSON]
TeamStatusUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (("members"
:> (Named
"unchecked-add-team-member"
(CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (CanThrow
'TooManyTeamAdmins
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (Named
"unchecked-get-team-members"
(QueryParam'
'[Strict]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> Get
'[JSON]
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(Capture
"uid"
UserId
:> (CanThrow
'TeamMemberNotFound
:> Get
'[JSON]
TeamMember))
:<|> (Named
"can-user-join-team"
("check"
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User can join"]
()))
:<|> Named
"unchecked-update-team-member"
(CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
())))))))))))))
:<|> (Named
"user-is-team-owner"
("is-team-owner"
:> (Capture
"uid"
UserId
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'NotATeamMember
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User is team owner"]
())))))
:<|> ("search-visibility"
:> (Named
"get-search-visibility-internal"
(Get
'[JSON]
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(CanThrow
'TeamSearchVisibilityNotEnabled
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (ReqBody
'[JSON]
TeamSearchVisibilityView
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
204
"OK"]
()))))))))))))))))
:<|> ((Named
"get-team-members"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> ("members"
:> Get
'[JSON]
TeamMemberList))))))
:<|> (Named
"get-team-id"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture
"uid" UserId
:> ("team"
:> Get
'[JSON]
TeamId)))))
:<|> (Named
"test-get-clients"
("test"
:> ("clients"
:> (ZUser
:> Get
'[JSON]
[ClientId])))
:<|> (Named
"test-add-client"
("clients"
:> (ZUser
:> (Capture
"cid"
ClientId
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
())))
:<|> (Named
"test-delete-client"
("clients"
:> (ZUser
:> (Capture
"cid"
ClientId
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))
:<|> (Named
"add-service"
("services"
:> (ReqBody
'[JSON]
Service
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"delete-service"
("services"
:> (ReqBody
'[JSON]
ServiceRef
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"i-add-bot"
(CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> ("bots"
:> (ZLocalUser
:> (ZConn
:> (ReqBody
'[JSON]
AddBot
:> Post
'[JSON]
Event))))))))
:<|> (Named
"delete-bot"
(CanThrow
'ConvNotFound
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> ("bots"
:> (ZLocalUser
:> (ZOptConn
:> (ReqBody
'[JSON]
RemoveBot
:> MultiVerb
'DELETE
'[JSON]
(UpdateResponses
"Bot not found"
"Bot deleted"
Event)
(UpdateResult
Event)))))))
:<|> (Named
"put-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> (ReqBody
'[JSON]
CustomBackend
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
201
"OK"]
()))))
:<|> Named
"delete-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))))))))))))
:<|> (Named
"upsert-one2one"
(Summary
"Create or Update a connect or one2one conversation."
:> ("conversations"
:> ("one2one"
:> ("upsert"
:> (ReqBody
'[JSON]
UpsertOne2OneConversationRequest
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Upsert One2One Policy"]
())))))
:<|> ((((Named
'("iget",
LegalholdConfig)
(Description ""
:> (Summary
"Get config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("iput",
LegalholdConfig)
(Description ""
:> (Summary
"Put config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))
:<|> Named
'("ipatch",
LegalholdConfig)
(Description
""
:> (Summary
"Patch config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LegalholdConfig)
:> Patch
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("iget",
SSOConfig)
(Description ""
:> (Summary
"Get config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("iput",
SSOConfig)
(Description
""
:> (Summary
"Put config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(Feature
SSOConfig)
:> Put
'[JSON]
(LockableFeature
SSOConfig)))))))))))))
:<|> Named
'("ipatch",
SSOConfig)
(Description
""
:> (Summary
"Patch config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SSOConfig)
:> Patch
'[JSON]
(LockableFeature
SSOConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Get config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Put config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Patch config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityAvailableConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Patch config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityInboundConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Put config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(Feature
ValidateSAMLEmailsConfig)
:> Put
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Patch config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ValidateSAMLEmailsConfig)
:> Patch
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Put config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(Feature
DigitalSignaturesConfig)
:> Put
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Patch config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
DigitalSignaturesConfig)
:> Patch
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> ((Named
'("iget",
AppLockConfig)
(Description
""
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("iput",
AppLockConfig)
(Description
""
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))
:<|> Named
'("ipatch",
AppLockConfig)
(Description
""
:> (Summary
"Patch config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
AppLockConfig)
:> Patch
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("iget",
FileSharingConfig)
(Description
""
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("iput",
FileSharingConfig)
(Description
""
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))
:<|> Named
'("ipatch",
FileSharingConfig)
(Description
""
:> (Summary
"Patch config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
FileSharingConfig)
:> Patch
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(Description
""
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Patch config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ConferenceCallingConfig)
:> Patch
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Patch config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SelfDeletingMessagesConfig)
:> Patch
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(Description
""
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("iput",
GuestLinksConfig)
(Description
""
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))
:<|> Named
'("ipatch",
GuestLinksConfig)
(Description
""
:> (Summary
"Patch config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
GuestLinksConfig)
:> Patch
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Patch config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SndFactorPasswordChallengeConfig)
:> Patch
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("iget",
MLSConfig)
(Description
""
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))
:<|> (Named
'("iput",
MLSConfig)
(Description
""
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig)))))))))))))
:<|> Named
'("ipatch",
MLSConfig)
(Description
""
:> (Summary
"Patch config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MLSConfig)
:> Patch
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))))))))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Patch config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig)
:> Patch
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig))))))))))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Patch config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
OutlookCalIntegrationConfig)
:> Patch
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Patch config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsE2EIdConfig)
:> Patch
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(Description
""
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))
:<|> (Named
'("iput",
MlsMigrationConfig)
(Description
""
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(Description
""
:> (Summary
"Patch config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsMigrationConfig)
:> Patch
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Patch config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
EnforceFileDownloadLocationConfig)
:> Patch
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Put config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(Feature
LimitedEventFanoutConfig)
:> Put
'[JSON]
(LockableFeature
LimitedEventFanoutConfig)))))))))))))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Patch config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LimitedEventFanoutConfig)
:> Patch
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))))))))))))))))))))))))
:<|> (Named
'("ilock",
FileSharingConfig)
(Summary
"(Un-)lock fileSharing"
:> (Description ""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(Summary
"(Un-)lock conferenceCalling"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(Summary
"(Un-)lock selfDeletingMessages"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
GuestLinksConfig)
(Summary
"(Un-)lock conversationGuestLinks"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(Summary
"(Un-)lock sndFactorPasswordChallenge"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MLSConfig)
(Summary
"(Un-)lock mls"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(Summary
"(Un-)lock outlookCalIntegration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(Summary
"(Un-)lock mlsE2EId"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsMigrationConfig)
(Summary
"(Un-)lock mlsMigration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(Summary
"(Un-)lock enforceFileDownloadLocation"
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(Summary
"Get team feature status in bulk for feature searchVisibilityInbound"
:> ("features-multi-teams"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
TeamFeatureNoConfigMultiRequest
:> Post
'[JSON]
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig)))))
:<|> Named
"feature-configs-internal"
(Summary
"Get all feature configs (for user/team; if n/a fall back to site config)."
:> ("feature-configs"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional user id"]
"user_id"
UserId
:> Get
'[JSON]
AllTeamFeatures))))))))))))))))))
:<|> (IFederationAPI
:<|> (IConversationAPI
:<|> IEJPDAPI)))))))))))))
:<|> (("federation"
:> (Named
"on-conversation-created"
("on-conversation-created"
:> (OriginDomainHeader
:> (ReqBody '[JSON] (ConversationCreated ConvId)
:> Post '[JSON] EmptyResponse)))
:<|> (Named
"get-conversations@v1"
(Until 'V2
:> ("get-conversations"
:> (OriginDomainHeader
:> (ReqBody '[JSON] GetConversationsRequest
:> Post '[JSON] GetConversationsResponse))))
:<|> (Named
"get-conversations"
(From 'V2
:> ("get-conversations"
:> (OriginDomainHeader
:> (ReqBody '[JSON] GetConversationsRequest
:> Post '[JSON] GetConversationsResponseV2))))
:<|> (Named
"leave-conversation"
("leave-conversation"
:> (OriginDomainHeader
:> (ReqBody '[JSON] LeaveConversationRequest
:> Post '[JSON] LeaveConversationResponse)))
:<|> (Named
"send-message"
("send-message"
:> (OriginDomainHeader
:> (ReqBody '[JSON] ProteusMessageSendRequest
:> Post '[JSON] MessageSendResponse)))
:<|> (Named
"update-conversation"
("update-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON] ConversationUpdateRequest
:> Post
'[JSON]
ConversationUpdateResponse)))
:<|> (Named
"mls-welcome"
("mls-welcome"
:> (OriginDomainHeader
:> (ReqBody
'[JSON] MLSWelcomeRequest
:> Post
'[JSON]
MLSWelcomeResponse)))
:<|> (Named
"send-mls-message"
("send-mls-message"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
MLSMessageSendRequest
:> Post
'[JSON]
MLSMessageResponse)))
:<|> (Named
"send-mls-commit-bundle"
("send-mls-commit-bundle"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
MLSMessageSendRequest
:> Post
'[JSON]
MLSMessageResponse)))
:<|> (Named
"query-group-info"
("query-group-info"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetGroupInfoRequest
:> Post
'[JSON]
GetGroupInfoResponse)))
:<|> (Named
"update-typing-indicator"
("update-typing-indicator"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
TypingDataUpdateRequest
:> Post
'[JSON]
TypingDataUpdateResponse)))
:<|> (Named
"on-typing-indicator-updated"
("on-typing-indicator-updated"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
TypingDataUpdated
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
"get-sub-conversation"
(From
'V1
:> ("get-sub-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetSubConversationsRequest
:> Post
'[JSON]
GetSubConversationsResponse))))
:<|> (Named
"delete-sub-conversation"
(From
'V1
:> ("delete-sub-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
DeleteSubConversationFedRequest
:> Post
'[JSON]
DeleteSubConversationResponse))))
:<|> (Named
"leave-sub-conversation"
(From
'V1
:> ("leave-sub-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
LeaveSubConversationRequest
:> Post
'[JSON]
LeaveSubConversationResponse))))
:<|> (Named
"get-one2one-conversation@v1"
(From
'V1
:> (Until
'V2
:> ("get-one2one-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetOne2OneConversationRequest
:> Post
'[JSON]
GetOne2OneConversationResponse)))))
:<|> (Named
"get-one2one-conversation"
(From
'V2
:> ("get-one2one-conversation"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
GetOne2OneConversationRequest
:> Post
'[JSON]
GetOne2OneConversationResponseV2))))
:<|> (Named
"on-client-removed"
("on-client-removed"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
ClientRemovedRequest
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
"on-message-sent"
("on-message-sent"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
(RemoteMessage
ConvId)
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
"on-mls-message-sent"
("on-mls-message-sent"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
RemoteMLSMessage
:> Post
'[JSON]
EmptyResponse)))
:<|> (Named
(Versioned
'V0
"on-conversation-updated")
(Until
'V1
:> ("on-conversation-updated"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
ConversationUpdateV0
:> Post
'[JSON]
EmptyResponse))))
:<|> (Named
"on-conversation-updated"
(From
'V1
:> ("on-conversation-updated"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
ConversationUpdate
:> Post
'[JSON]
EmptyResponse))))
:<|> Named
"on-user-deleted-conversations"
("on-user-deleted-conversations"
:> (OriginDomainHeader
:> (ReqBody
'[JSON]
UserDeletedConversationsNotification
:> Post
'[JSON]
EmptyResponse))))))))))))))))))))))))))
:<|> Raw)))
-> Application
forall api (context :: [*]).
(HasServer api context, ServerContext context) =>
Proxy api -> Context context -> Server api -> Application
Servant.serveWithContext
(forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @CombinedAPI)
( Getting Domain Env Domain -> Env -> Domain
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view ((Opts -> Const Domain Opts) -> Env -> Const Domain Env
Lens' Env Opts
options ((Opts -> Const Domain Opts) -> Env -> Const Domain Env)
-> ((Domain -> Const Domain Domain) -> Opts -> Const Domain Opts)
-> Getting Domain Env Domain
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Settings -> Const Domain Settings) -> Opts -> Const Domain Opts
Lens' Opts Settings
settings ((Settings -> Const Domain Settings) -> Opts -> Const Domain Opts)
-> ((Domain -> Const Domain Domain)
-> Settings -> Const Domain Settings)
-> (Domain -> Const Domain Domain)
-> Opts
-> Const Domain Opts
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Domain -> Const Domain Domain)
-> Settings -> Const Domain Settings
Lens' Settings Domain
federationDomain) Env
e
Domain
-> Context '[ErrorFormatters] -> Context '[Domain, ErrorFormatters]
forall x (xs :: [*]). x -> Context xs -> Context (x : xs)
:. ErrorFormatters
customFormatters
ErrorFormatters -> Context '[] -> Context '[ErrorFormatters]
forall x (xs :: [*]). x -> Context xs -> Context (x : xs)
:. Context '[]
Servant.EmptyContext
)
( (forall x.
Sem
'[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,
HashPassword, Error InvalidInput, Error InternalError,
Error FederationError, Async, Delay, Fail, Embed IO,
Error JSONResponse, Resource, Final IO]
x
-> Handler x)
-> API
((Named
"get-unqualified-conversation"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond 'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-unqualified-conversation-legalhold-alias"
(Summary "Get a conversation by ID (Legalhold alias)"
:> (Until 'V2
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("legalhold"
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation))))))))
:<|> (Named
"get-conversation@v2"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-conversation@v5"
(Summary "Get a conversation by ID"
:> (From 'V3
:> (Until 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"Conversation"
Conversation]
Conversation))))))))
:<|> (Named
"get-conversation"
(Summary "Get a conversation by ID"
:> (From 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> Get '[JSON] Conversation)))))))
:<|> (Named
"get-conversation-roles"
(Summary
"Get existing roles available for the given conversation"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("roles"
:> Get
'[JSON]
ConversationRolesList)))))))
:<|> (Named
"get-group-info"
(Summary "Get MLS group information"
:> (From 'V5
:> (CanThrow 'ConvNotFound
:> (CanThrow 'MLSMissingGroupInfo
:> (CanThrow 'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv" ConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))
:<|> (Named
"list-conversation-ids-unqualified"
(Summary
"[deprecated] Get all local conversation IDs."
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("ids"
:> (QueryParam'
'[Optional, Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional, Strict,
Description
"Maximum number of IDs to return"]
"size"
(Range 1 1000 Int32)
:> Get
'[JSON]
(ConversationList
ConvId))))))))
:<|> (Named
"list-conversation-ids-v2"
(Summary "Get all conversation IDs."
:> (Until 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"list-conversation-ids"
(Summary "Get all conversation IDs."
:> (From 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"get-conversations"
(Summary
"Get all *local* conversations."
:> (Until 'V3
:> (Description
"Will not return remote conversations.\n\nUse `POST /conversations/list-ids` followed by `POST /conversations/list` instead."
:> (ZLocalUser
:> ("conversations"
:> (QueryParam'
'[Optional,
Strict,
Description
"Mutually exclusive with 'start' (at most 32 IDs per request)"]
"ids"
(Range
1
32
(CommaSeparatedList
ConvId))
:> (QueryParam'
'[Optional,
Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum number of conversations to return"]
"size"
(Range
1
500
Int32)
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2
200
"List of local conversations"
(ConversationList
Conversation)]
(ConversationList
Conversation)))))))))
:<|> (Named
"list-conversations@v1"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (Until 'V2
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> ("v2"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v2"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V2
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V2
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v5"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V5
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse))))))
:<|> (Named
"get-conversation-by-reusable-code"
(Summary
"Get limited conversation information by key/code pair"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'NotATeamMember
:> (ZLocalUser
:> ("conversations"
:> ("join"
:> (QueryParam'
'[Required,
Strict]
"key"
Key
:> (QueryParam'
'[Required,
Strict]
"code"
Value
:> Get
'[JSON]
ConversationCoverView))))))))))))
:<|> (Named
"create-group-conversation@v2"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))))))))
:<|> (Named
"create-group-conversation@v3"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (From
'V3
:> (Until
'V4
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-group-conversation@v5"
(Summary
"Create a new conversation"
:> (From
'V4
:> (Until
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V5
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse)))))))))))))))))
:<|> (Named
"create-group-conversation"
(Summary
"Create a new conversation"
:> (From
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V6
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse))))))))))))))))
:<|> (Named
"create-self-conversation@v2"
(Summary
"Create a self-conversation"
:> (Until
'V3
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"create-self-conversation@v5"
(Summary
"Create a self-conversation"
:> (From
'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))
:<|> (Named
"create-self-conversation"
(Summary
"Create a self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"get-mls-self-conversation@v5"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"The MLS self-conversation"
Conversation]
Conversation)))))))
:<|> (Named
"get-mls-self-conversation"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"The MLS self-conversation"
Conversation]
Conversation))))))
:<|> (Named
"get-subconversation"
(Summary
"Get information about an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSSubConvUnsupportedConvType
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Subconversation"
PublicSubConversation]
PublicSubConversation))))))))))
:<|> (Named
"leave-subconversation"
(Summary
"Leave an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> (ZClient
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("self"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))))))))))))))
:<|> (Named
"delete-subconversation"
(Summary
"Delete an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSStaleMessage
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> (ReqBody
'[JSON]
DeleteSubConversationRequest
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Deletion successful"
()]
()))))))))))))
:<|> (Named
"get-subconversation-group-info"
(Summary
"Get MLS group information of subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSMissingGroupInfo
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))))
:<|> (Named
"create-one-to-one-conversation@v2"
(Summary
"Create a 1:1 conversation"
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-one-to-one-conversation"
(Summary
"Create a 1:1 conversation"
:> (From
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v5"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'MLSFederatedOne2OneNotSupported
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"MLS 1-1 conversation"
Conversation]
Conversation))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v6"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V6
:> (Until
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
MLSPublicKey)]
(MLSOne2OneConversation
MLSPublicKey))))))))))
:<|> (Named
"get-one-to-one-mls-conversation"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
SomeKey)]
(MLSOne2OneConversation
SomeKey))))))))))
:<|> (Named
"add-members-to-conversation-unqualified"
(Summary
"Add members to an existing conversation (deprecated)"
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
Invite
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"add-members-to-conversation-unqualified2"
(Summary
"Add qualified members to an existing conversation."
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> ("v2"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event)))))))))))))))))))))
:<|> (Named
"add-members-to-conversation"
(Summary
"Add qualified members to an existing conversation."
:> (From
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"join-conversation-by-id-unqualified"
(Summary
"Join a conversation by its ID (if link access enabled) (deprecated)"
:> (Until
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("join"
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event)))))))))))))
:<|> (Named
"join-conversation-by-code-unqualified"
(Summary
"Join a conversation using a reusable code"
:> (Description
"If the guest links team feature is disabled, this will fail with 409 GuestLinksDisabled.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/code-check` which responds with 404 CodeNotFound if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("join"
:> (ReqBody
'[JSON]
JoinConversationByCode
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event))))))))))))))))
:<|> (Named
"code-check"
(Summary
"Check validity of a conversation code."
:> (Description
"If the guest links team feature is disabled, this will fail with 404 CodeNotFound.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/join` which responds with 409 GuestLinksDisabled if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidConversationPassword
:> ("conversations"
:> ("code-check"
:> (ReqBody
'[JSON]
ConversationCode
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Valid"]
()))))))))
:<|> (Named
"create-conversation-code-unqualified@v3"
(Summary
"Create or recreate a conversation code"
:> (Until
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> CreateConversationCodeVerb)))))))))))))
:<|> (Named
"create-conversation-code-unqualified"
(Summary
"Create or recreate a conversation code"
:> (From
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> (ReqBody
'[JSON]
CreateConversationCodeRequest
:> CreateConversationCodeVerb))))))))))))))
:<|> (Named
"get-conversation-guest-links-status"
(Summary
"Get the status of the guest links feature for a conversation that potentially has been created by someone from another team."
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))
:<|> (Named
"remove-code-unqualified"
(Summary
"Delete conversation code"
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Conversation code deleted."
Event]
Event))))))))
:<|> (Named
"get-code"
(Summary
"Get existing conversation code"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (ZHostOpt
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Conversation Code"
ConversationCodeInfo]
ConversationCodeInfo))))))))))
:<|> (Named
"member-typing-unqualified"
(Summary
"Sending typing notifications"
:> (Until
'V3
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
())))))))))
:<|> (Named
"member-typing-qualified"
(Summary
"Sending typing notifications"
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
()))))))))
:<|> (Named
"remove-member-unqualified"
(Summary
"Remove a member from a conversation (deprecated)"
:> (Until
'V2
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb)))))))))))
:<|> (Named
"remove-member"
(Summary
"Remove a member from a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb))))))))))
:<|> (Named
"update-other-member-unqualified"
(Summary
"Update membership of the specified user (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:cnv_domain/:cnv/members/:usr_domain/:usr` instead"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
())))))))))))))))
:<|> (Named
"update-other-member"
(Summary
"Update membership of the specified user"
:> (Description
"**Note**: at least one field has to be provided."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
()))))))))))))))
:<|> (Named
"update-conversation-name-deprecated"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-name-unqualified"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event)))))))))))))
:<|> (Named
"update-conversation-name"
(Summary
"Update conversation name"
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name updated"
"Name unchanged"
Event)
(UpdateResult
Event)))))))))))
:<|> (Named
"update-conversation-message-timer-unqualified"
(Summary
"Update the message timer for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:cnv/message-timer` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-message-timer"
(Summary
"Update the message timer for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-receipt-mode-unqualified"
(Summary
"Update receipt mode for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:domain/:cnv/receipt-mode` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-receipt-mode"
(Summary
"Update receipt mode for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-access-unqualified"
(Summary
"Update access modes for a conversation (deprecated)"
:> (Until
'V3
:> (Description
"Use PUT `/conversations/:domain/:cnv/access` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event))))))))))))))))
:<|> (Named
"update-conversation-access@v2"
(Summary
"Update access modes for a conversation"
:> (Until
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"update-conversation-access"
(Summary
"Update access modes for a conversation"
:> (From
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (ReqBody
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"get-conversation-self-unqualified"
(Summary
"Get self membership properties (deprecated)"
:> (Deprecated
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> Get
'[JSON]
(Maybe
Member)))))))
:<|> (Named
"update-conversation-self-unqualified"
(Summary
"Update self membership properties (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/self` instead."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
()))))))))))
:<|> (Named
"update-conversation-self"
(Summary
"Update self membership properties"
:> (Description
"**Note**: at least one field has to be provided."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
())))))))))
:<|> Named
"update-conversation-protocol"
(Summary
"Update the protocol of the conversation"
:> (From
'V5
:> (Description
"**Note**: Only proteus->mixed upgrade is supported."
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvInvalidProtocolTransition
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'InvalidOperation
:> (CanThrow
'MLSMigrationCriteriaNotSatisfied
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("protocol"
:> (ReqBody
'[JSON]
ProtocolUpdate
:> MultiVerb
'PUT
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
:<|> (TeamConversationAPI
:<|> ((Named
"post-otr-message-unqualified"
(Summary
"Post an encrypted message to a conversation (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("otr"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON, Proto] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))
:<|> (Named
"post-otr-broadcast-unqualified"
(Summary
"Broadcast an encrypted message to all team members and all contacts (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("otr"
:> ("messages"
:> (QueryParam
"ignore_missing" IgnoreMissing
:> (QueryParam
"report_missing"
ReportMissing
:> (ReqBody
'[JSON, Proto]
NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))))
:<|> (Named
"post-proteus-message"
(Summary
"Post an encrypted message to a conversation (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
(RawProto
QualifiedNewOtrMessage)
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus))))))))))
:<|> Named
"post-proteus-broadcast"
(Summary
"Post an encrypted message to all team members and all contacts (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
QualifiedNewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus)))))))))))))))
:<|> ((Named
"post-bot-message-unqualified"
(ZBot
:> (ZConversation
:> (CanThrow 'ConvNotFound
:> ("bot"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201 "Message sent" ClientMismatch]
(PostOtrResponse
ClientMismatch)))))))))
:<|> Named
"get-bot-conversation"
(CanThrow 'AccessDenied
:> (CanThrow 'ConvNotFound
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("bot"
:> ("conversation"
:> (ZBot
:> (ZConversation
:> Get
'[JSON] BotConvView))))))))))
:<|> (TeamAPI
:<|> ((Named
'("get", SSOConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for sso"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig)))))))))))
:<|> ((Named
'("get", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))
:<|> Named
'("put", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Put config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("get", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture
"tid" TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))
:<|> Named
'("put", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary
"Put config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> (SearchVisibilityGet
:<|> (SearchVisibilitySet
:<|> (Named
'("get",
ValidateSAMLEmailsConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))
:<|> (Named
'("get",
DigitalSignaturesConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))
:<|> ((Named
'("get",
AppLockConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig)))))))))))
:<|> Named
'("put",
AppLockConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("get",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))
:<|> Named
'("put",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("get",
ClassifiedDomainsConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig)))))))))))
:<|> ((Named
'("get",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))
:<|> Named
'("put",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("get",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))
:<|> Named
'("put",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("get",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))
:<|> Named
'("put",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("get",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))
:<|> Named
'("put",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("get",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))))
:<|> Named
'("put",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig))))))))))))))))
:<|> ((Named
'("get",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))
:<|> Named
'("put",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("get",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))
:<|> Named
'("put",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("get",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))
:<|> Named
'("put",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> (Named
'("get",
MlsE2EIdConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))))
:<|> (Named
"put-MlsE2EIdConfig@v5"
(From
'V5
:> (Until
'V6
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> (Named
'("put",
MlsE2EIdConfig)
(From
'V6
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("get",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))
:<|> Named
'("put",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))))))
:<|> ((Named
'("get",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))
:<|> Named
'("put",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))))))
:<|> (Named
'("get",
LimitedEventFanoutConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))
:<|> (AllTeamFeaturesUserGet
:<|> (AllTeamFeaturesTeamGet
:<|> ((Named
'("get-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))
:<|> (Named
'("put-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `PUT /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))))
:<|> (Named
'("get-deprecated",
ValidateSAMLEmailsConfig)
(ZUser
:> (Summary
"[deprecated] Get config for validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/validateSAMLemails` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validate-saml-emails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))))
:<|> Named
'("get-deprecated",
DigitalSignaturesConfig)
(ZUser
:> (Summary
"[deprecated] Get config for digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/digitalSignatures` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digital-signatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> (Named
'("get-config",
LegalholdConfig)
(Summary
"[deprecated] Get feature config for feature legalhold"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("get-config",
SSOConfig)
(Summary
"[deprecated] Get feature config for feature sso"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("get-config",
SearchVisibilityAvailableConfig)
(Summary
"[deprecated] Get feature config for feature searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("get-config",
ValidateSAMLEmailsConfig)
(Summary
"[deprecated] Get feature config for feature validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("get-config",
DigitalSignaturesConfig)
(Summary
"[deprecated] Get feature config for feature digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("get-config",
AppLockConfig)
(Summary
"[deprecated] Get feature config for feature appLock"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("get-config",
FileSharingConfig)
(Summary
"[deprecated] Get feature config for feature fileSharing"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("get-config",
ClassifiedDomainsConfig)
(Summary
"[deprecated] Get feature config for feature classifiedDomains"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> (Named
'("get-config",
ConferenceCallingConfig)
(Summary
"[deprecated] Get feature config for feature conferenceCalling"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("get-config",
SelfDeletingMessagesConfig)
(Summary
"[deprecated] Get feature config for feature selfDeletingMessages"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("get-config",
GuestLinksConfig)
(Summary
"[deprecated] Get feature config for feature conversationGuestLinks"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("get-config",
SndFactorPasswordChallengeConfig)
(Summary
"[deprecated] Get feature config for feature sndFactorPasswordChallenge"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> Named
'("get-config",
MLSConfig)
(Summary
"[deprecated] Get feature config for feature mls"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"mls-message"
("mls"
:> (Summary "Post an MLS message"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow 'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("messages"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
Message)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Message sent"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))
:<|> (Named
"mls-commit-bundle"
("mls"
:> (Summary "Post a MLS CommitBundle"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow
'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
'MLSWelcomeMismatch
:> (CanThrow
'MLSLegalholdIncompatible
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("commit-bundles"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
CommitBundle)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Commit accepted and forwarded"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))))
:<|> Named
"mls-public-keys"
("mls"
:> (Summary
"Get public keys used by the backend to sign external proposals"
:> (Description
"The format of the returned key is determined by the `format` query parameter:\n - raw (default): base64-encoded raw public keys\n - jwk: keys are nested objects in JWK format."
:> (From 'V5
:> (CanThrow 'MLSNotEnabled
:> ("public-keys"
:> (ZLocalUser
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Public keys"
(MLSKeysByPurpose
(MLSKeys
SomeKey))]
(MLSKeysByPurpose
(MLSKeys
SomeKey))))))))))))
:<|> (CustomBackendAPI
:<|> ((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"
:> (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"
:> (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"
:> (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"
:> (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"
:> (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"]
()))))))))))))))))))))))))))))
:<|> ((Named
"get-team-members"
(Summary "Get team members"
:> (CanThrow 'NotATeamMember
:> (ZLocalUser
:> ("teams"
:> (Capture "tid" TeamId
:> ("members"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
"pagingState"
TeamMembersPagingState
:> Get
'[JSON]
TeamMembersPage))))))))
:<|> (Named
"get-team-member"
(Summary
"Get single team member"
:> (CanThrow 'NotATeamMember
:> (CanThrow
'TeamMemberNotFound
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> Get
'[JSON]
TeamMemberOptPerms))))))))
:<|> (Named
"get-team-members-by-ids"
(Summary
"Get team members by user id list"
:> (Description
"The `has_more` field in the response body is always `false`."
:> (CanThrow
'NotATeamMember
:> (CanThrow
'BulkGetMemberLimitExceeded
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("get-members-by-ids-using-post"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (ReqBody
'[JSON]
UserIdList
:> Post
'[JSON]
TeamMemberListOptPerms))))))))))
:<|> (Named
"add-team-member"
(Summary
"Add a new team member"
:> (Until 'V4
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'NoAddToBinding
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'UserBindingExists
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))))))
:<|> (Named
"delete-team-member"
(Summary
"Remove an existing team member"
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> (ReqBody
'[JSON]
TeamMemberDeleteData
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"delete-non-binding-team-member"
(Summary
"Remove an existing team member"
:> (Until
'V4
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"update-team-member"
(Summary
"Update an existing team member"
:> (CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))
:<|> Named
"get-team-members-csv"
(Summary
"Get all members of the team as a CSV file"
:> (CanThrow
'AccessDenied
:> (Description
"The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> ("csv"
:> LowLevelStream
'GET
200
'[ '("Content-Disposition",
"attachment; filename=\"wire_team_members.csv\"")]
"CSV of team members"
CSV)))))))))))))))
:<|> TeamNotificationAPI))))))))))
'[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,
HashPassword, Error InvalidInput, Error InternalError,
Error FederationError, Async, Delay, Fail, Embed IO,
Error JSONResponse, Resource, Final IO]
-> ServerT
((Named
"get-unqualified-conversation"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond 'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-unqualified-conversation-legalhold-alias"
(Summary "Get a conversation by ID (Legalhold alias)"
:> (Until 'V2
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("legalhold"
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation))))))))
:<|> (Named
"get-conversation@v2"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-conversation@v5"
(Summary "Get a conversation by ID"
:> (From 'V3
:> (Until 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"Conversation"
Conversation]
Conversation))))))))
:<|> (Named
"get-conversation"
(Summary "Get a conversation by ID"
:> (From 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> Get '[JSON] Conversation)))))))
:<|> (Named
"get-conversation-roles"
(Summary
"Get existing roles available for the given conversation"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("roles"
:> Get
'[JSON]
ConversationRolesList)))))))
:<|> (Named
"get-group-info"
(Summary "Get MLS group information"
:> (From 'V5
:> (CanThrow 'ConvNotFound
:> (CanThrow 'MLSMissingGroupInfo
:> (CanThrow 'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv" ConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))
:<|> (Named
"list-conversation-ids-unqualified"
(Summary
"[deprecated] Get all local conversation IDs."
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("ids"
:> (QueryParam'
'[Optional, Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional, Strict,
Description
"Maximum number of IDs to return"]
"size"
(Range 1 1000 Int32)
:> Get
'[JSON]
(ConversationList
ConvId))))))))
:<|> (Named
"list-conversation-ids-v2"
(Summary "Get all conversation IDs."
:> (Until 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"list-conversation-ids"
(Summary "Get all conversation IDs."
:> (From 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"get-conversations"
(Summary
"Get all *local* conversations."
:> (Until 'V3
:> (Description
"Will not return remote conversations.\n\nUse `POST /conversations/list-ids` followed by `POST /conversations/list` instead."
:> (ZLocalUser
:> ("conversations"
:> (QueryParam'
'[Optional,
Strict,
Description
"Mutually exclusive with 'start' (at most 32 IDs per request)"]
"ids"
(Range
1
32
(CommaSeparatedList
ConvId))
:> (QueryParam'
'[Optional,
Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum number of conversations to return"]
"size"
(Range
1
500
Int32)
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2
200
"List of local conversations"
(ConversationList
Conversation)]
(ConversationList
Conversation)))))))))
:<|> (Named
"list-conversations@v1"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (Until 'V2
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> ("v2"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v2"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V2
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V2
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v5"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V5
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse))))))
:<|> (Named
"get-conversation-by-reusable-code"
(Summary
"Get limited conversation information by key/code pair"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'NotATeamMember
:> (ZLocalUser
:> ("conversations"
:> ("join"
:> (QueryParam'
'[Required,
Strict]
"key"
Key
:> (QueryParam'
'[Required,
Strict]
"code"
Value
:> Get
'[JSON]
ConversationCoverView))))))))))))
:<|> (Named
"create-group-conversation@v2"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))))))))
:<|> (Named
"create-group-conversation@v3"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (From
'V3
:> (Until
'V4
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-group-conversation@v5"
(Summary
"Create a new conversation"
:> (From
'V4
:> (Until
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V5
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse)))))))))))))))))
:<|> (Named
"create-group-conversation"
(Summary
"Create a new conversation"
:> (From
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V6
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse))))))))))))))))
:<|> (Named
"create-self-conversation@v2"
(Summary
"Create a self-conversation"
:> (Until
'V3
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"create-self-conversation@v5"
(Summary
"Create a self-conversation"
:> (From
'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))
:<|> (Named
"create-self-conversation"
(Summary
"Create a self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"get-mls-self-conversation@v5"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"The MLS self-conversation"
Conversation]
Conversation)))))))
:<|> (Named
"get-mls-self-conversation"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"The MLS self-conversation"
Conversation]
Conversation))))))
:<|> (Named
"get-subconversation"
(Summary
"Get information about an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSSubConvUnsupportedConvType
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Subconversation"
PublicSubConversation]
PublicSubConversation))))))))))
:<|> (Named
"leave-subconversation"
(Summary
"Leave an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> (ZClient
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("self"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))))))))))))))
:<|> (Named
"delete-subconversation"
(Summary
"Delete an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSStaleMessage
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> (ReqBody
'[JSON]
DeleteSubConversationRequest
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Deletion successful"
()]
()))))))))))))
:<|> (Named
"get-subconversation-group-info"
(Summary
"Get MLS group information of subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSMissingGroupInfo
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))))
:<|> (Named
"create-one-to-one-conversation@v2"
(Summary
"Create a 1:1 conversation"
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-one-to-one-conversation"
(Summary
"Create a 1:1 conversation"
:> (From
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v5"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'MLSFederatedOne2OneNotSupported
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"MLS 1-1 conversation"
Conversation]
Conversation))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v6"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V6
:> (Until
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
MLSPublicKey)]
(MLSOne2OneConversation
MLSPublicKey))))))))))
:<|> (Named
"get-one-to-one-mls-conversation"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
SomeKey)]
(MLSOne2OneConversation
SomeKey))))))))))
:<|> (Named
"add-members-to-conversation-unqualified"
(Summary
"Add members to an existing conversation (deprecated)"
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
Invite
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"add-members-to-conversation-unqualified2"
(Summary
"Add qualified members to an existing conversation."
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> ("v2"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event)))))))))))))))))))))
:<|> (Named
"add-members-to-conversation"
(Summary
"Add qualified members to an existing conversation."
:> (From
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"join-conversation-by-id-unqualified"
(Summary
"Join a conversation by its ID (if link access enabled) (deprecated)"
:> (Until
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("join"
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event)))))))))))))
:<|> (Named
"join-conversation-by-code-unqualified"
(Summary
"Join a conversation using a reusable code"
:> (Description
"If the guest links team feature is disabled, this will fail with 409 GuestLinksDisabled.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/code-check` which responds with 404 CodeNotFound if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("join"
:> (ReqBody
'[JSON]
JoinConversationByCode
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event))))))))))))))))
:<|> (Named
"code-check"
(Summary
"Check validity of a conversation code."
:> (Description
"If the guest links team feature is disabled, this will fail with 404 CodeNotFound.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/join` which responds with 409 GuestLinksDisabled if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidConversationPassword
:> ("conversations"
:> ("code-check"
:> (ReqBody
'[JSON]
ConversationCode
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Valid"]
()))))))))
:<|> (Named
"create-conversation-code-unqualified@v3"
(Summary
"Create or recreate a conversation code"
:> (Until
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> CreateConversationCodeVerb)))))))))))))
:<|> (Named
"create-conversation-code-unqualified"
(Summary
"Create or recreate a conversation code"
:> (From
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> (ReqBody
'[JSON]
CreateConversationCodeRequest
:> CreateConversationCodeVerb))))))))))))))
:<|> (Named
"get-conversation-guest-links-status"
(Summary
"Get the status of the guest links feature for a conversation that potentially has been created by someone from another team."
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))
:<|> (Named
"remove-code-unqualified"
(Summary
"Delete conversation code"
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Conversation code deleted."
Event]
Event))))))))
:<|> (Named
"get-code"
(Summary
"Get existing conversation code"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (ZHostOpt
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Conversation Code"
ConversationCodeInfo]
ConversationCodeInfo))))))))))
:<|> (Named
"member-typing-unqualified"
(Summary
"Sending typing notifications"
:> (Until
'V3
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
())))))))))
:<|> (Named
"member-typing-qualified"
(Summary
"Sending typing notifications"
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
()))))))))
:<|> (Named
"remove-member-unqualified"
(Summary
"Remove a member from a conversation (deprecated)"
:> (Until
'V2
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb)))))))))))
:<|> (Named
"remove-member"
(Summary
"Remove a member from a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb))))))))))
:<|> (Named
"update-other-member-unqualified"
(Summary
"Update membership of the specified user (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:cnv_domain/:cnv/members/:usr_domain/:usr` instead"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
())))))))))))))))
:<|> (Named
"update-other-member"
(Summary
"Update membership of the specified user"
:> (Description
"**Note**: at least one field has to be provided."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
()))))))))))))))
:<|> (Named
"update-conversation-name-deprecated"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-name-unqualified"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event)))))))))))))
:<|> (Named
"update-conversation-name"
(Summary
"Update conversation name"
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name updated"
"Name unchanged"
Event)
(UpdateResult
Event)))))))))))
:<|> (Named
"update-conversation-message-timer-unqualified"
(Summary
"Update the message timer for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:cnv/message-timer` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-message-timer"
(Summary
"Update the message timer for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-receipt-mode-unqualified"
(Summary
"Update receipt mode for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:domain/:cnv/receipt-mode` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-receipt-mode"
(Summary
"Update receipt mode for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-access-unqualified"
(Summary
"Update access modes for a conversation (deprecated)"
:> (Until
'V3
:> (Description
"Use PUT `/conversations/:domain/:cnv/access` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event))))))))))))))))
:<|> (Named
"update-conversation-access@v2"
(Summary
"Update access modes for a conversation"
:> (Until
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"update-conversation-access"
(Summary
"Update access modes for a conversation"
:> (From
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (ReqBody
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"get-conversation-self-unqualified"
(Summary
"Get self membership properties (deprecated)"
:> (Deprecated
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> Get
'[JSON]
(Maybe
Member)))))))
:<|> (Named
"update-conversation-self-unqualified"
(Summary
"Update self membership properties (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/self` instead."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
()))))))))))
:<|> (Named
"update-conversation-self"
(Summary
"Update self membership properties"
:> (Description
"**Note**: at least one field has to be provided."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
())))))))))
:<|> Named
"update-conversation-protocol"
(Summary
"Update the protocol of the conversation"
:> (From
'V5
:> (Description
"**Note**: Only proteus->mixed upgrade is supported."
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvInvalidProtocolTransition
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'InvalidOperation
:> (CanThrow
'MLSMigrationCriteriaNotSatisfied
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("protocol"
:> (ReqBody
'[JSON]
ProtocolUpdate
:> MultiVerb
'PUT
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
:<|> (TeamConversationAPI
:<|> ((Named
"post-otr-message-unqualified"
(Summary
"Post an encrypted message to a conversation (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("otr"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON, Proto] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))
:<|> (Named
"post-otr-broadcast-unqualified"
(Summary
"Broadcast an encrypted message to all team members and all contacts (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("otr"
:> ("messages"
:> (QueryParam
"ignore_missing" IgnoreMissing
:> (QueryParam
"report_missing"
ReportMissing
:> (ReqBody
'[JSON, Proto]
NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))))
:<|> (Named
"post-proteus-message"
(Summary
"Post an encrypted message to a conversation (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
(RawProto
QualifiedNewOtrMessage)
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus))))))))))
:<|> Named
"post-proteus-broadcast"
(Summary
"Post an encrypted message to all team members and all contacts (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
QualifiedNewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus)))))))))))))))
:<|> ((Named
"post-bot-message-unqualified"
(ZBot
:> (ZConversation
:> (CanThrow 'ConvNotFound
:> ("bot"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201 "Message sent" ClientMismatch]
(PostOtrResponse
ClientMismatch)))))))))
:<|> Named
"get-bot-conversation"
(CanThrow 'AccessDenied
:> (CanThrow 'ConvNotFound
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("bot"
:> ("conversation"
:> (ZBot
:> (ZConversation
:> Get
'[JSON] BotConvView))))))))))
:<|> (TeamAPI
:<|> ((Named
'("get", SSOConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for sso"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig)))))))))))
:<|> ((Named
'("get", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))
:<|> Named
'("put", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Put config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("get", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture
"tid" TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))
:<|> Named
'("put", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary
"Put config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> (SearchVisibilityGet
:<|> (SearchVisibilitySet
:<|> (Named
'("get",
ValidateSAMLEmailsConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))
:<|> (Named
'("get",
DigitalSignaturesConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))
:<|> ((Named
'("get",
AppLockConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig)))))))))))
:<|> Named
'("put",
AppLockConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("get",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))
:<|> Named
'("put",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("get",
ClassifiedDomainsConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig)))))))))))
:<|> ((Named
'("get",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))
:<|> Named
'("put",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("get",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))
:<|> Named
'("put",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("get",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))
:<|> Named
'("put",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("get",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))
:<|> Named
'("put",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("get",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))))
:<|> Named
'("put",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig))))))))))))))))
:<|> ((Named
'("get",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))
:<|> Named
'("put",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("get",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))
:<|> Named
'("put",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("get",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))
:<|> Named
'("put",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> (Named
'("get",
MlsE2EIdConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))))
:<|> (Named
"put-MlsE2EIdConfig@v5"
(From
'V5
:> (Until
'V6
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> (Named
'("put",
MlsE2EIdConfig)
(From
'V6
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("get",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))
:<|> Named
'("put",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))))))
:<|> ((Named
'("get",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))
:<|> Named
'("put",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))))))
:<|> (Named
'("get",
LimitedEventFanoutConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))
:<|> (AllTeamFeaturesUserGet
:<|> (AllTeamFeaturesTeamGet
:<|> ((Named
'("get-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))
:<|> (Named
'("put-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `PUT /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))))
:<|> (Named
'("get-deprecated",
ValidateSAMLEmailsConfig)
(ZUser
:> (Summary
"[deprecated] Get config for validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/validateSAMLemails` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validate-saml-emails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))))
:<|> Named
'("get-deprecated",
DigitalSignaturesConfig)
(ZUser
:> (Summary
"[deprecated] Get config for digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/digitalSignatures` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digital-signatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> (Named
'("get-config",
LegalholdConfig)
(Summary
"[deprecated] Get feature config for feature legalhold"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("get-config",
SSOConfig)
(Summary
"[deprecated] Get feature config for feature sso"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("get-config",
SearchVisibilityAvailableConfig)
(Summary
"[deprecated] Get feature config for feature searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("get-config",
ValidateSAMLEmailsConfig)
(Summary
"[deprecated] Get feature config for feature validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("get-config",
DigitalSignaturesConfig)
(Summary
"[deprecated] Get feature config for feature digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("get-config",
AppLockConfig)
(Summary
"[deprecated] Get feature config for feature appLock"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("get-config",
FileSharingConfig)
(Summary
"[deprecated] Get feature config for feature fileSharing"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("get-config",
ClassifiedDomainsConfig)
(Summary
"[deprecated] Get feature config for feature classifiedDomains"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> (Named
'("get-config",
ConferenceCallingConfig)
(Summary
"[deprecated] Get feature config for feature conferenceCalling"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("get-config",
SelfDeletingMessagesConfig)
(Summary
"[deprecated] Get feature config for feature selfDeletingMessages"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("get-config",
GuestLinksConfig)
(Summary
"[deprecated] Get feature config for feature conversationGuestLinks"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("get-config",
SndFactorPasswordChallengeConfig)
(Summary
"[deprecated] Get feature config for feature sndFactorPasswordChallenge"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> Named
'("get-config",
MLSConfig)
(Summary
"[deprecated] Get feature config for feature mls"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"mls-message"
("mls"
:> (Summary "Post an MLS message"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow 'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("messages"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
Message)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Message sent"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))
:<|> (Named
"mls-commit-bundle"
("mls"
:> (Summary "Post a MLS CommitBundle"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow
'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
'MLSWelcomeMismatch
:> (CanThrow
'MLSLegalholdIncompatible
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("commit-bundles"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
CommitBundle)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Commit accepted and forwarded"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))))
:<|> Named
"mls-public-keys"
("mls"
:> (Summary
"Get public keys used by the backend to sign external proposals"
:> (Description
"The format of the returned key is determined by the `format` query parameter:\n - raw (default): base64-encoded raw public keys\n - jwk: keys are nested objects in JWK format."
:> (From 'V5
:> (CanThrow 'MLSNotEnabled
:> ("public-keys"
:> (ZLocalUser
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Public keys"
(MLSKeysByPurpose
(MLSKeys
SomeKey))]
(MLSKeysByPurpose
(MLSKeys
SomeKey))))))))))))
:<|> (CustomBackendAPI
:<|> ((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"
:> (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"
:> (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"
:> (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"
:> (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"
:> (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"]
()))))))))))))))))))))))))))))
:<|> ((Named
"get-team-members"
(Summary "Get team members"
:> (CanThrow 'NotATeamMember
:> (ZLocalUser
:> ("teams"
:> (Capture "tid" TeamId
:> ("members"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
"pagingState"
TeamMembersPagingState
:> Get
'[JSON]
TeamMembersPage))))))))
:<|> (Named
"get-team-member"
(Summary
"Get single team member"
:> (CanThrow 'NotATeamMember
:> (CanThrow
'TeamMemberNotFound
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> Get
'[JSON]
TeamMemberOptPerms))))))))
:<|> (Named
"get-team-members-by-ids"
(Summary
"Get team members by user id list"
:> (Description
"The `has_more` field in the response body is always `false`."
:> (CanThrow
'NotATeamMember
:> (CanThrow
'BulkGetMemberLimitExceeded
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("get-members-by-ids-using-post"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (ReqBody
'[JSON]
UserIdList
:> Post
'[JSON]
TeamMemberListOptPerms))))))))))
:<|> (Named
"add-team-member"
(Summary
"Add a new team member"
:> (Until 'V4
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'NoAddToBinding
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'UserBindingExists
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))))))
:<|> (Named
"delete-team-member"
(Summary
"Remove an existing team member"
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> (ReqBody
'[JSON]
TeamMemberDeleteData
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"delete-non-binding-team-member"
(Summary
"Remove an existing team member"
:> (Until
'V4
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"update-team-member"
(Summary
"Update an existing team member"
:> (CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))
:<|> Named
"get-team-members-csv"
(Summary
"Get all members of the team as a CSV file"
:> (CanThrow
'AccessDenied
:> (Description
"The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> ("csv"
:> LowLevelStream
'GET
200
'[ '("Content-Disposition",
"attachment; filename=\"wire_team_members.csv\"")]
"CSV of team members"
CSV)))))))))))))))
:<|> TeamNotificationAPI))))))))))
Handler
forall {k} (api :: k) (r :: EffectRow) (n :: * -> *).
HasServer api '[Domain] =>
(forall x. Sem r x -> n x) -> API api r -> ServerT api n
hoistAPIHandler (Env -> Sem GalleyEffects x -> Handler x
forall a. Env -> Sem GalleyEffects a -> Handler a
toServantHandler Env
e) API GalleyAPI GalleyEffects
API
((Named
"get-unqualified-conversation"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond 'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-unqualified-conversation-legalhold-alias"
(Summary "Get a conversation by ID (Legalhold alias)"
:> (Until 'V2
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("legalhold"
:> ("conversations"
:> (Capture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation))))))))
:<|> (Named
"get-conversation@v2"
(Summary "Get a conversation by ID"
:> (Until 'V3
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2 200 "Conversation" Conversation]
Conversation)))))))
:<|> (Named
"get-conversation@v5"
(Summary "Get a conversation by ID"
:> (From 'V3
:> (Until 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5 200 "Conversation" Conversation]
Conversation))))))))
:<|> (Named
"get-conversation"
(Summary "Get a conversation by ID"
:> (From 'V6
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> Get '[JSON] Conversation)))))))
:<|> (Named
"get-conversation-roles"
(Summary
"Get existing roles available for the given conversation"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'ConvAccessDenied
:> (ZLocalUser
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("roles"
:> Get
'[JSON]
ConversationRolesList)))))))
:<|> (Named
"get-group-info"
(Summary "Get MLS group information"
:> (From 'V5
:> (CanThrow 'ConvNotFound
:> (CanThrow 'MLSMissingGroupInfo
:> (CanThrow 'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))
:<|> (Named
"list-conversation-ids-unqualified"
(Summary
"[deprecated] Get all local conversation IDs."
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("ids"
:> (QueryParam'
'[Optional, Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional, Strict,
Description
"Maximum number of IDs to return"]
"size"
(Range 1 1000 Int32)
:> Get
'[JSON]
(ConversationList
ConvId))))))))
:<|> (Named
"list-conversation-ids-v2"
(Summary "Get all conversation IDs."
:> (Until 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"list-conversation-ids"
(Summary "Get all conversation IDs."
:> (From 'V3
:> (Description PaginationDocs
:> (ZLocalUser
:> ("conversations"
:> ("list-ids"
:> (ReqBody
'[JSON]
GetPaginatedConversationIds
:> Post
'[JSON]
ConvIdsPage)))))))
:<|> (Named
"get-conversations"
(Summary
"Get all *local* conversations."
:> (Until 'V3
:> (Description
"Will not return remote conversations.\n\nUse `POST /conversations/list-ids` followed by `POST /conversations/list` instead."
:> (ZLocalUser
:> ("conversations"
:> (QueryParam'
'[Optional,
Strict,
Description
"Mutually exclusive with 'start' (at most 32 IDs per request)"]
"ids"
(Range
1
32
(CommaSeparatedList
ConvId))
:> (QueryParam'
'[Optional,
Strict,
Description
"Conversation ID to start from (exclusive)"]
"start"
ConvId
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum number of conversations to return"]
"size"
(Range
1
500
Int32)
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V2
200
"List of local conversations"
(ConversationList
Conversation)]
(ConversationList
Conversation)))))))))
:<|> (Named
"list-conversations@v1"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (Until 'V2
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> ("v2"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v2"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V2
:> (Until 'V3
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V2
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations@v5"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From 'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> MultiVerb
'POST
'[JSON]
'[VersionedRespond
'V5
200
"Conversation page"
ConversationsResponse]
ConversationsResponse)))))))
:<|> (Named
"list-conversations"
(Summary
"Get conversation metadata for a list of conversation ids"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("list"
:> (ReqBody
'[JSON]
ListConversations
:> Post
'[JSON]
ConversationsResponse))))))
:<|> (Named
"get-conversation-by-reusable-code"
(Summary
"Get limited conversation information by key/code pair"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'NotATeamMember
:> (ZLocalUser
:> ("conversations"
:> ("join"
:> (QueryParam'
'[Required,
Strict]
"key"
Key
:> (QueryParam'
'[Required,
Strict]
"code"
Value
:> Get
'[JSON]
ConversationCoverView))))))))))))
:<|> (Named
"create-group-conversation@v2"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))))))))
:<|> (Named
"create-group-conversation@v3"
(Summary
"Create a new conversation"
:> (DescriptionOAuthScope
'WriteConversations
:> (From
'V3
:> (Until
'V4
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-group-conversation@v5"
(Summary
"Create a new conversation"
:> (From
'V4
:> (Until
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V5
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse)))))))))))))))))
:<|> (Named
"create-group-conversation"
(Summary
"Create a new conversation"
:> (From
'V6
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSNonEmptyMemberList
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (Description
"This returns 201 when a new conversation is created, and 200 when the conversation already existed"
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
CreateGroupConversation
(VersionedRespond
'V6
201
"Conversation created"
CreateGroupConversation)]
CreateGroupConversationResponse))))))))))))))))
:<|> (Named
"create-self-conversation@v2"
(Summary
"Create a self-conversation"
:> (Until
'V3
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"create-self-conversation@v5"
(Summary
"Create a self-conversation"
:> (From
'V3
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V5
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))
:<|> (Named
"create-self-conversation"
(Summary
"Create a self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("self"
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))
:<|> (Named
"get-mls-self-conversation@v5"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"The MLS self-conversation"
Conversation]
Conversation)))))))
:<|> (Named
"get-mls-self-conversation"
(Summary
"Get the user's MLS self-conversation"
:> (From
'V6
:> (ZLocalUser
:> ("conversations"
:> ("mls-self"
:> (CanThrow
'MLSNotEnabled
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"The MLS self-conversation"
Conversation]
Conversation))))))
:<|> (Named
"get-subconversation"
(Summary
"Get information about an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSSubConvUnsupportedConvType
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Subconversation"
PublicSubConversation]
PublicSubConversation))))))))))
:<|> (Named
"leave-subconversation"
(Summary
"Leave an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> (ZClient
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("self"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))))))))))))))
:<|> (Named
"delete-subconversation"
(Summary
"Delete an MLS subconversation"
:> (From
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSStaleMessage
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> (ReqBody
'[JSON]
DeleteSubConversationRequest
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Deletion successful"
()]
()))))))))))))
:<|> (Named
"get-subconversation-group-info"
(Summary
"Get MLS group information of subconversation"
:> (From
'V5
:> (CanThrow
'ConvNotFound
:> (CanThrow
'MLSMissingGroupInfo
:> (CanThrow
'MLSNotEnabled
:> (ZLocalUser
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("subconversations"
:> (Capture
"subconv"
SubConvId
:> ("groupinfo"
:> MultiVerb
'GET
'[MLS]
'[Respond
200
"The group information"
GroupInfoData]
GroupInfoData)))))))))))
:<|> (Named
"create-one-to-one-conversation@v2"
(Summary
"Create a 1:1 conversation"
:> (Until
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (VersionedReqBody
'V2
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V2
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"create-one-to-one-conversation"
(Summary
"Create a 1:1 conversation"
:> (From
'V3
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NoBindingTeamMembers
:> (CanThrow
'NonBindingTeam
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
UnreachableBackendsLegacy
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("one2one"
:> (ReqBody
'[JSON]
NewConv
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V3
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation))))))))))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v5"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V5
:> (Until
'V6
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> (CanThrow
'MLSFederatedOne2OneNotSupported
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[VersionedRespond
'V5
200
"MLS 1-1 conversation"
Conversation]
Conversation))))))))))
:<|> (Named
"get-one-to-one-mls-conversation@v6"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V6
:> (Until
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
MLSPublicKey)]
(MLSOne2OneConversation
MLSPublicKey))))))))))
:<|> (Named
"get-one-to-one-mls-conversation"
(Summary
"Get an MLS 1:1 conversation"
:> (From
'V7
:> (ZLocalUser
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'NotConnected
:> ("conversations"
:> ("one2one"
:> (QualifiedCapture
"usr"
UserId
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"MLS 1-1 conversation"
(MLSOne2OneConversation
SomeKey)]
(MLSOne2OneConversation
SomeKey))))))))))
:<|> (Named
"add-members-to-conversation-unqualified"
(Summary
"Add members to an existing conversation (deprecated)"
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
Invite
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"add-members-to-conversation-unqualified2"
(Summary
"Add qualified members to an existing conversation."
:> (Until
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture
"cnv"
ConvId
:> ("members"
:> ("v2"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event)))))))))))))))))))))
:<|> (Named
"add-members-to-conversation"
(Summary
"Add qualified members to an existing conversation."
:> (From
'V2
:> (CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture
"cnv"
ConvId
:> ("members"
:> (ReqBody
'[JSON]
InviteQualified
:> MultiVerb
'POST
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))
:<|> (Named
"join-conversation-by-id-unqualified"
(Summary
"Join a conversation by its ID (if link access enabled) (deprecated)"
:> (Until
'V5
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("join"
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event)))))))))))))
:<|> (Named
"join-conversation-by-code-unqualified"
(Summary
"Join a conversation using a reusable code"
:> (Description
"If the guest links team feature is disabled, this will fail with 409 GuestLinksDisabled.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/code-check` which responds with 404 CodeNotFound if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'InvalidConversationPassword
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'InvalidOperation
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TooManyMembers
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> ("join"
:> (ReqBody
'[JSON]
JoinConversationByCode
:> MultiVerb
'POST
'[JSON]
ConvJoinResponses
(UpdateResult
Event))))))))))))))))
:<|> (Named
"code-check"
(Summary
"Check validity of a conversation code."
:> (Description
"If the guest links team feature is disabled, this will fail with 404 CodeNotFound.Note that this is currently inconsistent (for backwards compatibility reasons) with `POST /conversations/join` which responds with 409 GuestLinksDisabled if guest links are disabled."
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidConversationPassword
:> ("conversations"
:> ("code-check"
:> (ReqBody
'[JSON]
ConversationCode
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Valid"]
()))))))))
:<|> (Named
"create-conversation-code-unqualified@v3"
(Summary
"Create or recreate a conversation code"
:> (Until
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> CreateConversationCodeVerb)))))))))))))
:<|> (Named
"create-conversation-code-unqualified"
(Summary
"Create or recreate a conversation code"
:> (From
'V4
:> (DescriptionOAuthScope
'WriteConversationsCode
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (CanThrow
'CreateConversationCodeConflict
:> (ZUser
:> (ZHostOpt
:> (ZOptConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> (ReqBody
'[JSON]
CreateConversationCodeRequest
:> CreateConversationCodeVerb))))))))))))))
:<|> (Named
"get-conversation-guest-links-status"
(Summary
"Get the status of the guest links feature for a conversation that potentially has been created by someone from another team."
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))
:<|> (Named
"remove-code-unqualified"
(Summary
"Delete conversation code"
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'DELETE
'[JSON]
'[Respond
200
"Conversation code deleted."
Event]
Event))))))))
:<|> (Named
"get-code"
(Summary
"Get existing conversation code"
:> (CanThrow
'CodeNotFound
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'GuestLinksDisabled
:> (ZHostOpt
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("code"
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Conversation Code"
ConversationCodeInfo]
ConversationCodeInfo))))))))))
:<|> (Named
"member-typing-unqualified"
(Summary
"Sending typing notifications"
:> (Until
'V3
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
())))))))))
:<|> (Named
"member-typing-qualified"
(Summary
"Sending typing notifications"
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("typing"
:> (ReqBody
'[JSON]
TypingStatus
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Notification sent"]
()))))))))
:<|> (Named
"remove-member-unqualified"
(Summary
"Remove a member from a conversation (deprecated)"
:> (Until
'V2
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb)))))))))))
:<|> (Named
"remove-member"
(Summary
"Remove a member from a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> RemoveFromConversationVerb))))))))))
:<|> (Named
"update-other-member-unqualified"
(Summary
"Update membership of the specified user (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:cnv_domain/:cnv/members/:usr_domain/:usr` instead"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (Capture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
())))))))))))))))
:<|> (Named
"update-other-member"
(Summary
"Update membership of the specified user"
:> (Description
"**Note**: at least one field has to be provided."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvMemberNotFound
:> (CanThrow
('ActionDenied
'ModifyOtherConversationMember)
:> (CanThrow
'InvalidTarget
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("members"
:> (QualifiedCapture'
'[Description
"Target User ID"]
"usr"
UserId
:> (ReqBody
'[JSON]
OtherMemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Membership updated"]
()))))))))))))))
:<|> (Named
"update-conversation-name-deprecated"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-name-unqualified"
(Summary
"Update conversation name (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/name` instead."
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name unchanged"
"Name updated"
Event)
(UpdateResult
Event)))))))))))))
:<|> (Named
"update-conversation-name"
(Summary
"Update conversation name"
:> (CanThrow
('ActionDenied
'ModifyConversationName)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("name"
:> (ReqBody
'[JSON]
ConversationRename
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Name updated"
"Name unchanged"
Event)
(UpdateResult
Event)))))))))))
:<|> (Named
"update-conversation-message-timer-unqualified"
(Summary
"Update the message timer for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:cnv/message-timer` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-message-timer"
(Summary
"Update the message timer for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationMessageTimer)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("message-timer"
:> (ReqBody
'[JSON]
ConversationMessageTimerUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Message timer unchanged"
"Message timer updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-receipt-mode-unqualified"
(Summary
"Update receipt mode for a conversation (deprecated)"
:> (Deprecated
:> (Description
"Use `PUT /conversations/:domain/:cnv/receipt-mode` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))))
:<|> (Named
"update-conversation-receipt-mode"
(Summary
"Update receipt mode for a conversation"
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationReceiptMode)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("receipt-mode"
:> (ReqBody
'[JSON]
ConversationReceiptModeUpdate
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Receipt mode unchanged"
"Receipt mode updated"
Event)
(UpdateResult
Event))))))))))))
:<|> (Named
"update-conversation-access-unqualified"
(Summary
"Update access modes for a conversation (deprecated)"
:> (Until
'V3
:> (Description
"Use PUT `/conversations/:domain/:cnv/access` instead."
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event))))))))))))))))
:<|> (Named
"update-conversation-access@v2"
(Summary
"Update access modes for a conversation"
:> (Until
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (VersionedReqBody
'V2
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"update-conversation-access"
(Summary
"Update access modes for a conversation"
:> (From
'V3
:> (ZLocalUser
:> (ZConn
:> (CanThrow
('ActionDenied
'ModifyConversationAccess)
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> (CanThrow
'ConvAccessDenied
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'InvalidTargetAccess
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("access"
:> (ReqBody
'[JSON]
ConversationAccessData
:> MultiVerb
'PUT
'[JSON]
(UpdateResponses
"Access unchanged"
"Access updated"
Event)
(UpdateResult
Event)))))))))))))))
:<|> (Named
"get-conversation-self-unqualified"
(Summary
"Get self membership properties (deprecated)"
:> (Deprecated
:> (ZLocalUser
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> Get
'[JSON]
(Maybe
Member)))))))
:<|> (Named
"update-conversation-self-unqualified"
(Summary
"Update self membership properties (deprecated)"
:> (Deprecated
:> (Description
"Use `/conversations/:domain/:conv/self` instead."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
()))))))))))
:<|> (Named
"update-conversation-self"
(Summary
"Update self membership properties"
:> (Description
"**Note**: at least one field has to be provided."
:> (CanThrow
'ConvNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("self"
:> (ReqBody
'[JSON]
MemberUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"Update successful"]
())))))))))
:<|> Named
"update-conversation-protocol"
(Summary
"Update the protocol of the conversation"
:> (From
'V5
:> (Description
"**Note**: Only proteus->mixed upgrade is supported."
:> (CanThrow
'ConvNotFound
:> (CanThrow
'ConvInvalidProtocolTransition
:> (CanThrow
('ActionDenied
'LeaveConversation)
:> (CanThrow
'InvalidOperation
:> (CanThrow
'MLSMigrationCriteriaNotSatisfied
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture'
'[Description
"Conversation ID"]
"cnv"
ConvId
:> ("protocol"
:> (ReqBody
'[JSON]
ProtocolUpdate
:> MultiVerb
'PUT
'[JSON]
ConvUpdateResponses
(UpdateResult
Event))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
:<|> (TeamConversationAPI
:<|> ((Named
"post-otr-message-unqualified"
(Summary
"Post an encrypted message to a conversation (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (Capture "cnv" ConvId
:> ("otr"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON, Proto] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))
:<|> (Named
"post-otr-broadcast-unqualified"
(Summary
"Broadcast an encrypted message to all team members and all contacts (accepts JSON or Protobuf)"
:> (Description PostOtrDescriptionUnqualified
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("otr"
:> ("messages"
:> (QueryParam
"ignore_missing" IgnoreMissing
:> (QueryParam
"report_missing"
ReportMissing
:> (ReqBody
'[JSON, Proto]
NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
ClientMismatch,
Respond
201
"Message sent"
ClientMismatch]
(PostOtrResponse
ClientMismatch))))))))))))))
:<|> (Named
"post-proteus-message"
(Summary
"Post an encrypted message to a conversation (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> ("conversations"
:> (QualifiedCapture "cnv" ConvId
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
(RawProto QualifiedNewOtrMessage)
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus))))))))))
:<|> Named
"post-proteus-broadcast"
(Summary
"Post an encrypted message to all team members and all contacts (accepts only Protobuf)"
:> (Description PostOtrDescription
:> (ZLocalUser
:> (ZConn
:> (CanThrow 'TeamNotFound
:> (CanThrow 'BroadcastLimitExceeded
:> (CanThrow 'NonBindingTeam
:> ("broadcast"
:> ("proteus"
:> ("messages"
:> (ReqBody
'[Proto]
QualifiedNewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse
'ConvNotFound,
ErrorResponse
'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse
'MissingLegalholdConsent,
Respond
412
"Missing clients"
MessageSendingStatus,
Respond
201
"Message sent"
MessageSendingStatus]
(Either
(MessageNotSent
MessageSendingStatus)
MessageSendingStatus)))))))))))))))
:<|> ((Named
"post-bot-message-unqualified"
(ZBot
:> (ZConversation
:> (CanThrow 'ConvNotFound
:> ("bot"
:> ("messages"
:> (QueryParam "ignore_missing" IgnoreMissing
:> (QueryParam "report_missing" ReportMissing
:> (ReqBody '[JSON] NewOtrMessage
:> MultiVerb
'POST
'[JSON]
'[ErrorResponse 'ConvNotFound,
ErrorResponse 'UnknownClient,
ErrorResponse
'MissingLegalholdConsentOldClients,
ErrorResponse 'MissingLegalholdConsent,
Respond
412 "Missing clients" ClientMismatch,
Respond
201 "Message sent" ClientMismatch]
(PostOtrResponse ClientMismatch)))))))))
:<|> Named
"get-bot-conversation"
(CanThrow 'AccessDenied
:> (CanThrow 'ConvNotFound
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("bot"
:> ("conversation"
:> (ZBot
:> (ZConversation
:> Get '[JSON] BotConvView))))))))))
:<|> (TeamAPI
:<|> ((Named
'("get", SSOConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for sso"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig)))))))))))
:<|> ((Named
'("get", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))
:<|> Named
'("put", LegalholdConfig)
(Description ""
:> (ZUser
:> (Summary "Put config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid" TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("get", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary "Get config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> ("teams"
:> (Capture "tid" TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))
:<|> Named
'("put", SearchVisibilityAvailableConfig)
(Description ""
:> (ZUser
:> (Summary
"Put config for searchVisibility"
:> (CanThrow OperationDenied
:> (CanThrow 'NotATeamMember
:> (CanThrow 'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany '[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> (SearchVisibilityGet
:<|> (SearchVisibilitySet
:<|> (Named
'("get", ValidateSAMLEmailsConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))
:<|> (Named
'("get",
DigitalSignaturesConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))
:<|> ((Named
'("get",
AppLockConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig)))))))))))
:<|> Named
'("put",
AppLockConfig)
(Description ""
:> (ZUser
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("get",
FileSharingConfig)
(Description ""
:> (ZUser
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))
:<|> Named
'("put",
FileSharingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("get",
ClassifiedDomainsConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig)))))))))))
:<|> ((Named
'("get",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))
:<|> Named
'("put",
ConferenceCallingConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("get",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))
:<|> Named
'("put",
SelfDeletingMessagesConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("get",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))
:<|> Named
'("put",
GuestLinksConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("get",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))
:<|> Named
'("put",
SndFactorPasswordChallengeConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("get",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))))
:<|> Named
'("put",
MLSConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig))))))))))))))))
:<|> ((Named
'("get",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))
:<|> Named
'("put",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("get",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))
:<|> Named
'("put",
SearchVisibilityInboundConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("get",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))
:<|> Named
'("put",
OutlookCalIntegrationConfig)
(Description
""
:> (ZUser
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> (Named
'("get",
MlsE2EIdConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))))
:<|> (Named
"put-MlsE2EIdConfig@v5"
(From
'V5
:> (Until
'V6
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> (Named
'("put",
MlsE2EIdConfig)
(From
'V6
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("get",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))
:<|> Named
'("put",
MlsMigrationConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))))))))
:<|> ((Named
'("get",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))
:<|> Named
'("put",
EnforceFileDownloadLocationConfig)
(From
'V5
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (ZUser
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))))))))
:<|> (Named
'("get",
LimitedEventFanoutConfig)
(From
'V5
:> (Description
""
:> (ZUser
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))
:<|> (AllTeamFeaturesUserGet
:<|> (AllTeamFeaturesTeamGet
:<|> ((Named
'("get-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))
:<|> (Named
'("put-deprecated",
SearchVisibilityAvailableConfig)
(ZUser
:> (Summary
"[deprecated] Get config for searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `PUT /teams/:tid/features/searchVisibility` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("search-visibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))))))
:<|> (Named
'("get-deprecated",
ValidateSAMLEmailsConfig)
(ZUser
:> (Summary
"[deprecated] Get config for validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/validateSAMLemails` instead.\nThis endpoint is potentially used by the old Android client. It is not used by iOS, team management, or webapp as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validate-saml-emails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))))
:<|> Named
'("get-deprecated",
DigitalSignaturesConfig)
(ZUser
:> (Summary
"[deprecated] Get config for digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /teams/:tid/features/digitalSignatures` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digital-signatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> (Named
'("get-config",
LegalholdConfig)
(Summary
"[deprecated] Get feature config for feature legalhold"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("get-config",
SSOConfig)
(Summary
"[deprecated] Get feature config for feature sso"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("get-config",
SearchVisibilityAvailableConfig)
(Summary
"[deprecated] Get feature config for feature searchVisibility"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("get-config",
ValidateSAMLEmailsConfig)
(Summary
"[deprecated] Get feature config for feature validateSAMLemails"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("get-config",
DigitalSignaturesConfig)
(Summary
"[deprecated] Get feature config for feature digitalSignatures"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("get-config",
AppLockConfig)
(Summary
"[deprecated] Get feature config for feature appLock"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("get-config",
FileSharingConfig)
(Summary
"[deprecated] Get feature config for feature fileSharing"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("get-config",
ClassifiedDomainsConfig)
(Summary
"[deprecated] Get feature config for feature classifiedDomains"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> (Named
'("get-config",
ConferenceCallingConfig)
(Summary
"[deprecated] Get feature config for feature conferenceCalling"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("get-config",
SelfDeletingMessagesConfig)
(Summary
"[deprecated] Get feature config for feature selfDeletingMessages"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("get-config",
GuestLinksConfig)
(Summary
"[deprecated] Get feature config for feature conversationGuestLinks"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("get-config",
SndFactorPasswordChallengeConfig)
(Summary
"[deprecated] Get feature config for feature sndFactorPasswordChallenge"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> Named
'("get-config",
MLSConfig)
(Summary
"[deprecated] Get feature config for feature mls"
:> (Until
'V2
:> (Description
"Deprecated. Please use `GET /feature-configs` instead.\nThe usage of this endpoint was removed in iOS in version 3.101. It is not used by team management, or webapp, and is potentially used by the old Android client as of June 2022"
:> (ZUser
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> ("feature-configs"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"mls-message"
("mls"
:> (Summary "Post an MLS message"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow 'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("messages"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
Message)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Message sent"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))
:<|> (Named
"mls-commit-bundle"
("mls"
:> (Summary "Post a MLS CommitBundle"
:> (From 'V5
:> (CanThrow 'ConvAccessDenied
:> (CanThrow 'ConvMemberNotFound
:> (CanThrow 'ConvNotFound
:> (CanThrow
'LegalHoldNotEnabled
:> (CanThrow
'MissingLegalholdConsent
:> (CanThrow
'MLSClientMismatch
:> (CanThrow
'MLSClientSenderUserMismatch
:> (CanThrow
'MLSCommitMissingReferences
:> (CanThrow
'MLSGroupConversationMismatch
:> (CanThrow
'MLSInvalidLeafNodeIndex
:> (CanThrow
'MLSNotEnabled
:> (CanThrow
'MLSProposalNotFound
:> (CanThrow
'MLSProtocolErrorTag
:> (CanThrow
'MLSSelfRemovalNotAllowed
:> (CanThrow
'MLSStaleMessage
:> (CanThrow
'MLSSubConvClientNotInParent
:> (CanThrow
'MLSUnsupportedMessage
:> (CanThrow
'MLSUnsupportedProposal
:> (CanThrow
'MLSWelcomeMismatch
:> (CanThrow
'MLSLegalholdIncompatible
:> (CanThrow
MLSProposalFailure
:> (CanThrow
NonFederatingBackends
:> (CanThrow
UnreachableBackends
:> ("commit-bundles"
:> (ZLocalUser
:> (ZClient
:> (ZConn
:> (ReqBody
'[MLS]
(RawMLS
CommitBundle)
:> MultiVerb
'POST
'[JSON]
'[Respond
201
"Commit accepted and forwarded"
MLSMessageSendingStatus]
MLSMessageSendingStatus)))))))))))))))))))))))))))))))
:<|> Named
"mls-public-keys"
("mls"
:> (Summary
"Get public keys used by the backend to sign external proposals"
:> (Description
"The format of the returned key is determined by the `format` query parameter:\n - raw (default): base64-encoded raw public keys\n - jwk: keys are nested objects in JWK format."
:> (From 'V5
:> (CanThrow 'MLSNotEnabled
:> ("public-keys"
:> (ZLocalUser
:> (QueryParam
"format"
MLSPublicKeyFormat
:> MultiVerb
'GET
'[JSON]
'[Respond
200
"Public keys"
(MLSKeysByPurpose
(MLSKeys
SomeKey))]
(MLSKeysByPurpose
(MLSKeys
SomeKey))))))))))))
:<|> (CustomBackendAPI
:<|> ((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"
:> (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"
:> (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"
:> (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"
:> (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"
:> (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"]
()))))))))))))))))))))))))))))
:<|> ((Named
"get-team-members"
(Summary "Get team members"
:> (CanThrow 'NotATeamMember
:> (ZLocalUser
:> ("teams"
:> (Capture "tid" TeamId
:> ("members"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
"pagingState"
TeamMembersPagingState
:> Get
'[JSON]
TeamMembersPage))))))))
:<|> (Named
"get-team-member"
(Summary "Get single team member"
:> (CanThrow 'NotATeamMember
:> (CanThrow
'TeamMemberNotFound
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> Get
'[JSON]
TeamMemberOptPerms))))))))
:<|> (Named
"get-team-members-by-ids"
(Summary
"Get team members by user id list"
:> (Description
"The `has_more` field in the response body is always `false`."
:> (CanThrow
'NotATeamMember
:> (CanThrow
'BulkGetMemberLimitExceeded
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("get-members-by-ids-using-post"
:> (QueryParam'
'[Optional,
Strict,
Description
"Maximum results to be returned"]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> (ReqBody
'[JSON]
UserIdList
:> Post
'[JSON]
TeamMemberListOptPerms))))))))))
:<|> (Named
"add-team-member"
(Summary
"Add a new team member"
:> (Until 'V4
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'NoAddToBinding
:> (CanThrow
'NotATeamMember
:> (CanThrow
'NotConnected
:> (CanThrow
OperationDenied
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'UserBindingExists
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))))))
:<|> (Named
"delete-team-member"
(Summary
"Remove an existing team member"
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> (ReqBody
'[JSON]
TeamMemberDeleteData
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"delete-non-binding-team-member"
(Summary
"Remove an existing team member"
:> (Until
'V4
:> (CanThrow
AuthenticationError
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TeamNotFound
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (Capture
"uid"
UserId
:> MultiVerb
'DELETE
'[JSON]
TeamMemberDeleteResultResponseType
TeamMemberDeleteResult))))))))))))))
:<|> (Named
"update-team-member"
(Summary
"Update an existing team member"
:> (CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ZLocalUser
:> (ZConn
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
()))))))))))))))
:<|> Named
"get-team-members-csv"
(Summary
"Get all members of the team as a CSV file"
:> (CanThrow
'AccessDenied
:> (Description
"The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
:> (ZLocalUser
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("members"
:> ("csv"
:> LowLevelStream
'GET
200
'[ '("Content-Disposition",
"attachment; filename=\"wire_team_members.csv\"")]
"CSV of team members"
CSV)))))))))))))))
:<|> TeamNotificationAPI))))))))))
'[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,
HashPassword, Error InvalidInput, Error InternalError,
Error FederationError, Async, Delay, Fail, Embed IO,
Error JSONResponse, Resource, Final IO]
servantSitemap
((Named
"get-unqualified-conversation"
(QualifiedWithTag 'QLocal UserId -> ConvId -> Handler Conversation)
:<|> (Named
"get-unqualified-conversation-legalhold-alias"
(QualifiedWithTag 'QLocal UserId -> ConvId -> Handler Conversation)
:<|> (Named
"get-conversation@v2"
(QualifiedWithTag 'QLocal UserId
-> Qualified ConvId -> Handler Conversation)
:<|> (Named
"get-conversation@v5"
(QualifiedWithTag 'QLocal UserId
-> Qualified ConvId -> Handler Conversation)
:<|> (Named
"get-conversation"
(QualifiedWithTag 'QLocal UserId
-> Qualified ConvId -> Handler Conversation)
:<|> (Named
"get-conversation-roles"
(QualifiedWithTag 'QLocal UserId
-> ConvId -> Handler ConversationRolesList)
:<|> (Named
"get-group-info"
(QualifiedWithTag 'QLocal UserId
-> Qualified ConvId -> Handler GroupInfoData)
:<|> (Named
"list-conversation-ids-unqualified"
(QualifiedWithTag 'QLocal UserId
-> Maybe ConvId
-> Maybe (Range 1 1000 Int32)
-> Handler (ConversationList ConvId))
:<|> (Named
"list-conversation-ids-v2"
(QualifiedWithTag 'QLocal UserId
-> GetPaginatedConversationIds
-> Handler ConvIdsPage)
:<|> (Named
"list-conversation-ids"
(QualifiedWithTag 'QLocal UserId
-> GetPaginatedConversationIds
-> Handler ConvIdsPage)
:<|> (Named
"get-conversations"
(QualifiedWithTag 'QLocal UserId
-> Maybe
(Range
1
32
(CommaSeparatedList
ConvId))
-> Maybe ConvId
-> Maybe (Range 1 500 Int32)
-> Handler
(ConversationList
Conversation))
:<|> (Named
"list-conversations@v1"
(QualifiedWithTag
'QLocal UserId
-> ListConversations
-> Handler
ConversationsResponse)
:<|> (Named
"list-conversations@v2"
(QualifiedWithTag
'QLocal UserId
-> ListConversations
-> Handler
ConversationsResponse)
:<|> (Named
"list-conversations@v5"
(QualifiedWithTag
'QLocal UserId
-> ListConversations
-> Handler
ConversationsResponse)
:<|> (Named
"list-conversations"
(QualifiedWithTag
'QLocal
UserId
-> ListConversations
-> Handler
ConversationsResponse)
:<|> (Named
"get-conversation-by-reusable-code"
(QualifiedWithTag
'QLocal
UserId
-> Key
-> Value
-> Handler
ConversationCoverView)
:<|> (Named
"create-group-conversation@v2"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> NewConv
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-group-conversation@v3"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> NewConv
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-group-conversation@v5"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> NewConv
-> Handler
CreateGroupConversationResponse)
:<|> (Named
"create-group-conversation"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> NewConv
-> Handler
CreateGroupConversationResponse)
:<|> (Named
"create-self-conversation@v2"
(QualifiedWithTag
'QLocal
UserId
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-self-conversation@v5"
(QualifiedWithTag
'QLocal
UserId
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-self-conversation"
(QualifiedWithTag
'QLocal
UserId
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"get-mls-self-conversation@v5"
(QualifiedWithTag
'QLocal
UserId
-> Handler
Conversation)
:<|> (Named
"get-mls-self-conversation"
(QualifiedWithTag
'QLocal
UserId
-> Handler
Conversation)
:<|> (Named
"get-subconversation"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> SubConvId
-> Handler
PublicSubConversation)
:<|> (Named
"leave-subconversation"
(QualifiedWithTag
'QLocal
UserId
-> ClientId
-> Qualified
ConvId
-> SubConvId
-> Handler
())
:<|> (Named
"delete-subconversation"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> SubConvId
-> DeleteSubConversationRequest
-> Handler
())
:<|> (Named
"get-subconversation-group-info"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> SubConvId
-> Handler
GroupInfoData)
:<|> (Named
"create-one-to-one-conversation@v2"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> NewConv
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-one-to-one-conversation"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> NewConv
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"get-one-to-one-mls-conversation@v5"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Conversation)
:<|> (Named
"get-one-to-one-mls-conversation@v6"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
(MLSOne2OneConversation
MLSPublicKey))
:<|> (Named
"get-one-to-one-mls-conversation"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Maybe
MLSPublicKeyFormat
-> Handler
(MLSOne2OneConversation
SomeKey))
:<|> (Named
"add-members-to-conversation-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> Invite
-> Handler
(UpdateResult
Event))
:<|> (Named
"add-members-to-conversation-unqualified2"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> InviteQualified
-> Handler
(UpdateResult
Event))
:<|> (Named
"add-members-to-conversation"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> InviteQualified
-> Handler
(UpdateResult
Event))
:<|> (Named
"join-conversation-by-id-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> Handler
(UpdateResult
Event))
:<|> (Named
"join-conversation-by-code-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> JoinConversationByCode
-> Handler
(UpdateResult
Event))
:<|> (Named
"code-check"
(ConversationCode
-> Handler
())
:<|> (Named
"create-conversation-code-unqualified@v3"
(UserId
-> Maybe
Text
-> Maybe
ConnId
-> ConvId
-> Handler
AddCodeResult)
:<|> (Named
"create-conversation-code-unqualified"
(UserId
-> Maybe
Text
-> Maybe
ConnId
-> ConvId
-> CreateConversationCodeRequest
-> Handler
AddCodeResult)
:<|> (Named
"get-conversation-guest-links-status"
(UserId
-> ConvId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> (Named
"remove-code-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> Handler
Event)
:<|> (Named
"get-code"
(Maybe
Text
-> QualifiedWithTag
'QLocal
UserId
-> ConvId
-> Handler
ConversationCodeInfo)
:<|> (Named
"member-typing-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> TypingStatus
-> Handler
())
:<|> (Named
"member-typing-qualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> TypingStatus
-> Handler
())
:<|> (Named
"remove-member-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> UserId
-> Handler
(Maybe
Event))
:<|> (Named
"remove-member"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> Qualified
UserId
-> Handler
(Maybe
Event))
:<|> (Named
"update-other-member-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> UserId
-> OtherMemberUpdate
-> Handler
())
:<|> (Named
"update-other-member"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> Qualified
UserId
-> OtherMemberUpdate
-> Handler
())
:<|> (Named
"update-conversation-name-deprecated"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationRename
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-name-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationRename
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-name"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationRename
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-message-timer-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationMessageTimerUpdate
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-message-timer"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationMessageTimerUpdate
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-receipt-mode-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationReceiptModeUpdate
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-receipt-mode"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationReceiptModeUpdate
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-access-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationAccessData
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-access@v2"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationAccessData
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-access"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationAccessData
-> Handler
(UpdateResult
Event))
:<|> (Named
"get-conversation-self-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConvId
-> Handler
(Maybe
Member))
:<|> (Named
"update-conversation-self-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> MemberUpdate
-> Handler
())
:<|> (Named
"update-conversation-self"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> MemberUpdate
-> Handler
())
:<|> Named
"update-conversation-protocol"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ProtocolUpdate
-> Handler
(UpdateResult
Event))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"get-team-conversation-roles"
(UserId -> TeamId -> Handler ConversationRolesList)
:<|> (Named
"get-team-conversations"
(UserId -> TeamId -> Handler TeamConversationList)
:<|> (Named
"get-team-conversation"
(UserId -> TeamId -> ConvId -> Handler TeamConversation)
:<|> Named
"delete-team-conversation"
(QualifiedWithTag 'QLocal UserId
-> ConnId -> TeamId -> ConvId -> Handler ()))))
:<|> ((Named
"post-otr-message-unqualified"
(QualifiedWithTag 'QLocal UserId
-> ConnId
-> ConvId
-> Maybe IgnoreMissing
-> Maybe ReportMissing
-> NewOtrMessage
-> Handler (PostOtrResponse ClientMismatch))
:<|> (Named
"post-otr-broadcast-unqualified"
(QualifiedWithTag 'QLocal UserId
-> ConnId
-> Maybe IgnoreMissing
-> Maybe ReportMissing
-> NewOtrMessage
-> Handler (PostOtrResponse ClientMismatch))
:<|> (Named
"post-proteus-message"
(QualifiedWithTag 'QLocal UserId
-> ConnId
-> Qualified ConvId
-> RawProto QualifiedNewOtrMessage
-> Handler
(Either
(MessageNotSent MessageSendingStatus) MessageSendingStatus))
:<|> Named
"post-proteus-broadcast"
(QualifiedWithTag 'QLocal UserId
-> ConnId
-> QualifiedNewOtrMessage
-> Handler
(Either
(MessageNotSent MessageSendingStatus)
MessageSendingStatus)))))
:<|> ((Named
"post-bot-message-unqualified"
(BotId
-> ConvId
-> Maybe IgnoreMissing
-> Maybe ReportMissing
-> NewOtrMessage
-> Handler (PostOtrResponse ClientMismatch))
:<|> Named
"get-bot-conversation" (BotId -> ConvId -> Handler BotConvView))
:<|> ((Named
"create-non-binding-team"
(UserId -> ConnId -> NonBindingNewTeam -> Handler TeamId)
:<|> (Named
"update-team"
(UserId -> ConnId -> TeamId -> TeamUpdateData -> Handler ())
:<|> (Named "get-teams" (UserId -> Handler TeamList)
:<|> (Named "get-team" (UserId -> TeamId -> Handler Team)
:<|> Named
"delete-team"
(UserId
-> ConnId
-> TeamId
-> TeamDeleteData
-> Handler ())))))
:<|> ((Named
'("get", SSOConfig)
(UserId -> TeamId -> Handler (LockableFeature SSOConfig))
:<|> ((Named
'("get", LegalholdConfig)
(UserId
-> TeamId -> Handler (LockableFeature LegalholdConfig))
:<|> Named
'("put", LegalholdConfig)
(UserId
-> TeamId
-> Feature LegalholdConfig
-> Handler (LockableFeature LegalholdConfig)))
:<|> ((Named
'("get", SearchVisibilityAvailableConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> Named
'("put", SearchVisibilityAvailableConfig)
(UserId
-> TeamId
-> Feature SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig)))
:<|> (Named
"get-search-visibility"
(QualifiedWithTag 'QLocal UserId
-> TeamId -> Handler TeamSearchVisibilityView)
:<|> (Named
"set-search-visibility"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> TeamSearchVisibilityView
-> Handler ())
:<|> (Named
'("get", ValidateSAMLEmailsConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> (Named
'("get",
DigitalSignaturesConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> ((Named
'("get", AppLockConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
AppLockConfig))
:<|> Named
'("put",
AppLockConfig)
(UserId
-> TeamId
-> Feature
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig)))
:<|> ((Named
'("get",
FileSharingConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
FileSharingConfig))
:<|> Named
'("put",
FileSharingConfig)
(UserId
-> TeamId
-> Feature
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig)))
:<|> (Named
'("get",
ClassifiedDomainsConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ClassifiedDomainsConfig))
:<|> ((Named
'("get",
ConferenceCallingConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> Named
'("put",
ConferenceCallingConfig)
(UserId
-> TeamId
-> Feature
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig)))
:<|> ((Named
'("get",
SelfDeletingMessagesConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> Named
'("put",
SelfDeletingMessagesConfig)
(UserId
-> TeamId
-> Feature
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig)))
:<|> ((Named
'("get",
GuestLinksConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> Named
'("put",
GuestLinksConfig)
(UserId
-> TeamId
-> Feature
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig)))
:<|> ((Named
'("get",
SndFactorPasswordChallengeConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> Named
'("put",
SndFactorPasswordChallengeConfig)
(UserId
-> TeamId
-> Feature
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig)))
:<|> ((Named
'("get",
MLSConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
MLSConfig))
:<|> Named
'("put",
MLSConfig)
(UserId
-> TeamId
-> Feature
MLSConfig
-> Handler
(LockableFeature
MLSConfig)))
:<|> ((Named
'("get",
ExposeInvitationURLsToTeamAdminConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> Named
'("put",
ExposeInvitationURLsToTeamAdminConfig)
(UserId
-> TeamId
-> Feature
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))
:<|> ((Named
'("get",
SearchVisibilityInboundConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> Named
'("put",
SearchVisibilityInboundConfig)
(UserId
-> TeamId
-> Feature
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig)))
:<|> ((Named
'("get",
OutlookCalIntegrationConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> Named
'("put",
OutlookCalIntegrationConfig)
(UserId
-> TeamId
-> Feature
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig)))
:<|> (Named
'("get",
MlsE2EIdConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> (Named
"put-MlsE2EIdConfig@v5"
(UserId
-> TeamId
-> Feature
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> (Named
'("put",
MlsE2EIdConfig)
(UserId
-> TeamId
-> Feature
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> ((Named
'("get",
MlsMigrationConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> Named
'("put",
MlsMigrationConfig)
(UserId
-> TeamId
-> Feature
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig)))
:<|> ((Named
'("get",
EnforceFileDownloadLocationConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> Named
'("put",
EnforceFileDownloadLocationConfig)
(UserId
-> TeamId
-> Feature
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig)))
:<|> (Named
'("get",
LimitedEventFanoutConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> (Named
"get-all-feature-configs-for-user"
(UserId
-> Handler
AllTeamFeatures)
:<|> (Named
"get-all-feature-configs-for-team"
(QualifiedWithTag
'QLocal
UserId
-> TeamId
-> Handler
AllTeamFeatures)
:<|> ((Named
'("get-deprecated",
SearchVisibilityAvailableConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("put-deprecated",
SearchVisibilityAvailableConfig)
(UserId
-> TeamId
-> Feature
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("get-deprecated",
ValidateSAMLEmailsConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> Named
'("get-deprecated",
DigitalSignaturesConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
DigitalSignaturesConfig)))))
:<|> (Named
'("get-config",
LegalholdConfig)
(UserId
-> Handler
(LockableFeature
LegalholdConfig))
:<|> (Named
'("get-config",
SSOConfig)
(UserId
-> Handler
(LockableFeature
SSOConfig))
:<|> (Named
'("get-config",
SearchVisibilityAvailableConfig)
(UserId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("get-config",
ValidateSAMLEmailsConfig)
(UserId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> (Named
'("get-config",
DigitalSignaturesConfig)
(UserId
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> (Named
'("get-config",
AppLockConfig)
(UserId
-> Handler
(LockableFeature
AppLockConfig))
:<|> (Named
'("get-config",
FileSharingConfig)
(UserId
-> Handler
(LockableFeature
FileSharingConfig))
:<|> (Named
'("get-config",
ClassifiedDomainsConfig)
(UserId
-> Handler
(LockableFeature
ClassifiedDomainsConfig))
:<|> (Named
'("get-config",
ConferenceCallingConfig)
(UserId
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> (Named
'("get-config",
SelfDeletingMessagesConfig)
(UserId
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> (Named
'("get-config",
GuestLinksConfig)
(UserId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> (Named
'("get-config",
SndFactorPasswordChallengeConfig)
(UserId
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> Named
'("get-config",
MLSConfig)
(UserId
-> Handler
(LockableFeature
MLSConfig)))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"mls-message"
(QualifiedWithTag 'QLocal UserId
-> ClientId
-> ConnId
-> RawMLS Message
-> Handler MLSMessageSendingStatus)
:<|> (Named
"mls-commit-bundle"
(QualifiedWithTag 'QLocal UserId
-> ClientId
-> ConnId
-> RawMLS CommitBundle
-> Handler MLSMessageSendingStatus)
:<|> Named
"mls-public-keys"
(QualifiedWithTag 'QLocal UserId
-> Maybe MLSPublicKeyFormat
-> Handler
(MLSKeysByPurpose (MLSKeys SomeKey)))))
:<|> (Named
"get-custom-backend-by-domain"
(Domain -> Handler CustomBackend)
:<|> ((Named
"create-legal-hold-settings"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> NewLegalHoldService
-> Handler ViewLegalHoldService)
:<|> (Named
"get-legal-hold-settings"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> Handler ViewLegalHoldService)
:<|> (Named
"delete-legal-hold-settings"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> RemoveLegalHoldSettingsRequest
-> Handler ())
:<|> (Named
"get-legal-hold"
(QualifiedWithTag
'QLocal UserId
-> TeamId
-> UserId
-> Handler
UserLegalHoldStatusResponse)
:<|> (Named
"consent-to-legal-hold"
(QualifiedWithTag
'QLocal UserId
-> TeamId
-> Handler
GrantConsentResult)
:<|> (Named
"request-legal-hold-device"
(QualifiedWithTag
'QLocal UserId
-> TeamId
-> UserId
-> Handler
RequestDeviceResult)
:<|> (Named
"disable-legal-hold-for-user"
(QualifiedWithTag
'QLocal
UserId
-> TeamId
-> UserId
-> DisableLegalHoldForUserRequest
-> Handler
DisableLegalHoldForUserResponse)
:<|> Named
"approve-legal-hold-device"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> TeamId
-> UserId
-> ApproveLegalHoldForUserRequest
-> Handler
()))))))))
:<|> ((Named
"get-team-members"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> Maybe
(Range 1 HardTruncationLimit Int32)
-> Maybe TeamMembersPagingState
-> Handler TeamMembersPage)
:<|> (Named
"get-team-member"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> Handler TeamMemberOptPerms)
:<|> (Named
"get-team-members-by-ids"
(QualifiedWithTag
'QLocal UserId
-> TeamId
-> Maybe
(Range
1
HardTruncationLimit
Int32)
-> UserIdList
-> Handler
TeamMemberListOptPerms)
:<|> (Named
"add-team-member"
(QualifiedWithTag
'QLocal UserId
-> ConnId
-> TeamId
-> NewTeamMember
-> Handler ())
:<|> (Named
"delete-team-member"
(QualifiedWithTag
'QLocal UserId
-> ConnId
-> TeamId
-> UserId
-> TeamMemberDeleteData
-> Handler
TeamMemberDeleteResult)
:<|> (Named
"delete-non-binding-team-member"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> TeamId
-> UserId
-> Handler
TeamMemberDeleteResult)
:<|> (Named
"update-team-member"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> TeamId
-> NewTeamMember
-> Handler
())
:<|> Named
"get-team-members-csv"
(QualifiedWithTag
'QLocal
UserId
-> TeamId
-> Handler
LowLevelStreamingBody))))))))
:<|> Named
"get-team-notifications"
(UserId
-> Maybe NotificationId
-> Maybe (Range 1 10000 Int32)
-> Handler
QueuedNotificationList)))))))))))
-> ((Named "status" (Handler ())
:<|> (Named
"delete-user"
(QualifiedWithTag 'QLocal UserId -> Maybe ConnId -> Handler ())
:<|> (Named
"connect"
(QualifiedWithTag 'QLocal UserId
-> Maybe ConnId
-> Connect
-> Handler (ResponseForExistedCreated Conversation))
:<|> (Named
"get-conversation-clients" (GroupId -> Handler ClientList)
:<|> (Named
"guard-legalhold-policy-conflicts"
(GuardLegalholdPolicyConflicts -> Handler ())
:<|> ((TeamId
-> Named "set-team-legalhold-whitelisted" (Handler ())
:<|> (Named "unset-team-legalhold-whitelisted" (Handler ())
:<|> Named
"get-team-legalhold-whitelisted"
(Handler Bool)))
:<|> ((TeamId
-> Named "get-team-internal" (Handler TeamData)
:<|> (Named
"create-binding-team"
(UserId -> NewTeam -> Handler TeamId)
:<|> (Named
"delete-binding-team"
(Bool -> Handler ())
:<|> (Named
"get-team-name" (Handler TeamName)
:<|> (Named
"update-team-status"
(TeamStatusUpdate
-> Handler ())
:<|> ((Named
"unchecked-add-team-member"
(NewTeamMember
-> Handler ())
:<|> (Named
"unchecked-get-team-members"
(Maybe
(Range
1
HardTruncationLimit
Int32)
-> Handler
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(UserId
-> Handler
TeamMember)
:<|> (Named
"can-user-join-team"
(Handler
())
:<|> Named
"unchecked-update-team-member"
(NewTeamMember
-> Handler
())))))
:<|> (Named
"user-is-team-owner"
(UserId
-> Handler ())
:<|> (Named
"get-search-visibility-internal"
(Handler
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(TeamSearchVisibilityView
-> Handler
())))))))))
:<|> ((Named
"get-team-members"
(UserId -> Handler TeamMemberList)
:<|> (Named "get-team-id" (UserId -> Handler TeamId)
:<|> (Named
"test-get-clients"
(UserId -> Handler [ClientId])
:<|> (Named
"test-add-client"
(UserId
-> ClientId -> Handler ())
:<|> (Named
"test-delete-client"
(UserId
-> ClientId
-> Handler ())
:<|> (Named
"add-service"
(Service
-> Handler ())
:<|> (Named
"delete-service"
(ServiceRef
-> Handler
())
:<|> (Named
"i-add-bot"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> AddBot
-> Handler
Event)
:<|> (Named
"delete-bot"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> RemoveBot
-> Handler
(UpdateResult
Event))
:<|> (Named
"put-custom-backend"
(Domain
-> CustomBackend
-> Handler
())
:<|> Named
"delete-custom-backend"
(Domain
-> Handler
())))))))))))
:<|> (Named
"upsert-one2one"
(UpsertOne2OneConversationRequest
-> Handler ())
:<|> ((((Named
'("iget", LegalholdConfig)
(TeamId
-> Handler
(LockableFeature
LegalholdConfig))
:<|> (Named
'("iput", LegalholdConfig)
(TeamId
-> Feature LegalholdConfig
-> Handler
(LockableFeature
LegalholdConfig))
:<|> Named
'("ipatch",
LegalholdConfig)
(TeamId
-> LockableFeaturePatch
LegalholdConfig
-> Handler
(LockableFeature
LegalholdConfig))))
:<|> ((Named
'("iget", SSOConfig)
(TeamId
-> Handler
(LockableFeature
SSOConfig))
:<|> (Named
'("iput", SSOConfig)
(TeamId
-> Feature SSOConfig
-> Handler
(LockableFeature
SSOConfig))
:<|> Named
'("ipatch",
SSOConfig)
(TeamId
-> LockableFeaturePatch
SSOConfig
-> Handler
(LockableFeature
SSOConfig))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(TeamId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(TeamId
-> Feature
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(TeamId
-> LockableFeaturePatch
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(TeamId
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(TeamId
-> Feature
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(TeamId
-> LockableFeaturePatch
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(TeamId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(TeamId
-> Feature
ValidateSAMLEmailsConfig
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(TeamId
-> LockableFeaturePatch
ValidateSAMLEmailsConfig
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(TeamId
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(TeamId
-> Feature
DigitalSignaturesConfig
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(TeamId
-> LockableFeaturePatch
DigitalSignaturesConfig
-> Handler
(LockableFeature
DigitalSignaturesConfig))))
:<|> ((Named
'("iget",
AppLockConfig)
(TeamId
-> Handler
(LockableFeature
AppLockConfig))
:<|> (Named
'("iput",
AppLockConfig)
(TeamId
-> Feature
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig))
:<|> Named
'("ipatch",
AppLockConfig)
(TeamId
-> LockableFeaturePatch
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig))))
:<|> ((Named
'("iget",
FileSharingConfig)
(TeamId
-> Handler
(LockableFeature
FileSharingConfig))
:<|> (Named
'("iput",
FileSharingConfig)
(TeamId
-> Feature
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig))
:<|> Named
'("ipatch",
FileSharingConfig)
(TeamId
-> LockableFeaturePatch
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(TeamId
-> Handler
(LockableFeature
ClassifiedDomainsConfig))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(TeamId
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(TeamId
-> Feature
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(TeamId
-> LockableFeaturePatch
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(TeamId
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(TeamId
-> Feature
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(TeamId
-> LockableFeaturePatch
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(TeamId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> (Named
'("iput",
GuestLinksConfig)
(TeamId
-> Feature
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> Named
'("ipatch",
GuestLinksConfig)
(TeamId
-> LockableFeaturePatch
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(TeamId
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(TeamId
-> Feature
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(TeamId
-> LockableFeaturePatch
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))))
:<|> ((Named
'("iget",
MLSConfig)
(TeamId
-> Handler
(LockableFeature
MLSConfig))
:<|> (Named
'("iput",
MLSConfig)
(TeamId
-> Feature
MLSConfig
-> Handler
(LockableFeature
MLSConfig))
:<|> Named
'("ipatch",
MLSConfig)
(TeamId
-> LockableFeaturePatch
MLSConfig
-> Handler
(LockableFeature
MLSConfig))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> Feature
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(TeamId
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(TeamId
-> Feature
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(TeamId
-> LockableFeaturePatch
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(TeamId
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(TeamId
-> Feature
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(TeamId
-> LockableFeaturePatch
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(TeamId
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> (Named
'("iput",
MlsMigrationConfig)
(TeamId
-> Feature
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(TeamId
-> LockableFeaturePatch
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(TeamId
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(TeamId
-> Feature
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(TeamId
-> LockableFeaturePatch
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(TeamId
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(TeamId
-> Feature
LimitedEventFanoutConfig
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(TeamId
-> LockableFeaturePatch
LimitedEventFanoutConfig
-> Handler
(LockableFeature
LimitedEventFanoutConfig)))))))))))))))))))))))
:<|> (Named
'("ilock", FileSharingConfig)
(TeamId
-> LockStatus
-> Handler LockStatusResponse)
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
GuestLinksConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MLSConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MlsMigrationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(TeamFeatureNoConfigMultiRequest
-> Handler
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig))
:<|> Named
"feature-configs-internal"
(Maybe
UserId
-> Handler
AllTeamFeatures)))))))))))))
:<|> (Named
"get-federation-status"
(QualifiedWithTag 'QLocal UserId
-> RemoteDomains
-> Handler FederationStatus)
:<|> ((Named
"conversation-get-member"
(ConvId
-> UserId
-> Handler
(Maybe Member))
:<|> (Named
"conversation-accept-v2"
(QualifiedWithTag
'QLocal UserId
-> Maybe ConnId
-> ConvId
-> Handler
Conversation)
:<|> (Named
"conversation-block-unqualified"
(UserId
-> ConvId
-> Handler
())
:<|> (Named
"conversation-block"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> Handler
())
:<|> (Named
"conversation-unblock-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> ConvId
-> Handler
Conversation)
:<|> (Named
"conversation-unblock"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> Qualified
ConvId
-> Handler
())
:<|> (Named
"conversation-meta"
(ConvId
-> Handler
ConversationMetadata)
:<|> (Named
"conversation-mls-one-to-one"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Conversation)
:<|> Named
"conversation-mls-one-to-one-established"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Bool)))))))))
:<|> Named
"get-conversations-by-user"
(UserId
-> Handler
[EJPDConvInfo])))))))))))))
:<|> ((Named
"on-conversation-created"
(Domain -> ConversationCreated ConvId -> Handler EmptyResponse)
:<|> (Named
"get-conversations@v1"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponse)
:<|> (Named
"get-conversations"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponseV2)
:<|> (Named
"leave-conversation"
(Domain
-> LeaveConversationRequest -> Handler LeaveConversationResponse)
:<|> (Named
"send-message"
(Domain
-> ProteusMessageSendRequest -> Handler MessageSendResponse)
:<|> (Named
"update-conversation"
(Domain
-> ConversationUpdateRequest
-> Handler ConversationUpdateResponse)
:<|> (Named
"mls-welcome"
(Domain
-> MLSWelcomeRequest
-> Handler MLSWelcomeResponse)
:<|> (Named
"send-mls-message"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"send-mls-commit-bundle"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"query-group-info"
(Domain
-> GetGroupInfoRequest
-> Handler GetGroupInfoResponse)
:<|> (Named
"update-typing-indicator"
(Domain
-> TypingDataUpdateRequest
-> Handler
TypingDataUpdateResponse)
:<|> (Named
"on-typing-indicator-updated"
(Domain
-> TypingDataUpdated
-> Handler
EmptyResponse)
:<|> (Named
"get-sub-conversation"
(Domain
-> GetSubConversationsRequest
-> Handler
GetSubConversationsResponse)
:<|> (Named
"delete-sub-conversation"
(Domain
-> DeleteSubConversationFedRequest
-> Handler
DeleteSubConversationResponse)
:<|> (Named
"leave-sub-conversation"
(Domain
-> LeaveSubConversationRequest
-> Handler
LeaveSubConversationResponse)
:<|> (Named
"get-one2one-conversation@v1"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponse)
:<|> (Named
"get-one2one-conversation"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponseV2)
:<|> (Named
"on-client-removed"
(Domain
-> ClientRemovedRequest
-> Handler
EmptyResponse)
:<|> (Named
"on-message-sent"
(Domain
-> RemoteMessage
ConvId
-> Handler
EmptyResponse)
:<|> (Named
"on-mls-message-sent"
(Domain
-> RemoteMLSMessage
-> Handler
EmptyResponse)
:<|> (Named
(Versioned
'V0
"on-conversation-updated")
(Domain
-> ConversationUpdateV0
-> Handler
EmptyResponse)
:<|> (Named
"on-conversation-updated"
(Domain
-> ConversationUpdate
-> Handler
EmptyResponse)
:<|> Named
"on-user-deleted-conversations"
(Domain
-> UserDeletedConversationsNotification
-> Handler
EmptyResponse)))))))))))))))))))))))
:<|> Tagged Handler Application))
-> ((Named
"get-unqualified-conversation"
(QualifiedWithTag 'QLocal UserId -> ConvId -> Handler Conversation)
:<|> (Named
"get-unqualified-conversation-legalhold-alias"
(QualifiedWithTag 'QLocal UserId -> ConvId -> Handler Conversation)
:<|> (Named
"get-conversation@v2"
(QualifiedWithTag 'QLocal UserId
-> Qualified ConvId -> Handler Conversation)
:<|> (Named
"get-conversation@v5"
(QualifiedWithTag 'QLocal UserId
-> Qualified ConvId -> Handler Conversation)
:<|> (Named
"get-conversation"
(QualifiedWithTag 'QLocal UserId
-> Qualified ConvId -> Handler Conversation)
:<|> (Named
"get-conversation-roles"
(QualifiedWithTag 'QLocal UserId
-> ConvId -> Handler ConversationRolesList)
:<|> (Named
"get-group-info"
(QualifiedWithTag 'QLocal UserId
-> Qualified ConvId -> Handler GroupInfoData)
:<|> (Named
"list-conversation-ids-unqualified"
(QualifiedWithTag 'QLocal UserId
-> Maybe ConvId
-> Maybe (Range 1 1000 Int32)
-> Handler (ConversationList ConvId))
:<|> (Named
"list-conversation-ids-v2"
(QualifiedWithTag 'QLocal UserId
-> GetPaginatedConversationIds
-> Handler ConvIdsPage)
:<|> (Named
"list-conversation-ids"
(QualifiedWithTag 'QLocal UserId
-> GetPaginatedConversationIds
-> Handler ConvIdsPage)
:<|> (Named
"get-conversations"
(QualifiedWithTag 'QLocal UserId
-> Maybe
(Range
1
32
(CommaSeparatedList
ConvId))
-> Maybe ConvId
-> Maybe (Range 1 500 Int32)
-> Handler
(ConversationList
Conversation))
:<|> (Named
"list-conversations@v1"
(QualifiedWithTag
'QLocal UserId
-> ListConversations
-> Handler
ConversationsResponse)
:<|> (Named
"list-conversations@v2"
(QualifiedWithTag
'QLocal UserId
-> ListConversations
-> Handler
ConversationsResponse)
:<|> (Named
"list-conversations@v5"
(QualifiedWithTag
'QLocal
UserId
-> ListConversations
-> Handler
ConversationsResponse)
:<|> (Named
"list-conversations"
(QualifiedWithTag
'QLocal
UserId
-> ListConversations
-> Handler
ConversationsResponse)
:<|> (Named
"get-conversation-by-reusable-code"
(QualifiedWithTag
'QLocal
UserId
-> Key
-> Value
-> Handler
ConversationCoverView)
:<|> (Named
"create-group-conversation@v2"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> NewConv
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-group-conversation@v3"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> NewConv
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-group-conversation@v5"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> NewConv
-> Handler
CreateGroupConversationResponse)
:<|> (Named
"create-group-conversation"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> NewConv
-> Handler
CreateGroupConversationResponse)
:<|> (Named
"create-self-conversation@v2"
(QualifiedWithTag
'QLocal
UserId
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-self-conversation@v5"
(QualifiedWithTag
'QLocal
UserId
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-self-conversation"
(QualifiedWithTag
'QLocal
UserId
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"get-mls-self-conversation@v5"
(QualifiedWithTag
'QLocal
UserId
-> Handler
Conversation)
:<|> (Named
"get-mls-self-conversation"
(QualifiedWithTag
'QLocal
UserId
-> Handler
Conversation)
:<|> (Named
"get-subconversation"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> SubConvId
-> Handler
PublicSubConversation)
:<|> (Named
"leave-subconversation"
(QualifiedWithTag
'QLocal
UserId
-> ClientId
-> Qualified
ConvId
-> SubConvId
-> Handler
())
:<|> (Named
"delete-subconversation"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> SubConvId
-> DeleteSubConversationRequest
-> Handler
())
:<|> (Named
"get-subconversation-group-info"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> SubConvId
-> Handler
GroupInfoData)
:<|> (Named
"create-one-to-one-conversation@v2"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> NewConv
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"create-one-to-one-conversation"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> NewConv
-> Handler
(ResponseForExistedCreated
Conversation))
:<|> (Named
"get-one-to-one-mls-conversation@v5"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Conversation)
:<|> (Named
"get-one-to-one-mls-conversation@v6"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
(MLSOne2OneConversation
MLSPublicKey))
:<|> (Named
"get-one-to-one-mls-conversation"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Maybe
MLSPublicKeyFormat
-> Handler
(MLSOne2OneConversation
SomeKey))
:<|> (Named
"add-members-to-conversation-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> Invite
-> Handler
(UpdateResult
Event))
:<|> (Named
"add-members-to-conversation-unqualified2"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> InviteQualified
-> Handler
(UpdateResult
Event))
:<|> (Named
"add-members-to-conversation"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> InviteQualified
-> Handler
(UpdateResult
Event))
:<|> (Named
"join-conversation-by-id-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> Handler
(UpdateResult
Event))
:<|> (Named
"join-conversation-by-code-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> JoinConversationByCode
-> Handler
(UpdateResult
Event))
:<|> (Named
"code-check"
(ConversationCode
-> Handler
())
:<|> (Named
"create-conversation-code-unqualified@v3"
(UserId
-> Maybe
Text
-> Maybe
ConnId
-> ConvId
-> Handler
AddCodeResult)
:<|> (Named
"create-conversation-code-unqualified"
(UserId
-> Maybe
Text
-> Maybe
ConnId
-> ConvId
-> CreateConversationCodeRequest
-> Handler
AddCodeResult)
:<|> (Named
"get-conversation-guest-links-status"
(UserId
-> ConvId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> (Named
"remove-code-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> Handler
Event)
:<|> (Named
"get-code"
(Maybe
Text
-> QualifiedWithTag
'QLocal
UserId
-> ConvId
-> Handler
ConversationCodeInfo)
:<|> (Named
"member-typing-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> TypingStatus
-> Handler
())
:<|> (Named
"member-typing-qualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> TypingStatus
-> Handler
())
:<|> (Named
"remove-member-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> UserId
-> Handler
(Maybe
Event))
:<|> (Named
"remove-member"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> Qualified
UserId
-> Handler
(Maybe
Event))
:<|> (Named
"update-other-member-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> UserId
-> OtherMemberUpdate
-> Handler
())
:<|> (Named
"update-other-member"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> Qualified
UserId
-> OtherMemberUpdate
-> Handler
())
:<|> (Named
"update-conversation-name-deprecated"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationRename
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-name-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationRename
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-name"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationRename
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-message-timer-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationMessageTimerUpdate
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-message-timer"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationMessageTimerUpdate
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-receipt-mode-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationReceiptModeUpdate
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-receipt-mode"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationReceiptModeUpdate
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-access-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> ConversationAccessData
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-access@v2"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationAccessData
-> Handler
(UpdateResult
Event))
:<|> (Named
"update-conversation-access"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ConversationAccessData
-> Handler
(UpdateResult
Event))
:<|> (Named
"get-conversation-self-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConvId
-> Handler
(Maybe
Member))
:<|> (Named
"update-conversation-self-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> ConvId
-> MemberUpdate
-> Handler
())
:<|> (Named
"update-conversation-self"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> MemberUpdate
-> Handler
())
:<|> Named
"update-conversation-protocol"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> Qualified
ConvId
-> ProtocolUpdate
-> Handler
(UpdateResult
Event))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"get-team-conversation-roles"
(UserId -> TeamId -> Handler ConversationRolesList)
:<|> (Named
"get-team-conversations"
(UserId -> TeamId -> Handler TeamConversationList)
:<|> (Named
"get-team-conversation"
(UserId -> TeamId -> ConvId -> Handler TeamConversation)
:<|> Named
"delete-team-conversation"
(QualifiedWithTag 'QLocal UserId
-> ConnId -> TeamId -> ConvId -> Handler ()))))
:<|> ((Named
"post-otr-message-unqualified"
(QualifiedWithTag 'QLocal UserId
-> ConnId
-> ConvId
-> Maybe IgnoreMissing
-> Maybe ReportMissing
-> NewOtrMessage
-> Handler (PostOtrResponse ClientMismatch))
:<|> (Named
"post-otr-broadcast-unqualified"
(QualifiedWithTag 'QLocal UserId
-> ConnId
-> Maybe IgnoreMissing
-> Maybe ReportMissing
-> NewOtrMessage
-> Handler (PostOtrResponse ClientMismatch))
:<|> (Named
"post-proteus-message"
(QualifiedWithTag 'QLocal UserId
-> ConnId
-> Qualified ConvId
-> RawProto QualifiedNewOtrMessage
-> Handler
(Either
(MessageNotSent MessageSendingStatus) MessageSendingStatus))
:<|> Named
"post-proteus-broadcast"
(QualifiedWithTag 'QLocal UserId
-> ConnId
-> QualifiedNewOtrMessage
-> Handler
(Either
(MessageNotSent MessageSendingStatus)
MessageSendingStatus)))))
:<|> ((Named
"post-bot-message-unqualified"
(BotId
-> ConvId
-> Maybe IgnoreMissing
-> Maybe ReportMissing
-> NewOtrMessage
-> Handler (PostOtrResponse ClientMismatch))
:<|> Named
"get-bot-conversation" (BotId -> ConvId -> Handler BotConvView))
:<|> ((Named
"create-non-binding-team"
(UserId -> ConnId -> NonBindingNewTeam -> Handler TeamId)
:<|> (Named
"update-team"
(UserId -> ConnId -> TeamId -> TeamUpdateData -> Handler ())
:<|> (Named "get-teams" (UserId -> Handler TeamList)
:<|> (Named "get-team" (UserId -> TeamId -> Handler Team)
:<|> Named
"delete-team"
(UserId
-> ConnId
-> TeamId
-> TeamDeleteData
-> Handler ())))))
:<|> ((Named
'("get", SSOConfig)
(UserId -> TeamId -> Handler (LockableFeature SSOConfig))
:<|> ((Named
'("get", LegalholdConfig)
(UserId
-> TeamId -> Handler (LockableFeature LegalholdConfig))
:<|> Named
'("put", LegalholdConfig)
(UserId
-> TeamId
-> Feature LegalholdConfig
-> Handler (LockableFeature LegalholdConfig)))
:<|> ((Named
'("get", SearchVisibilityAvailableConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> Named
'("put", SearchVisibilityAvailableConfig)
(UserId
-> TeamId
-> Feature SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig)))
:<|> (Named
"get-search-visibility"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> Handler TeamSearchVisibilityView)
:<|> (Named
"set-search-visibility"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> TeamSearchVisibilityView
-> Handler ())
:<|> (Named
'("get",
ValidateSAMLEmailsConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> (Named
'("get",
DigitalSignaturesConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> ((Named
'("get",
AppLockConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
AppLockConfig))
:<|> Named
'("put",
AppLockConfig)
(UserId
-> TeamId
-> Feature
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig)))
:<|> ((Named
'("get",
FileSharingConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
FileSharingConfig))
:<|> Named
'("put",
FileSharingConfig)
(UserId
-> TeamId
-> Feature
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig)))
:<|> (Named
'("get",
ClassifiedDomainsConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ClassifiedDomainsConfig))
:<|> ((Named
'("get",
ConferenceCallingConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> Named
'("put",
ConferenceCallingConfig)
(UserId
-> TeamId
-> Feature
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig)))
:<|> ((Named
'("get",
SelfDeletingMessagesConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> Named
'("put",
SelfDeletingMessagesConfig)
(UserId
-> TeamId
-> Feature
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig)))
:<|> ((Named
'("get",
GuestLinksConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> Named
'("put",
GuestLinksConfig)
(UserId
-> TeamId
-> Feature
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig)))
:<|> ((Named
'("get",
SndFactorPasswordChallengeConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> Named
'("put",
SndFactorPasswordChallengeConfig)
(UserId
-> TeamId
-> Feature
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig)))
:<|> ((Named
'("get",
MLSConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
MLSConfig))
:<|> Named
'("put",
MLSConfig)
(UserId
-> TeamId
-> Feature
MLSConfig
-> Handler
(LockableFeature
MLSConfig)))
:<|> ((Named
'("get",
ExposeInvitationURLsToTeamAdminConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> Named
'("put",
ExposeInvitationURLsToTeamAdminConfig)
(UserId
-> TeamId
-> Feature
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))
:<|> ((Named
'("get",
SearchVisibilityInboundConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> Named
'("put",
SearchVisibilityInboundConfig)
(UserId
-> TeamId
-> Feature
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig)))
:<|> ((Named
'("get",
OutlookCalIntegrationConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> Named
'("put",
OutlookCalIntegrationConfig)
(UserId
-> TeamId
-> Feature
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig)))
:<|> (Named
'("get",
MlsE2EIdConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> (Named
"put-MlsE2EIdConfig@v5"
(UserId
-> TeamId
-> Feature
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> (Named
'("put",
MlsE2EIdConfig)
(UserId
-> TeamId
-> Feature
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> ((Named
'("get",
MlsMigrationConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> Named
'("put",
MlsMigrationConfig)
(UserId
-> TeamId
-> Feature
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig)))
:<|> ((Named
'("get",
EnforceFileDownloadLocationConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> Named
'("put",
EnforceFileDownloadLocationConfig)
(UserId
-> TeamId
-> Feature
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig)))
:<|> (Named
'("get",
LimitedEventFanoutConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> (Named
"get-all-feature-configs-for-user"
(UserId
-> Handler
AllTeamFeatures)
:<|> (Named
"get-all-feature-configs-for-team"
(QualifiedWithTag
'QLocal
UserId
-> TeamId
-> Handler
AllTeamFeatures)
:<|> ((Named
'("get-deprecated",
SearchVisibilityAvailableConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("put-deprecated",
SearchVisibilityAvailableConfig)
(UserId
-> TeamId
-> Feature
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("get-deprecated",
ValidateSAMLEmailsConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> Named
'("get-deprecated",
DigitalSignaturesConfig)
(UserId
-> TeamId
-> Handler
(LockableFeature
DigitalSignaturesConfig)))))
:<|> (Named
'("get-config",
LegalholdConfig)
(UserId
-> Handler
(LockableFeature
LegalholdConfig))
:<|> (Named
'("get-config",
SSOConfig)
(UserId
-> Handler
(LockableFeature
SSOConfig))
:<|> (Named
'("get-config",
SearchVisibilityAvailableConfig)
(UserId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("get-config",
ValidateSAMLEmailsConfig)
(UserId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> (Named
'("get-config",
DigitalSignaturesConfig)
(UserId
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> (Named
'("get-config",
AppLockConfig)
(UserId
-> Handler
(LockableFeature
AppLockConfig))
:<|> (Named
'("get-config",
FileSharingConfig)
(UserId
-> Handler
(LockableFeature
FileSharingConfig))
:<|> (Named
'("get-config",
ClassifiedDomainsConfig)
(UserId
-> Handler
(LockableFeature
ClassifiedDomainsConfig))
:<|> (Named
'("get-config",
ConferenceCallingConfig)
(UserId
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> (Named
'("get-config",
SelfDeletingMessagesConfig)
(UserId
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> (Named
'("get-config",
GuestLinksConfig)
(UserId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> (Named
'("get-config",
SndFactorPasswordChallengeConfig)
(UserId
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> Named
'("get-config",
MLSConfig)
(UserId
-> Handler
(LockableFeature
MLSConfig)))))))))))))))))))))))))))))))))))))))))
:<|> ((Named
"mls-message"
(QualifiedWithTag 'QLocal UserId
-> ClientId
-> ConnId
-> RawMLS Message
-> Handler MLSMessageSendingStatus)
:<|> (Named
"mls-commit-bundle"
(QualifiedWithTag 'QLocal UserId
-> ClientId
-> ConnId
-> RawMLS CommitBundle
-> Handler MLSMessageSendingStatus)
:<|> Named
"mls-public-keys"
(QualifiedWithTag 'QLocal UserId
-> Maybe MLSPublicKeyFormat
-> Handler
(MLSKeysByPurpose (MLSKeys SomeKey)))))
:<|> (Named
"get-custom-backend-by-domain"
(Domain -> Handler CustomBackend)
:<|> ((Named
"create-legal-hold-settings"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> NewLegalHoldService
-> Handler ViewLegalHoldService)
:<|> (Named
"get-legal-hold-settings"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> Handler ViewLegalHoldService)
:<|> (Named
"delete-legal-hold-settings"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> RemoveLegalHoldSettingsRequest
-> Handler ())
:<|> (Named
"get-legal-hold"
(QualifiedWithTag
'QLocal UserId
-> TeamId
-> UserId
-> Handler
UserLegalHoldStatusResponse)
:<|> (Named
"consent-to-legal-hold"
(QualifiedWithTag
'QLocal UserId
-> TeamId
-> Handler
GrantConsentResult)
:<|> (Named
"request-legal-hold-device"
(QualifiedWithTag
'QLocal
UserId
-> TeamId
-> UserId
-> Handler
RequestDeviceResult)
:<|> (Named
"disable-legal-hold-for-user"
(QualifiedWithTag
'QLocal
UserId
-> TeamId
-> UserId
-> DisableLegalHoldForUserRequest
-> Handler
DisableLegalHoldForUserResponse)
:<|> Named
"approve-legal-hold-device"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> TeamId
-> UserId
-> ApproveLegalHoldForUserRequest
-> Handler
()))))))))
:<|> ((Named
"get-team-members"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> Maybe
(Range
1 HardTruncationLimit Int32)
-> Maybe TeamMembersPagingState
-> Handler TeamMembersPage)
:<|> (Named
"get-team-member"
(QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> Handler TeamMemberOptPerms)
:<|> (Named
"get-team-members-by-ids"
(QualifiedWithTag
'QLocal UserId
-> TeamId
-> Maybe
(Range
1
HardTruncationLimit
Int32)
-> UserIdList
-> Handler
TeamMemberListOptPerms)
:<|> (Named
"add-team-member"
(QualifiedWithTag
'QLocal UserId
-> ConnId
-> TeamId
-> NewTeamMember
-> Handler ())
:<|> (Named
"delete-team-member"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> TeamId
-> UserId
-> TeamMemberDeleteData
-> Handler
TeamMemberDeleteResult)
:<|> (Named
"delete-non-binding-team-member"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> TeamId
-> UserId
-> Handler
TeamMemberDeleteResult)
:<|> (Named
"update-team-member"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> TeamId
-> NewTeamMember
-> Handler
())
:<|> Named
"get-team-members-csv"
(QualifiedWithTag
'QLocal
UserId
-> TeamId
-> Handler
LowLevelStreamingBody))))))))
:<|> Named
"get-team-notifications"
(UserId
-> Maybe NotificationId
-> Maybe (Range 1 10000 Int32)
-> Handler
QueuedNotificationList)))))))))))
:<|> ((Named "status" (Handler ())
:<|> (Named
"delete-user"
(QualifiedWithTag 'QLocal UserId -> Maybe ConnId -> Handler ())
:<|> (Named
"connect"
(QualifiedWithTag 'QLocal UserId
-> Maybe ConnId
-> Connect
-> Handler (ResponseForExistedCreated Conversation))
:<|> (Named
"get-conversation-clients" (GroupId -> Handler ClientList)
:<|> (Named
"guard-legalhold-policy-conflicts"
(GuardLegalholdPolicyConflicts -> Handler ())
:<|> ((TeamId
-> Named "set-team-legalhold-whitelisted" (Handler ())
:<|> (Named
"unset-team-legalhold-whitelisted" (Handler ())
:<|> Named
"get-team-legalhold-whitelisted"
(Handler Bool)))
:<|> ((TeamId
-> Named "get-team-internal" (Handler TeamData)
:<|> (Named
"create-binding-team"
(UserId -> NewTeam -> Handler TeamId)
:<|> (Named
"delete-binding-team"
(Bool -> Handler ())
:<|> (Named
"get-team-name"
(Handler TeamName)
:<|> (Named
"update-team-status"
(TeamStatusUpdate
-> Handler ())
:<|> ((Named
"unchecked-add-team-member"
(NewTeamMember
-> Handler ())
:<|> (Named
"unchecked-get-team-members"
(Maybe
(Range
1
HardTruncationLimit
Int32)
-> Handler
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(UserId
-> Handler
TeamMember)
:<|> (Named
"can-user-join-team"
(Handler
())
:<|> Named
"unchecked-update-team-member"
(NewTeamMember
-> Handler
())))))
:<|> (Named
"user-is-team-owner"
(UserId
-> Handler
())
:<|> (Named
"get-search-visibility-internal"
(Handler
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(TeamSearchVisibilityView
-> Handler
())))))))))
:<|> ((Named
"get-team-members"
(UserId -> Handler TeamMemberList)
:<|> (Named
"get-team-id"
(UserId -> Handler TeamId)
:<|> (Named
"test-get-clients"
(UserId -> Handler [ClientId])
:<|> (Named
"test-add-client"
(UserId
-> ClientId -> Handler ())
:<|> (Named
"test-delete-client"
(UserId
-> ClientId
-> Handler ())
:<|> (Named
"add-service"
(Service
-> Handler ())
:<|> (Named
"delete-service"
(ServiceRef
-> Handler
())
:<|> (Named
"i-add-bot"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> AddBot
-> Handler
Event)
:<|> (Named
"delete-bot"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> RemoveBot
-> Handler
(UpdateResult
Event))
:<|> (Named
"put-custom-backend"
(Domain
-> CustomBackend
-> Handler
())
:<|> Named
"delete-custom-backend"
(Domain
-> Handler
())))))))))))
:<|> (Named
"upsert-one2one"
(UpsertOne2OneConversationRequest
-> Handler ())
:<|> ((((Named
'("iget", LegalholdConfig)
(TeamId
-> Handler
(LockableFeature
LegalholdConfig))
:<|> (Named
'("iput",
LegalholdConfig)
(TeamId
-> Feature
LegalholdConfig
-> Handler
(LockableFeature
LegalholdConfig))
:<|> Named
'("ipatch",
LegalholdConfig)
(TeamId
-> LockableFeaturePatch
LegalholdConfig
-> Handler
(LockableFeature
LegalholdConfig))))
:<|> ((Named
'("iget", SSOConfig)
(TeamId
-> Handler
(LockableFeature
SSOConfig))
:<|> (Named
'("iput",
SSOConfig)
(TeamId
-> Feature
SSOConfig
-> Handler
(LockableFeature
SSOConfig))
:<|> Named
'("ipatch",
SSOConfig)
(TeamId
-> LockableFeaturePatch
SSOConfig
-> Handler
(LockableFeature
SSOConfig))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(TeamId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(TeamId
-> Feature
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(TeamId
-> LockableFeaturePatch
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(TeamId
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(TeamId
-> Feature
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(TeamId
-> LockableFeaturePatch
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(TeamId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(TeamId
-> Feature
ValidateSAMLEmailsConfig
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(TeamId
-> LockableFeaturePatch
ValidateSAMLEmailsConfig
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(TeamId
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(TeamId
-> Feature
DigitalSignaturesConfig
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(TeamId
-> LockableFeaturePatch
DigitalSignaturesConfig
-> Handler
(LockableFeature
DigitalSignaturesConfig))))
:<|> ((Named
'("iget",
AppLockConfig)
(TeamId
-> Handler
(LockableFeature
AppLockConfig))
:<|> (Named
'("iput",
AppLockConfig)
(TeamId
-> Feature
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig))
:<|> Named
'("ipatch",
AppLockConfig)
(TeamId
-> LockableFeaturePatch
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig))))
:<|> ((Named
'("iget",
FileSharingConfig)
(TeamId
-> Handler
(LockableFeature
FileSharingConfig))
:<|> (Named
'("iput",
FileSharingConfig)
(TeamId
-> Feature
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig))
:<|> Named
'("ipatch",
FileSharingConfig)
(TeamId
-> LockableFeaturePatch
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(TeamId
-> Handler
(LockableFeature
ClassifiedDomainsConfig))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(TeamId
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(TeamId
-> Feature
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(TeamId
-> LockableFeaturePatch
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(TeamId
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(TeamId
-> Feature
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(TeamId
-> LockableFeaturePatch
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(TeamId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> (Named
'("iput",
GuestLinksConfig)
(TeamId
-> Feature
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> Named
'("ipatch",
GuestLinksConfig)
(TeamId
-> LockableFeaturePatch
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(TeamId
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(TeamId
-> Feature
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(TeamId
-> LockableFeaturePatch
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))))
:<|> ((Named
'("iget",
MLSConfig)
(TeamId
-> Handler
(LockableFeature
MLSConfig))
:<|> (Named
'("iput",
MLSConfig)
(TeamId
-> Feature
MLSConfig
-> Handler
(LockableFeature
MLSConfig))
:<|> Named
'("ipatch",
MLSConfig)
(TeamId
-> LockableFeaturePatch
MLSConfig
-> Handler
(LockableFeature
MLSConfig))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> Feature
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(TeamId
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(TeamId
-> Feature
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(TeamId
-> LockableFeaturePatch
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(TeamId
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(TeamId
-> Feature
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(TeamId
-> LockableFeaturePatch
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(TeamId
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> (Named
'("iput",
MlsMigrationConfig)
(TeamId
-> Feature
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(TeamId
-> LockableFeaturePatch
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(TeamId
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(TeamId
-> Feature
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(TeamId
-> LockableFeaturePatch
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(TeamId
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(TeamId
-> Feature
LimitedEventFanoutConfig
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(TeamId
-> LockableFeaturePatch
LimitedEventFanoutConfig
-> Handler
(LockableFeature
LimitedEventFanoutConfig)))))))))))))))))))))))
:<|> (Named
'("ilock",
FileSharingConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
GuestLinksConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MLSConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MlsMigrationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(TeamFeatureNoConfigMultiRequest
-> Handler
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig))
:<|> Named
"feature-configs-internal"
(Maybe
UserId
-> Handler
AllTeamFeatures)))))))))))))
:<|> (Named
"get-federation-status"
(QualifiedWithTag
'QLocal UserId
-> RemoteDomains
-> Handler
FederationStatus)
:<|> ((Named
"conversation-get-member"
(ConvId
-> UserId
-> Handler
(Maybe Member))
:<|> (Named
"conversation-accept-v2"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> ConvId
-> Handler
Conversation)
:<|> (Named
"conversation-block-unqualified"
(UserId
-> ConvId
-> Handler
())
:<|> (Named
"conversation-block"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> Handler
())
:<|> (Named
"conversation-unblock-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> ConvId
-> Handler
Conversation)
:<|> (Named
"conversation-unblock"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> Qualified
ConvId
-> Handler
())
:<|> (Named
"conversation-meta"
(ConvId
-> Handler
ConversationMetadata)
:<|> (Named
"conversation-mls-one-to-one"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Conversation)
:<|> Named
"conversation-mls-one-to-one-established"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Bool)))))))))
:<|> Named
"get-conversations-by-user"
(UserId
-> Handler
[EJPDConvInfo])))))))))))))
:<|> ((Named
"on-conversation-created"
(Domain -> ConversationCreated ConvId -> Handler EmptyResponse)
:<|> (Named
"get-conversations@v1"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponse)
:<|> (Named
"get-conversations"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponseV2)
:<|> (Named
"leave-conversation"
(Domain
-> LeaveConversationRequest
-> Handler LeaveConversationResponse)
:<|> (Named
"send-message"
(Domain
-> ProteusMessageSendRequest
-> Handler MessageSendResponse)
:<|> (Named
"update-conversation"
(Domain
-> ConversationUpdateRequest
-> Handler ConversationUpdateResponse)
:<|> (Named
"mls-welcome"
(Domain
-> MLSWelcomeRequest
-> Handler MLSWelcomeResponse)
:<|> (Named
"send-mls-message"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"send-mls-commit-bundle"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"query-group-info"
(Domain
-> GetGroupInfoRequest
-> Handler
GetGroupInfoResponse)
:<|> (Named
"update-typing-indicator"
(Domain
-> TypingDataUpdateRequest
-> Handler
TypingDataUpdateResponse)
:<|> (Named
"on-typing-indicator-updated"
(Domain
-> TypingDataUpdated
-> Handler
EmptyResponse)
:<|> (Named
"get-sub-conversation"
(Domain
-> GetSubConversationsRequest
-> Handler
GetSubConversationsResponse)
:<|> (Named
"delete-sub-conversation"
(Domain
-> DeleteSubConversationFedRequest
-> Handler
DeleteSubConversationResponse)
:<|> (Named
"leave-sub-conversation"
(Domain
-> LeaveSubConversationRequest
-> Handler
LeaveSubConversationResponse)
:<|> (Named
"get-one2one-conversation@v1"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponse)
:<|> (Named
"get-one2one-conversation"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponseV2)
:<|> (Named
"on-client-removed"
(Domain
-> ClientRemovedRequest
-> Handler
EmptyResponse)
:<|> (Named
"on-message-sent"
(Domain
-> RemoteMessage
ConvId
-> Handler
EmptyResponse)
:<|> (Named
"on-mls-message-sent"
(Domain
-> RemoteMLSMessage
-> Handler
EmptyResponse)
:<|> (Named
(Versioned
'V0
"on-conversation-updated")
(Domain
-> ConversationUpdateV0
-> Handler
EmptyResponse)
:<|> (Named
"on-conversation-updated"
(Domain
-> ConversationUpdate
-> Handler
EmptyResponse)
:<|> Named
"on-user-deleted-conversations"
(Domain
-> UserDeletedConversationsNotification
-> Handler
EmptyResponse)))))))))))))))))))))))
:<|> Tagged Handler Application))
forall a b. a -> b -> a :<|> b
:<|> (forall x.
Sem
'[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,
HashPassword, Error InvalidInput, Error InternalError,
Error FederationError, Async, Delay, Fail, Embed IO,
Error JSONResponse, Resource, Final IO]
x
-> Handler x)
-> API
("i"
:> (Named
"status"
("status" :> MultiVerb 'GET '[JSON] '[RespondEmpty 200 "OK"] ())
:<|> (Named
"delete-user"
(Summary
"Remove a user from their teams and conversations and erase their clients"
:> (ZLocalUser
:> (ZOptConn
:> ("user"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty 200 "Remove a user from Galley"]
()))))
:<|> (Named
"connect"
(Summary "Create a connect conversation (deprecated)"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'InvalidOperation
:> (CanThrow 'NotConnected
:> (CanThrow UnreachableBackends
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> ("connect"
:> (ReqBody '[JSON] Connect
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))
:<|> (Named
"get-conversation-clients"
(Summary "Get mls conversation client list"
:> (CanThrow 'ConvNotFound
:> ("group"
:> (Capture "gid" GroupId
:> MultiVerb
'GET
'[JSON]
'[Respond 200 "Clients" ClientList]
ClientList))))
:<|> (Named
"guard-legalhold-policy-conflicts"
("guard-legalhold-policy-conflicts"
:> (CanThrow 'MissingLegalholdConsent
:> (CanThrow 'MissingLegalholdConsentOldClients
:> (ReqBody '[JSON] GuardLegalholdPolicyConflicts
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty 200 "Guard Legalhold Policy"]
()))))
:<|> (("legalhold"
:> ("whitelisted-teams"
:> (Capture "tid" TeamId
:> (Named
"set-team-legalhold-whitelisted"
(MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200 "Team Legalhold Whitelisted"]
())
:<|> (Named
"unset-team-legalhold-whitelisted"
(MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
204
"Team Legalhold un-Whitelisted"]
())
:<|> Named
"get-team-legalhold-whitelisted"
(MultiVerb
'GET
'[JSON]
'[RespondEmpty
404
"Team not Legalhold Whitelisted",
RespondEmpty
200
"Team Legalhold Whitelisted"]
Bool))))))
:<|> (("teams"
:> (Capture "tid" TeamId
:> (Named
"get-team-internal"
(CanThrow 'TeamNotFound
:> Get '[JSON] TeamData)
:<|> (Named
"create-binding-team"
(ZUser
:> (ReqBody '[JSON] NewTeam
:> MultiVerb
'PUT
'[JSON]
'[WithHeaders
'[Header
"Location" TeamId]
TeamId
(RespondEmpty
201 "OK")]
TeamId))
:<|> (Named
"delete-binding-team"
(CanThrow 'NoBindingTeam
:> (CanThrow
'NotAOneMemberTeam
:> (CanThrow
'DeleteQueueFull
:> (CanThrow
'TeamNotFound
:> (QueryFlag
"force"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
202
"OK"]
())))))
:<|> (Named
"get-team-name"
("name"
:> (CanThrow
'TeamNotFound
:> Get
'[JSON]
TeamName))
:<|> (Named
"update-team-status"
("status"
:> (CanThrow
'TeamNotFound
:> (CanThrow
'InvalidTeamStatusUpdate
:> (ReqBody
'[JSON]
TeamStatusUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (("members"
:> (Named
"unchecked-add-team-member"
(CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (CanThrow
'TooManyTeamAdmins
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (Named
"unchecked-get-team-members"
(QueryParam'
'[Strict]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> Get
'[JSON]
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(Capture
"uid"
UserId
:> (CanThrow
'TeamMemberNotFound
:> Get
'[JSON]
TeamMember))
:<|> (Named
"can-user-join-team"
("check"
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User can join"]
()))
:<|> Named
"unchecked-update-team-member"
(CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
())))))))))))))
:<|> (Named
"user-is-team-owner"
("is-team-owner"
:> (Capture
"uid"
UserId
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'NotATeamMember
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User is team owner"]
())))))
:<|> ("search-visibility"
:> (Named
"get-search-visibility-internal"
(Get
'[JSON]
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(CanThrow
'TeamSearchVisibilityNotEnabled
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (ReqBody
'[JSON]
TeamSearchVisibilityView
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
204
"OK"]
()))))))))))))))))
:<|> ((Named
"get-team-members"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> ("members"
:> Get
'[JSON]
TeamMemberList))))))
:<|> (Named
"get-team-id"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> Get
'[JSON]
TeamId)))))
:<|> (Named
"test-get-clients"
("test"
:> ("clients"
:> (ZUser
:> Get
'[JSON]
[ClientId])))
:<|> (Named
"test-add-client"
("clients"
:> (ZUser
:> (Capture
"cid" ClientId
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200 "OK"]
())))
:<|> (Named
"test-delete-client"
("clients"
:> (ZUser
:> (Capture
"cid"
ClientId
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))
:<|> (Named
"add-service"
("services"
:> (ReqBody
'[JSON]
Service
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"delete-service"
("services"
:> (ReqBody
'[JSON]
ServiceRef
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"i-add-bot"
(CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> ("bots"
:> (ZLocalUser
:> (ZConn
:> (ReqBody
'[JSON]
AddBot
:> Post
'[JSON]
Event))))))))
:<|> (Named
"delete-bot"
(CanThrow
'ConvNotFound
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> ("bots"
:> (ZLocalUser
:> (ZOptConn
:> (ReqBody
'[JSON]
RemoveBot
:> MultiVerb
'DELETE
'[JSON]
(UpdateResponses
"Bot not found"
"Bot deleted"
Event)
(UpdateResult
Event)))))))
:<|> (Named
"put-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> (ReqBody
'[JSON]
CustomBackend
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
201
"OK"]
()))))
:<|> Named
"delete-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))))))))))))
:<|> (Named
"upsert-one2one"
(Summary
"Create or Update a connect or one2one conversation."
:> ("conversations"
:> ("one2one"
:> ("upsert"
:> (ReqBody
'[JSON]
UpsertOne2OneConversationRequest
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Upsert One2One Policy"]
())))))
:<|> ((((Named
'("iget", LegalholdConfig)
(Description ""
:> (Summary
"Get config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("iput",
LegalholdConfig)
(Description ""
:> (Summary
"Put config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))
:<|> Named
'("ipatch",
LegalholdConfig)
(Description ""
:> (Summary
"Patch config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LegalholdConfig)
:> Patch
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("iget", SSOConfig)
(Description ""
:> (Summary
"Get config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("iput",
SSOConfig)
(Description ""
:> (Summary
"Put config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(Feature
SSOConfig)
:> Put
'[JSON]
(LockableFeature
SSOConfig)))))))))))))
:<|> Named
'("ipatch",
SSOConfig)
(Description
""
:> (Summary
"Patch config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SSOConfig)
:> Patch
'[JSON]
(LockableFeature
SSOConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(Description ""
:> (Summary
"Get config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Put config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Patch config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityAvailableConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Patch config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityInboundConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Put config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(Feature
ValidateSAMLEmailsConfig)
:> Put
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Patch config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ValidateSAMLEmailsConfig)
:> Patch
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Put config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(Feature
DigitalSignaturesConfig)
:> Put
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Patch config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
DigitalSignaturesConfig)
:> Patch
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> ((Named
'("iget",
AppLockConfig)
(Description
""
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("iput",
AppLockConfig)
(Description
""
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))
:<|> Named
'("ipatch",
AppLockConfig)
(Description
""
:> (Summary
"Patch config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
AppLockConfig)
:> Patch
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("iget",
FileSharingConfig)
(Description
""
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("iput",
FileSharingConfig)
(Description
""
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))
:<|> Named
'("ipatch",
FileSharingConfig)
(Description
""
:> (Summary
"Patch config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
FileSharingConfig)
:> Patch
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(Description
""
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Patch config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ConferenceCallingConfig)
:> Patch
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Patch config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SelfDeletingMessagesConfig)
:> Patch
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(Description
""
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("iput",
GuestLinksConfig)
(Description
""
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))
:<|> Named
'("ipatch",
GuestLinksConfig)
(Description
""
:> (Summary
"Patch config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
GuestLinksConfig)
:> Patch
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Patch config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SndFactorPasswordChallengeConfig)
:> Patch
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("iget",
MLSConfig)
(Description
""
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))
:<|> (Named
'("iput",
MLSConfig)
(Description
""
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig)))))))))))))
:<|> Named
'("ipatch",
MLSConfig)
(Description
""
:> (Summary
"Patch config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MLSConfig)
:> Patch
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))))))))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Patch config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig)
:> Patch
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig))))))))))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Patch config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
OutlookCalIntegrationConfig)
:> Patch
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Patch config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsE2EIdConfig)
:> Patch
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(Description
""
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))
:<|> (Named
'("iput",
MlsMigrationConfig)
(Description
""
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(Description
""
:> (Summary
"Patch config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsMigrationConfig)
:> Patch
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Patch config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
EnforceFileDownloadLocationConfig)
:> Patch
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Put config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(Feature
LimitedEventFanoutConfig)
:> Put
'[JSON]
(LockableFeature
LimitedEventFanoutConfig)))))))))))))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Patch config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LimitedEventFanoutConfig)
:> Patch
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))))))))))))))))))))))))
:<|> (Named
'("ilock",
FileSharingConfig)
(Summary
"(Un-)lock fileSharing"
:> (Description ""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(Summary
"(Un-)lock conferenceCalling"
:> (Description ""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(Summary
"(Un-)lock selfDeletingMessages"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
GuestLinksConfig)
(Summary
"(Un-)lock conversationGuestLinks"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(Summary
"(Un-)lock sndFactorPasswordChallenge"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MLSConfig)
(Summary
"(Un-)lock mls"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(Summary
"(Un-)lock outlookCalIntegration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(Summary
"(Un-)lock mlsE2EId"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsMigrationConfig)
(Summary
"(Un-)lock mlsMigration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(Summary
"(Un-)lock enforceFileDownloadLocation"
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(Summary
"Get team feature status in bulk for feature searchVisibilityInbound"
:> ("features-multi-teams"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
TeamFeatureNoConfigMultiRequest
:> Post
'[JSON]
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig)))))
:<|> Named
"feature-configs-internal"
(Summary
"Get all feature configs (for user/team; if n/a fall back to site config)."
:> ("feature-configs"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional user id"]
"user_id"
UserId
:> Get
'[JSON]
AllTeamFeatures))))))))))))))))))
:<|> (IFederationAPI
:<|> (IConversationAPI
:<|> IEJPDAPI)))))))))))))
'[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,
HashPassword, Error InvalidInput, Error InternalError,
Error FederationError, Async, Delay, Fail, Embed IO,
Error JSONResponse, Resource, Final IO]
-> ServerT
("i"
:> (Named
"status"
("status" :> MultiVerb 'GET '[JSON] '[RespondEmpty 200 "OK"] ())
:<|> (Named
"delete-user"
(Summary
"Remove a user from their teams and conversations and erase their clients"
:> (ZLocalUser
:> (ZOptConn
:> ("user"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty 200 "Remove a user from Galley"]
()))))
:<|> (Named
"connect"
(Summary "Create a connect conversation (deprecated)"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'InvalidOperation
:> (CanThrow 'NotConnected
:> (CanThrow UnreachableBackends
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> ("connect"
:> (ReqBody '[JSON] Connect
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))
:<|> (Named
"get-conversation-clients"
(Summary "Get mls conversation client list"
:> (CanThrow 'ConvNotFound
:> ("group"
:> (Capture "gid" GroupId
:> MultiVerb
'GET
'[JSON]
'[Respond 200 "Clients" ClientList]
ClientList))))
:<|> (Named
"guard-legalhold-policy-conflicts"
("guard-legalhold-policy-conflicts"
:> (CanThrow 'MissingLegalholdConsent
:> (CanThrow 'MissingLegalholdConsentOldClients
:> (ReqBody '[JSON] GuardLegalholdPolicyConflicts
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty 200 "Guard Legalhold Policy"]
()))))
:<|> (("legalhold"
:> ("whitelisted-teams"
:> (Capture "tid" TeamId
:> (Named
"set-team-legalhold-whitelisted"
(MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200 "Team Legalhold Whitelisted"]
())
:<|> (Named
"unset-team-legalhold-whitelisted"
(MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
204
"Team Legalhold un-Whitelisted"]
())
:<|> Named
"get-team-legalhold-whitelisted"
(MultiVerb
'GET
'[JSON]
'[RespondEmpty
404
"Team not Legalhold Whitelisted",
RespondEmpty
200
"Team Legalhold Whitelisted"]
Bool))))))
:<|> (("teams"
:> (Capture "tid" TeamId
:> (Named
"get-team-internal"
(CanThrow 'TeamNotFound
:> Get '[JSON] TeamData)
:<|> (Named
"create-binding-team"
(ZUser
:> (ReqBody '[JSON] NewTeam
:> MultiVerb
'PUT
'[JSON]
'[WithHeaders
'[Header
"Location" TeamId]
TeamId
(RespondEmpty
201 "OK")]
TeamId))
:<|> (Named
"delete-binding-team"
(CanThrow 'NoBindingTeam
:> (CanThrow
'NotAOneMemberTeam
:> (CanThrow
'DeleteQueueFull
:> (CanThrow
'TeamNotFound
:> (QueryFlag
"force"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
202
"OK"]
())))))
:<|> (Named
"get-team-name"
("name"
:> (CanThrow
'TeamNotFound
:> Get
'[JSON]
TeamName))
:<|> (Named
"update-team-status"
("status"
:> (CanThrow
'TeamNotFound
:> (CanThrow
'InvalidTeamStatusUpdate
:> (ReqBody
'[JSON]
TeamStatusUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (("members"
:> (Named
"unchecked-add-team-member"
(CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (CanThrow
'TooManyTeamAdmins
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (Named
"unchecked-get-team-members"
(QueryParam'
'[Strict]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> Get
'[JSON]
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(Capture
"uid"
UserId
:> (CanThrow
'TeamMemberNotFound
:> Get
'[JSON]
TeamMember))
:<|> (Named
"can-user-join-team"
("check"
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User can join"]
()))
:<|> Named
"unchecked-update-team-member"
(CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
())))))))))))))
:<|> (Named
"user-is-team-owner"
("is-team-owner"
:> (Capture
"uid"
UserId
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'NotATeamMember
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User is team owner"]
())))))
:<|> ("search-visibility"
:> (Named
"get-search-visibility-internal"
(Get
'[JSON]
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(CanThrow
'TeamSearchVisibilityNotEnabled
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (ReqBody
'[JSON]
TeamSearchVisibilityView
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
204
"OK"]
()))))))))))))))))
:<|> ((Named
"get-team-members"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> ("members"
:> Get
'[JSON]
TeamMemberList))))))
:<|> (Named
"get-team-id"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> Get
'[JSON]
TeamId)))))
:<|> (Named
"test-get-clients"
("test"
:> ("clients"
:> (ZUser
:> Get
'[JSON]
[ClientId])))
:<|> (Named
"test-add-client"
("clients"
:> (ZUser
:> (Capture
"cid" ClientId
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200 "OK"]
())))
:<|> (Named
"test-delete-client"
("clients"
:> (ZUser
:> (Capture
"cid"
ClientId
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))
:<|> (Named
"add-service"
("services"
:> (ReqBody
'[JSON]
Service
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"delete-service"
("services"
:> (ReqBody
'[JSON]
ServiceRef
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"i-add-bot"
(CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> ("bots"
:> (ZLocalUser
:> (ZConn
:> (ReqBody
'[JSON]
AddBot
:> Post
'[JSON]
Event))))))))
:<|> (Named
"delete-bot"
(CanThrow
'ConvNotFound
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> ("bots"
:> (ZLocalUser
:> (ZOptConn
:> (ReqBody
'[JSON]
RemoveBot
:> MultiVerb
'DELETE
'[JSON]
(UpdateResponses
"Bot not found"
"Bot deleted"
Event)
(UpdateResult
Event)))))))
:<|> (Named
"put-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> (ReqBody
'[JSON]
CustomBackend
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
201
"OK"]
()))))
:<|> Named
"delete-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))))))))))))
:<|> (Named
"upsert-one2one"
(Summary
"Create or Update a connect or one2one conversation."
:> ("conversations"
:> ("one2one"
:> ("upsert"
:> (ReqBody
'[JSON]
UpsertOne2OneConversationRequest
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Upsert One2One Policy"]
())))))
:<|> ((((Named
'("iget", LegalholdConfig)
(Description ""
:> (Summary
"Get config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("iput",
LegalholdConfig)
(Description ""
:> (Summary
"Put config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))
:<|> Named
'("ipatch",
LegalholdConfig)
(Description ""
:> (Summary
"Patch config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LegalholdConfig)
:> Patch
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("iget", SSOConfig)
(Description ""
:> (Summary
"Get config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("iput",
SSOConfig)
(Description ""
:> (Summary
"Put config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(Feature
SSOConfig)
:> Put
'[JSON]
(LockableFeature
SSOConfig)))))))))))))
:<|> Named
'("ipatch",
SSOConfig)
(Description
""
:> (Summary
"Patch config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SSOConfig)
:> Patch
'[JSON]
(LockableFeature
SSOConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(Description ""
:> (Summary
"Get config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Put config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Patch config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityAvailableConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Patch config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityInboundConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Put config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(Feature
ValidateSAMLEmailsConfig)
:> Put
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Patch config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ValidateSAMLEmailsConfig)
:> Patch
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Put config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(Feature
DigitalSignaturesConfig)
:> Put
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Patch config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
DigitalSignaturesConfig)
:> Patch
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> ((Named
'("iget",
AppLockConfig)
(Description
""
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("iput",
AppLockConfig)
(Description
""
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))
:<|> Named
'("ipatch",
AppLockConfig)
(Description
""
:> (Summary
"Patch config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
AppLockConfig)
:> Patch
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("iget",
FileSharingConfig)
(Description
""
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("iput",
FileSharingConfig)
(Description
""
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))
:<|> Named
'("ipatch",
FileSharingConfig)
(Description
""
:> (Summary
"Patch config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
FileSharingConfig)
:> Patch
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(Description
""
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Patch config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ConferenceCallingConfig)
:> Patch
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Patch config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SelfDeletingMessagesConfig)
:> Patch
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(Description
""
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("iput",
GuestLinksConfig)
(Description
""
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))
:<|> Named
'("ipatch",
GuestLinksConfig)
(Description
""
:> (Summary
"Patch config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
GuestLinksConfig)
:> Patch
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Patch config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SndFactorPasswordChallengeConfig)
:> Patch
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("iget",
MLSConfig)
(Description
""
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))
:<|> (Named
'("iput",
MLSConfig)
(Description
""
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig)))))))))))))
:<|> Named
'("ipatch",
MLSConfig)
(Description
""
:> (Summary
"Patch config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MLSConfig)
:> Patch
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))))))))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Patch config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig)
:> Patch
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig))))))))))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Patch config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
OutlookCalIntegrationConfig)
:> Patch
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Patch config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsE2EIdConfig)
:> Patch
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(Description
""
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))
:<|> (Named
'("iput",
MlsMigrationConfig)
(Description
""
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(Description
""
:> (Summary
"Patch config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsMigrationConfig)
:> Patch
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Patch config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
EnforceFileDownloadLocationConfig)
:> Patch
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Put config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(Feature
LimitedEventFanoutConfig)
:> Put
'[JSON]
(LockableFeature
LimitedEventFanoutConfig)))))))))))))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Patch config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LimitedEventFanoutConfig)
:> Patch
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))))))))))))))))))))))))
:<|> (Named
'("ilock",
FileSharingConfig)
(Summary
"(Un-)lock fileSharing"
:> (Description ""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(Summary
"(Un-)lock conferenceCalling"
:> (Description ""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(Summary
"(Un-)lock selfDeletingMessages"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
GuestLinksConfig)
(Summary
"(Un-)lock conversationGuestLinks"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(Summary
"(Un-)lock sndFactorPasswordChallenge"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MLSConfig)
(Summary
"(Un-)lock mls"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(Summary
"(Un-)lock outlookCalIntegration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(Summary
"(Un-)lock mlsE2EId"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsMigrationConfig)
(Summary
"(Un-)lock mlsMigration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(Summary
"(Un-)lock enforceFileDownloadLocation"
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(Summary
"Get team feature status in bulk for feature searchVisibilityInbound"
:> ("features-multi-teams"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
TeamFeatureNoConfigMultiRequest
:> Post
'[JSON]
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig)))))
:<|> Named
"feature-configs-internal"
(Summary
"Get all feature configs (for user/team; if n/a fall back to site config)."
:> ("feature-configs"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional user id"]
"user_id"
UserId
:> Get
'[JSON]
AllTeamFeatures))))))))))))))))))
:<|> (IFederationAPI
:<|> (IConversationAPI
:<|> IEJPDAPI)))))))))))))
Handler
forall {k} (api :: k) (r :: EffectRow) (n :: * -> *).
HasServer api '[Domain] =>
(forall x. Sem r x -> n x) -> API api r -> ServerT api n
hoistAPIHandler (Env -> Sem GalleyEffects x -> Handler x
forall a. Env -> Sem GalleyEffects a -> Handler a
toServantHandler Env
e) API
("i"
:> (Named
"status"
("status" :> MultiVerb 'GET '[JSON] '[RespondEmpty 200 "OK"] ())
:<|> (Named
"delete-user"
(Summary
"Remove a user from their teams and conversations and erase their clients"
:> (ZLocalUser
:> (ZOptConn
:> ("user"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty 200 "Remove a user from Galley"]
()))))
:<|> (Named
"connect"
(Summary "Create a connect conversation (deprecated)"
:> (CanThrow 'ConvNotFound
:> (CanThrow 'InvalidOperation
:> (CanThrow 'NotConnected
:> (CanThrow UnreachableBackends
:> (ZLocalUser
:> (ZOptConn
:> ("conversations"
:> ("connect"
:> (ReqBody '[JSON] Connect
:> MultiVerb
'POST
'[JSON]
'[WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
200
"Conversation existed"
Conversation),
WithHeaders
ConversationHeaders
Conversation
(VersionedRespond
'V6
201
"Conversation created"
Conversation)]
(ResponseForExistedCreated
Conversation)))))))))))
:<|> (Named
"get-conversation-clients"
(Summary "Get mls conversation client list"
:> (CanThrow 'ConvNotFound
:> ("group"
:> (Capture "gid" GroupId
:> MultiVerb
'GET
'[JSON]
'[Respond 200 "Clients" ClientList]
ClientList))))
:<|> (Named
"guard-legalhold-policy-conflicts"
("guard-legalhold-policy-conflicts"
:> (CanThrow 'MissingLegalholdConsent
:> (CanThrow 'MissingLegalholdConsentOldClients
:> (ReqBody '[JSON] GuardLegalholdPolicyConflicts
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty 200 "Guard Legalhold Policy"]
()))))
:<|> (("legalhold"
:> ("whitelisted-teams"
:> (Capture "tid" TeamId
:> (Named
"set-team-legalhold-whitelisted"
(MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200 "Team Legalhold Whitelisted"]
())
:<|> (Named
"unset-team-legalhold-whitelisted"
(MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
204
"Team Legalhold un-Whitelisted"]
())
:<|> Named
"get-team-legalhold-whitelisted"
(MultiVerb
'GET
'[JSON]
'[RespondEmpty
404
"Team not Legalhold Whitelisted",
RespondEmpty
200
"Team Legalhold Whitelisted"]
Bool))))))
:<|> (("teams"
:> (Capture "tid" TeamId
:> (Named
"get-team-internal"
(CanThrow 'TeamNotFound
:> Get '[JSON] TeamData)
:<|> (Named
"create-binding-team"
(ZUser
:> (ReqBody '[JSON] NewTeam
:> MultiVerb
'PUT
'[JSON]
'[WithHeaders
'[Header
"Location" TeamId]
TeamId
(RespondEmpty 201 "OK")]
TeamId))
:<|> (Named
"delete-binding-team"
(CanThrow 'NoBindingTeam
:> (CanThrow 'NotAOneMemberTeam
:> (CanThrow 'DeleteQueueFull
:> (CanThrow
'TeamNotFound
:> (QueryFlag "force"
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
202
"OK"]
())))))
:<|> (Named
"get-team-name"
("name"
:> (CanThrow 'TeamNotFound
:> Get
'[JSON] TeamName))
:<|> (Named
"update-team-status"
("status"
:> (CanThrow
'TeamNotFound
:> (CanThrow
'InvalidTeamStatusUpdate
:> (ReqBody
'[JSON]
TeamStatusUpdate
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (("members"
:> (Named
"unchecked-add-team-member"
(CanThrow
'TooManyTeamMembers
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> (CanThrow
'TooManyTeamAdmins
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))))
:<|> (Named
"unchecked-get-team-members"
(QueryParam'
'[Strict]
"maxResults"
(Range
1
HardTruncationLimit
Int32)
:> Get
'[JSON]
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(Capture
"uid"
UserId
:> (CanThrow
'TeamMemberNotFound
:> Get
'[JSON]
TeamMember))
:<|> (Named
"can-user-join-team"
("check"
:> (CanThrow
'TooManyTeamMembersOnTeamWithLegalhold
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User can join"]
()))
:<|> Named
"unchecked-update-team-member"
(CanThrow
'AccessDenied
:> (CanThrow
'InvalidPermissions
:> (CanThrow
'TeamNotFound
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'TooManyTeamAdmins
:> (CanThrow
'NotATeamMember
:> (CanThrow
OperationDenied
:> (ReqBody
'[JSON]
NewTeamMember
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
200
""]
())))))))))))))
:<|> (Named
"user-is-team-owner"
("is-team-owner"
:> (Capture
"uid"
UserId
:> (CanThrow
'AccessDenied
:> (CanThrow
'TeamMemberNotFound
:> (CanThrow
'NotATeamMember
:> MultiVerb
'GET
'[JSON]
'[RespondEmpty
200
"User is team owner"]
())))))
:<|> ("search-visibility"
:> (Named
"get-search-visibility-internal"
(Get
'[JSON]
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(CanThrow
'TeamSearchVisibilityNotEnabled
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (ReqBody
'[JSON]
TeamSearchVisibilityView
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
204
"OK"]
()))))))))))))))))
:<|> ((Named
"get-team-members"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> ("members"
:> Get
'[JSON]
TeamMemberList))))))
:<|> (Named
"get-team-id"
(CanThrow 'NonBindingTeam
:> (CanThrow 'TeamNotFound
:> ("users"
:> (Capture "uid" UserId
:> ("team"
:> Get
'[JSON] TeamId)))))
:<|> (Named
"test-get-clients"
("test"
:> ("clients"
:> (ZUser
:> Get
'[JSON] [ClientId])))
:<|> (Named
"test-add-client"
("clients"
:> (ZUser
:> (Capture
"cid" ClientId
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200 "OK"]
())))
:<|> (Named
"test-delete-client"
("clients"
:> (ZUser
:> (Capture
"cid"
ClientId
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))
:<|> (Named
"add-service"
("services"
:> (ReqBody
'[JSON]
Service
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"delete-service"
("services"
:> (ReqBody
'[JSON]
ServiceRef
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
()))
:<|> (Named
"i-add-bot"
(CanThrow
('ActionDenied
'AddConversationMember)
:> (CanThrow
'ConvNotFound
:> (CanThrow
'InvalidOperation
:> (CanThrow
'TooManyMembers
:> ("bots"
:> (ZLocalUser
:> (ZConn
:> (ReqBody
'[JSON]
AddBot
:> Post
'[JSON]
Event))))))))
:<|> (Named
"delete-bot"
(CanThrow
'ConvNotFound
:> (CanThrow
('ActionDenied
'RemoveConversationMember)
:> ("bots"
:> (ZLocalUser
:> (ZOptConn
:> (ReqBody
'[JSON]
RemoveBot
:> MultiVerb
'DELETE
'[JSON]
(UpdateResponses
"Bot not found"
"Bot deleted"
Event)
(UpdateResult
Event)))))))
:<|> (Named
"put-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> (ReqBody
'[JSON]
CustomBackend
:> MultiVerb
'PUT
'[JSON]
'[RespondEmpty
201
"OK"]
()))))
:<|> Named
"delete-custom-backend"
("custom-backend"
:> ("by-domain"
:> (Capture
"domain"
Domain
:> MultiVerb
'DELETE
'[JSON]
'[RespondEmpty
200
"OK"]
())))))))))))))
:<|> (Named
"upsert-one2one"
(Summary
"Create or Update a connect or one2one conversation."
:> ("conversations"
:> ("one2one"
:> ("upsert"
:> (ReqBody
'[JSON]
UpsertOne2OneConversationRequest
:> MultiVerb
'POST
'[JSON]
'[RespondEmpty
200
"Upsert One2One Policy"]
())))))
:<|> ((((Named
'("iget", LegalholdConfig)
(Description ""
:> (Summary
"Get config for legalhold"
:> (CanThrow OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> Get
'[JSON]
(LockableFeature
LegalholdConfig))))))))))
:<|> (Named
'("iput", LegalholdConfig)
(Description ""
:> (Summary
"Put config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(Feature
LegalholdConfig)
:> Put
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))
:<|> Named
'("ipatch",
LegalholdConfig)
(Description ""
:> (Summary
"Patch config for legalhold"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[ 'ActionDenied
'RemoveConversationMember,
'CannotEnableLegalHoldServiceLargeTeam,
'LegalHoldNotEnabled,
'LegalHoldDisableUnimplemented,
'LegalHoldServiceNotRegistered,
'UserLegalHoldIllegalOperation,
'LegalHoldCouldNotBlockConnections]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("legalhold"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LegalholdConfig)
:> Patch
'[JSON]
(LockableFeature
LegalholdConfig)))))))))))))))
:<|> ((Named
'("iget", SSOConfig)
(Description ""
:> (Summary
"Get config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> Get
'[JSON]
(LockableFeature
SSOConfig))))))))))
:<|> (Named
'("iput", SSOConfig)
(Description ""
:> (Summary
"Put config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(Feature
SSOConfig)
:> Put
'[JSON]
(LockableFeature
SSOConfig)))))))))))))
:<|> Named
'("ipatch",
SSOConfig)
(Description ""
:> (Summary
"Patch config for sso"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sso"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SSOConfig)
:> Patch
'[JSON]
(LockableFeature
SSOConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(Description ""
:> (Summary
"Get config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(Description ""
:> (Summary
"Put config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityAvailableConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(Description
""
:> (Summary
"Patch config for searchVisibility"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibility"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityAvailableConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityAvailableConfig)))))))))))))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(Description ""
:> (Summary
"Get config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> Get
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig))))))))))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Put config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(Feature
SearchVisibilityInboundConfig)
:> Put
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(Description
""
:> (Summary
"Patch config for searchVisibilityInbound"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SearchVisibilityInboundConfig)
:> Patch
'[JSON]
(LockableFeature
SearchVisibilityInboundConfig)))))))))))))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Get config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> Get
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig))))))))))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Put config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(Feature
ValidateSAMLEmailsConfig)
:> Put
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(Description
""
:> (Summary
"Patch config for validateSAMLemails"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("validateSAMLemails"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ValidateSAMLEmailsConfig)
:> Patch
'[JSON]
(LockableFeature
ValidateSAMLEmailsConfig)))))))))))))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Get config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> Get
'[JSON]
(LockableFeature
DigitalSignaturesConfig))))))))))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Put config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(Feature
DigitalSignaturesConfig)
:> Put
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(Description
""
:> (Summary
"Patch config for digitalSignatures"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("digitalSignatures"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
DigitalSignaturesConfig)
:> Patch
'[JSON]
(LockableFeature
DigitalSignaturesConfig)))))))))))))))
:<|> ((Named
'("iget",
AppLockConfig)
(Description
""
:> (Summary
"Get config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> Get
'[JSON]
(LockableFeature
AppLockConfig))))))))))
:<|> (Named
'("iput",
AppLockConfig)
(Description
""
:> (Summary
"Put config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(Feature
AppLockConfig)
:> Put
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))
:<|> Named
'("ipatch",
AppLockConfig)
(Description
""
:> (Summary
"Patch config for appLock"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("appLock"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
AppLockConfig)
:> Patch
'[JSON]
(LockableFeature
AppLockConfig)))))))))))))))
:<|> ((Named
'("iget",
FileSharingConfig)
(Description
""
:> (Summary
"Get config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> Get
'[JSON]
(LockableFeature
FileSharingConfig))))))))))
:<|> (Named
'("iput",
FileSharingConfig)
(Description
""
:> (Summary
"Put config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(Feature
FileSharingConfig)
:> Put
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))
:<|> Named
'("ipatch",
FileSharingConfig)
(Description
""
:> (Summary
"Patch config for fileSharing"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
FileSharingConfig)
:> Patch
'[JSON]
(LockableFeature
FileSharingConfig)))))))))))))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(Description
""
:> (Summary
"Get config for classifiedDomains"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("classifiedDomains"
:> Get
'[JSON]
(LockableFeature
ClassifiedDomainsConfig))))))))))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Get config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> Get
'[JSON]
(LockableFeature
ConferenceCallingConfig))))))))))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Put config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(Feature
ConferenceCallingConfig)
:> Put
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(Description
""
:> (Summary
"Patch config for conferenceCalling"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ConferenceCallingConfig)
:> Patch
'[JSON]
(LockableFeature
ConferenceCallingConfig)))))))))))))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Get config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> Get
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig))))))))))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Put config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(Feature
SelfDeletingMessagesConfig)
:> Put
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(Description
""
:> (Summary
"Patch config for selfDeletingMessages"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SelfDeletingMessagesConfig)
:> Patch
'[JSON]
(LockableFeature
SelfDeletingMessagesConfig)))))))))))))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(Description
""
:> (Summary
"Get config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> Get
'[JSON]
(LockableFeature
GuestLinksConfig))))))))))
:<|> (Named
'("iput",
GuestLinksConfig)
(Description
""
:> (Summary
"Put config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(Feature
GuestLinksConfig)
:> Put
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))
:<|> Named
'("ipatch",
GuestLinksConfig)
(Description
""
:> (Summary
"Patch config for conversationGuestLinks"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
GuestLinksConfig)
:> Patch
'[JSON]
(LockableFeature
GuestLinksConfig)))))))))))))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Get config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> Get
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig))))))))))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Put config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(Feature
SndFactorPasswordChallengeConfig)
:> Put
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(Description
""
:> (Summary
"Patch config for sndFactorPasswordChallenge"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
SndFactorPasswordChallengeConfig)
:> Patch
'[JSON]
(LockableFeature
SndFactorPasswordChallengeConfig)))))))))))))))
:<|> ((Named
'("iget",
MLSConfig)
(Description
""
:> (Summary
"Get config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> Get
'[JSON]
(LockableFeature
MLSConfig))))))))))
:<|> (Named
'("iput",
MLSConfig)
(Description
""
:> (Summary
"Put config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(Feature
MLSConfig)
:> Put
'[JSON]
(LockableFeature
MLSConfig)))))))))))))
:<|> Named
'("ipatch",
MLSConfig)
(Description
""
:> (Summary
"Patch config for mls"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MLSConfig)
:> Patch
'[JSON]
(LockableFeature
MLSConfig)))))))))))))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Get config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> Get
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))))))))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Put config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(Feature
ExposeInvitationURLsToTeamAdminConfig)
:> Put
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(Description
""
:> (Summary
"Patch config for exposeInvitationURLsToTeamAdmin"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("exposeInvitationURLsToTeamAdmin"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig)
:> Patch
'[JSON]
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig)))))))))))))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Get config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> Get
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig))))))))))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Put config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(Feature
OutlookCalIntegrationConfig)
:> Put
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(Description
""
:> (Summary
"Patch config for outlookCalIntegration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
OutlookCalIntegrationConfig)
:> Patch
'[JSON]
(LockableFeature
OutlookCalIntegrationConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Get config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> Get
'[JSON]
(LockableFeature
MlsE2EIdConfig))))))))))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Put config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(Feature
MlsE2EIdConfig)
:> Put
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(Description
""
:> (Summary
"Patch config for mlsE2EId"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsE2EIdConfig)
:> Patch
'[JSON]
(LockableFeature
MlsE2EIdConfig)))))))))))))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(Description
""
:> (Summary
"Get config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> Get
'[JSON]
(LockableFeature
MlsMigrationConfig))))))))))
:<|> (Named
'("iput",
MlsMigrationConfig)
(Description
""
:> (Summary
"Put config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(Feature
MlsMigrationConfig)
:> Put
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(Description
""
:> (Summary
"Patch config for mlsMigration"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
MlsMigrationConfig)
:> Patch
'[JSON]
(LockableFeature
MlsMigrationConfig)))))))))))))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Get config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> Get
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig))))))))))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Put config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(Feature
EnforceFileDownloadLocationConfig)
:> Put
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (Summary
"Patch config for enforceFileDownloadLocation"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
EnforceFileDownloadLocationConfig)
:> Patch
'[JSON]
(LockableFeature
EnforceFileDownloadLocationConfig)))))))))))))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Get config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> Get
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Put config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(Feature
LimitedEventFanoutConfig)
:> Put
'[JSON]
(LockableFeature
LimitedEventFanoutConfig)))))))))))))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(Description
""
:> (Summary
"Patch config for limitedEventFanout"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (CanThrow
TeamFeatureError
:> (CanThrowMany
'[]
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("limitedEventFanout"
:> (ReqBody
'[JSON]
(LockableFeaturePatch
LimitedEventFanoutConfig)
:> Patch
'[JSON]
(LockableFeature
LimitedEventFanoutConfig))))))))))))))))))))))))))))))))))
:<|> (Named
'("ilock", FileSharingConfig)
(Summary
"(Un-)lock fileSharing"
:> (Description ""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("fileSharing"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(Summary
"(Un-)lock conferenceCalling"
:> (Description ""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conferenceCalling"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(Summary
"(Un-)lock selfDeletingMessages"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("selfDeletingMessages"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
GuestLinksConfig)
(Summary
"(Un-)lock conversationGuestLinks"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("conversationGuestLinks"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(Summary
"(Un-)lock sndFactorPasswordChallenge"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("sndFactorPasswordChallenge"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MLSConfig)
(Summary
"(Un-)lock mls"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mls"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(Summary
"(Un-)lock outlookCalIntegration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("outlookCalIntegration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(Summary
"(Un-)lock mlsE2EId"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsE2EId"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
MlsMigrationConfig)
(Summary
"(Un-)lock mlsMigration"
:> (Description
""
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("mlsMigration"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(Summary
"(Un-)lock enforceFileDownloadLocation"
:> (Description
"<p><b>Custom feature: only supported on some dedicated on-prem systems.</b></p>"
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> ("teams"
:> (Capture
"tid"
TeamId
:> ("features"
:> ("enforceFileDownloadLocation"
:> (Capture
"lockStatus"
LockStatus
:> Put
'[JSON]
LockStatusResponse)))))))))
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(Summary
"Get team feature status in bulk for feature searchVisibilityInbound"
:> ("features-multi-teams"
:> ("searchVisibilityInbound"
:> (ReqBody
'[JSON]
TeamFeatureNoConfigMultiRequest
:> Post
'[JSON]
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig)))))
:<|> Named
"feature-configs-internal"
(Summary
"Get all feature configs (for user/team; if n/a fall back to site config)."
:> ("feature-configs"
:> (CanThrow
OperationDenied
:> (CanThrow
'NotATeamMember
:> (CanThrow
'TeamNotFound
:> (QueryParam'
'[Optional,
Strict,
Description
"Optional user id"]
"user_id"
UserId
:> Get
'[JSON]
AllTeamFeatures))))))))))))))))))
:<|> (IFederationAPI
:<|> (IConversationAPI
:<|> IEJPDAPI)))))))))))))
'[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,
HashPassword, Error InvalidInput, Error InternalError,
Error FederationError, Async, Delay, Fail, Embed IO,
Error JSONResponse, Resource, Final IO]
API InternalAPI GalleyEffects
internalAPI
(Named "status" (Handler ())
:<|> (Named
"delete-user"
(QualifiedWithTag 'QLocal UserId -> Maybe ConnId -> Handler ())
:<|> (Named
"connect"
(QualifiedWithTag 'QLocal UserId
-> Maybe ConnId
-> Connect
-> Handler (ResponseForExistedCreated Conversation))
:<|> (Named
"get-conversation-clients" (GroupId -> Handler ClientList)
:<|> (Named
"guard-legalhold-policy-conflicts"
(GuardLegalholdPolicyConflicts -> Handler ())
:<|> ((TeamId
-> Named "set-team-legalhold-whitelisted" (Handler ())
:<|> (Named "unset-team-legalhold-whitelisted" (Handler ())
:<|> Named
"get-team-legalhold-whitelisted" (Handler Bool)))
:<|> ((TeamId
-> Named "get-team-internal" (Handler TeamData)
:<|> (Named
"create-binding-team"
(UserId -> NewTeam -> Handler TeamId)
:<|> (Named
"delete-binding-team" (Bool -> Handler ())
:<|> (Named "get-team-name" (Handler TeamName)
:<|> (Named
"update-team-status"
(TeamStatusUpdate -> Handler ())
:<|> ((Named
"unchecked-add-team-member"
(NewTeamMember
-> Handler ())
:<|> (Named
"unchecked-get-team-members"
(Maybe
(Range
1
HardTruncationLimit
Int32)
-> Handler
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(UserId
-> Handler
TeamMember)
:<|> (Named
"can-user-join-team"
(Handler
())
:<|> Named
"unchecked-update-team-member"
(NewTeamMember
-> Handler
())))))
:<|> (Named
"user-is-team-owner"
(UserId
-> Handler ())
:<|> (Named
"get-search-visibility-internal"
(Handler
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(TeamSearchVisibilityView
-> Handler
())))))))))
:<|> ((Named
"get-team-members" (UserId -> Handler TeamMemberList)
:<|> (Named "get-team-id" (UserId -> Handler TeamId)
:<|> (Named
"test-get-clients"
(UserId -> Handler [ClientId])
:<|> (Named
"test-add-client"
(UserId -> ClientId -> Handler ())
:<|> (Named
"test-delete-client"
(UserId
-> ClientId -> Handler ())
:<|> (Named
"add-service"
(Service -> Handler ())
:<|> (Named
"delete-service"
(ServiceRef
-> Handler ())
:<|> (Named
"i-add-bot"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> AddBot
-> Handler
Event)
:<|> (Named
"delete-bot"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> RemoveBot
-> Handler
(UpdateResult
Event))
:<|> (Named
"put-custom-backend"
(Domain
-> CustomBackend
-> Handler
())
:<|> Named
"delete-custom-backend"
(Domain
-> Handler
())))))))))))
:<|> (Named
"upsert-one2one"
(UpsertOne2OneConversationRequest -> Handler ())
:<|> ((((Named
'("iget", LegalholdConfig)
(TeamId
-> Handler
(LockableFeature LegalholdConfig))
:<|> (Named
'("iput", LegalholdConfig)
(TeamId
-> Feature LegalholdConfig
-> Handler
(LockableFeature
LegalholdConfig))
:<|> Named
'("ipatch", LegalholdConfig)
(TeamId
-> LockableFeaturePatch
LegalholdConfig
-> Handler
(LockableFeature
LegalholdConfig))))
:<|> ((Named
'("iget", SSOConfig)
(TeamId
-> Handler
(LockableFeature SSOConfig))
:<|> (Named
'("iput", SSOConfig)
(TeamId
-> Feature SSOConfig
-> Handler
(LockableFeature
SSOConfig))
:<|> Named
'("ipatch", SSOConfig)
(TeamId
-> LockableFeaturePatch
SSOConfig
-> Handler
(LockableFeature
SSOConfig))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(TeamId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(TeamId
-> Feature
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(TeamId
-> LockableFeaturePatch
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(TeamId
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(TeamId
-> Feature
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(TeamId
-> LockableFeaturePatch
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(TeamId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(TeamId
-> Feature
ValidateSAMLEmailsConfig
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(TeamId
-> LockableFeaturePatch
ValidateSAMLEmailsConfig
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(TeamId
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(TeamId
-> Feature
DigitalSignaturesConfig
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(TeamId
-> LockableFeaturePatch
DigitalSignaturesConfig
-> Handler
(LockableFeature
DigitalSignaturesConfig))))
:<|> ((Named
'("iget",
AppLockConfig)
(TeamId
-> Handler
(LockableFeature
AppLockConfig))
:<|> (Named
'("iput",
AppLockConfig)
(TeamId
-> Feature
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig))
:<|> Named
'("ipatch",
AppLockConfig)
(TeamId
-> LockableFeaturePatch
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig))))
:<|> ((Named
'("iget",
FileSharingConfig)
(TeamId
-> Handler
(LockableFeature
FileSharingConfig))
:<|> (Named
'("iput",
FileSharingConfig)
(TeamId
-> Feature
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig))
:<|> Named
'("ipatch",
FileSharingConfig)
(TeamId
-> LockableFeaturePatch
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(TeamId
-> Handler
(LockableFeature
ClassifiedDomainsConfig))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(TeamId
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(TeamId
-> Feature
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(TeamId
-> LockableFeaturePatch
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(TeamId
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(TeamId
-> Feature
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(TeamId
-> LockableFeaturePatch
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(TeamId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> (Named
'("iput",
GuestLinksConfig)
(TeamId
-> Feature
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> Named
'("ipatch",
GuestLinksConfig)
(TeamId
-> LockableFeaturePatch
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(TeamId
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(TeamId
-> Feature
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(TeamId
-> LockableFeaturePatch
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))))
:<|> ((Named
'("iget",
MLSConfig)
(TeamId
-> Handler
(LockableFeature
MLSConfig))
:<|> (Named
'("iput",
MLSConfig)
(TeamId
-> Feature
MLSConfig
-> Handler
(LockableFeature
MLSConfig))
:<|> Named
'("ipatch",
MLSConfig)
(TeamId
-> LockableFeaturePatch
MLSConfig
-> Handler
(LockableFeature
MLSConfig))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> Feature
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(TeamId
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(TeamId
-> Feature
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(TeamId
-> LockableFeaturePatch
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(TeamId
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(TeamId
-> Feature
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(TeamId
-> LockableFeaturePatch
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(TeamId
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> (Named
'("iput",
MlsMigrationConfig)
(TeamId
-> Feature
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(TeamId
-> LockableFeaturePatch
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(TeamId
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(TeamId
-> Feature
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(TeamId
-> LockableFeaturePatch
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(TeamId
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(TeamId
-> Feature
LimitedEventFanoutConfig
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(TeamId
-> LockableFeaturePatch
LimitedEventFanoutConfig
-> Handler
(LockableFeature
LimitedEventFanoutConfig)))))))))))))))))))))))
:<|> (Named
'("ilock", FileSharingConfig)
(TeamId
-> LockStatus
-> Handler LockStatusResponse)
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
GuestLinksConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MLSConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MlsMigrationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(TeamFeatureNoConfigMultiRequest
-> Handler
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig))
:<|> Named
"feature-configs-internal"
(Maybe
UserId
-> Handler
AllTeamFeatures)))))))))))))
:<|> (Named
"get-federation-status"
(QualifiedWithTag 'QLocal UserId
-> RemoteDomains
-> Handler FederationStatus)
:<|> ((Named
"conversation-get-member"
(ConvId
-> UserId
-> Handler (Maybe Member))
:<|> (Named
"conversation-accept-v2"
(QualifiedWithTag
'QLocal UserId
-> Maybe ConnId
-> ConvId
-> Handler
Conversation)
:<|> (Named
"conversation-block-unqualified"
(UserId
-> ConvId
-> Handler ())
:<|> (Named
"conversation-block"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> Handler
())
:<|> (Named
"conversation-unblock-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> ConvId
-> Handler
Conversation)
:<|> (Named
"conversation-unblock"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> Qualified
ConvId
-> Handler
())
:<|> (Named
"conversation-meta"
(ConvId
-> Handler
ConversationMetadata)
:<|> (Named
"conversation-mls-one-to-one"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Conversation)
:<|> Named
"conversation-mls-one-to-one-established"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Bool)))))))))
:<|> Named
"get-conversations-by-user"
(UserId
-> Handler
[EJPDConvInfo])))))))))))))
-> ((Named
"on-conversation-created"
(Domain -> ConversationCreated ConvId -> Handler EmptyResponse)
:<|> (Named
"get-conversations@v1"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponse)
:<|> (Named
"get-conversations"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponseV2)
:<|> (Named
"leave-conversation"
(Domain
-> LeaveConversationRequest -> Handler LeaveConversationResponse)
:<|> (Named
"send-message"
(Domain
-> ProteusMessageSendRequest -> Handler MessageSendResponse)
:<|> (Named
"update-conversation"
(Domain
-> ConversationUpdateRequest
-> Handler ConversationUpdateResponse)
:<|> (Named
"mls-welcome"
(Domain
-> MLSWelcomeRequest -> Handler MLSWelcomeResponse)
:<|> (Named
"send-mls-message"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"send-mls-commit-bundle"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"query-group-info"
(Domain
-> GetGroupInfoRequest
-> Handler GetGroupInfoResponse)
:<|> (Named
"update-typing-indicator"
(Domain
-> TypingDataUpdateRequest
-> Handler
TypingDataUpdateResponse)
:<|> (Named
"on-typing-indicator-updated"
(Domain
-> TypingDataUpdated
-> Handler EmptyResponse)
:<|> (Named
"get-sub-conversation"
(Domain
-> GetSubConversationsRequest
-> Handler
GetSubConversationsResponse)
:<|> (Named
"delete-sub-conversation"
(Domain
-> DeleteSubConversationFedRequest
-> Handler
DeleteSubConversationResponse)
:<|> (Named
"leave-sub-conversation"
(Domain
-> LeaveSubConversationRequest
-> Handler
LeaveSubConversationResponse)
:<|> (Named
"get-one2one-conversation@v1"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponse)
:<|> (Named
"get-one2one-conversation"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponseV2)
:<|> (Named
"on-client-removed"
(Domain
-> ClientRemovedRequest
-> Handler
EmptyResponse)
:<|> (Named
"on-message-sent"
(Domain
-> RemoteMessage
ConvId
-> Handler
EmptyResponse)
:<|> (Named
"on-mls-message-sent"
(Domain
-> RemoteMLSMessage
-> Handler
EmptyResponse)
:<|> (Named
(Versioned
'V0
"on-conversation-updated")
(Domain
-> ConversationUpdateV0
-> Handler
EmptyResponse)
:<|> (Named
"on-conversation-updated"
(Domain
-> ConversationUpdate
-> Handler
EmptyResponse)
:<|> Named
"on-user-deleted-conversations"
(Domain
-> UserDeletedConversationsNotification
-> Handler
EmptyResponse)))))))))))))))))))))))
:<|> Tagged Handler Application)
-> (Named "status" (Handler ())
:<|> (Named
"delete-user"
(QualifiedWithTag 'QLocal UserId -> Maybe ConnId -> Handler ())
:<|> (Named
"connect"
(QualifiedWithTag 'QLocal UserId
-> Maybe ConnId
-> Connect
-> Handler (ResponseForExistedCreated Conversation))
:<|> (Named
"get-conversation-clients" (GroupId -> Handler ClientList)
:<|> (Named
"guard-legalhold-policy-conflicts"
(GuardLegalholdPolicyConflicts -> Handler ())
:<|> ((TeamId
-> Named "set-team-legalhold-whitelisted" (Handler ())
:<|> (Named "unset-team-legalhold-whitelisted" (Handler ())
:<|> Named
"get-team-legalhold-whitelisted" (Handler Bool)))
:<|> ((TeamId
-> Named "get-team-internal" (Handler TeamData)
:<|> (Named
"create-binding-team"
(UserId -> NewTeam -> Handler TeamId)
:<|> (Named
"delete-binding-team" (Bool -> Handler ())
:<|> (Named
"get-team-name" (Handler TeamName)
:<|> (Named
"update-team-status"
(TeamStatusUpdate
-> Handler ())
:<|> ((Named
"unchecked-add-team-member"
(NewTeamMember
-> Handler ())
:<|> (Named
"unchecked-get-team-members"
(Maybe
(Range
1
HardTruncationLimit
Int32)
-> Handler
TeamMemberList)
:<|> (Named
"unchecked-get-team-member"
(UserId
-> Handler
TeamMember)
:<|> (Named
"can-user-join-team"
(Handler
())
:<|> Named
"unchecked-update-team-member"
(NewTeamMember
-> Handler
())))))
:<|> (Named
"user-is-team-owner"
(UserId
-> Handler ())
:<|> (Named
"get-search-visibility-internal"
(Handler
TeamSearchVisibilityView)
:<|> Named
"set-search-visibility-internal"
(TeamSearchVisibilityView
-> Handler
())))))))))
:<|> ((Named
"get-team-members"
(UserId -> Handler TeamMemberList)
:<|> (Named "get-team-id" (UserId -> Handler TeamId)
:<|> (Named
"test-get-clients"
(UserId -> Handler [ClientId])
:<|> (Named
"test-add-client"
(UserId
-> ClientId -> Handler ())
:<|> (Named
"test-delete-client"
(UserId
-> ClientId -> Handler ())
:<|> (Named
"add-service"
(Service
-> Handler ())
:<|> (Named
"delete-service"
(ServiceRef
-> Handler ())
:<|> (Named
"i-add-bot"
(QualifiedWithTag
'QLocal
UserId
-> ConnId
-> AddBot
-> Handler
Event)
:<|> (Named
"delete-bot"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> RemoveBot
-> Handler
(UpdateResult
Event))
:<|> (Named
"put-custom-backend"
(Domain
-> CustomBackend
-> Handler
())
:<|> Named
"delete-custom-backend"
(Domain
-> Handler
())))))))))))
:<|> (Named
"upsert-one2one"
(UpsertOne2OneConversationRequest
-> Handler ())
:<|> ((((Named
'("iget", LegalholdConfig)
(TeamId
-> Handler
(LockableFeature
LegalholdConfig))
:<|> (Named
'("iput", LegalholdConfig)
(TeamId
-> Feature LegalholdConfig
-> Handler
(LockableFeature
LegalholdConfig))
:<|> Named
'("ipatch",
LegalholdConfig)
(TeamId
-> LockableFeaturePatch
LegalholdConfig
-> Handler
(LockableFeature
LegalholdConfig))))
:<|> ((Named
'("iget", SSOConfig)
(TeamId
-> Handler
(LockableFeature
SSOConfig))
:<|> (Named
'("iput", SSOConfig)
(TeamId
-> Feature SSOConfig
-> Handler
(LockableFeature
SSOConfig))
:<|> Named
'("ipatch",
SSOConfig)
(TeamId
-> LockableFeaturePatch
SSOConfig
-> Handler
(LockableFeature
SSOConfig))))
:<|> ((Named
'("iget",
SearchVisibilityAvailableConfig)
(TeamId
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> (Named
'("iput",
SearchVisibilityAvailableConfig)
(TeamId
-> Feature
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))
:<|> Named
'("ipatch",
SearchVisibilityAvailableConfig)
(TeamId
-> LockableFeaturePatch
SearchVisibilityAvailableConfig
-> Handler
(LockableFeature
SearchVisibilityAvailableConfig))))
:<|> ((Named
'("iget",
SearchVisibilityInboundConfig)
(TeamId
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> (Named
'("iput",
SearchVisibilityInboundConfig)
(TeamId
-> Feature
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))
:<|> Named
'("ipatch",
SearchVisibilityInboundConfig)
(TeamId
-> LockableFeaturePatch
SearchVisibilityInboundConfig
-> Handler
(LockableFeature
SearchVisibilityInboundConfig))))
:<|> ((Named
'("iget",
ValidateSAMLEmailsConfig)
(TeamId
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> (Named
'("iput",
ValidateSAMLEmailsConfig)
(TeamId
-> Feature
ValidateSAMLEmailsConfig
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))
:<|> Named
'("ipatch",
ValidateSAMLEmailsConfig)
(TeamId
-> LockableFeaturePatch
ValidateSAMLEmailsConfig
-> Handler
(LockableFeature
ValidateSAMLEmailsConfig))))
:<|> ((Named
'("iget",
DigitalSignaturesConfig)
(TeamId
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> (Named
'("iput",
DigitalSignaturesConfig)
(TeamId
-> Feature
DigitalSignaturesConfig
-> Handler
(LockableFeature
DigitalSignaturesConfig))
:<|> Named
'("ipatch",
DigitalSignaturesConfig)
(TeamId
-> LockableFeaturePatch
DigitalSignaturesConfig
-> Handler
(LockableFeature
DigitalSignaturesConfig))))
:<|> ((Named
'("iget",
AppLockConfig)
(TeamId
-> Handler
(LockableFeature
AppLockConfig))
:<|> (Named
'("iput",
AppLockConfig)
(TeamId
-> Feature
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig))
:<|> Named
'("ipatch",
AppLockConfig)
(TeamId
-> LockableFeaturePatch
AppLockConfig
-> Handler
(LockableFeature
AppLockConfig))))
:<|> ((Named
'("iget",
FileSharingConfig)
(TeamId
-> Handler
(LockableFeature
FileSharingConfig))
:<|> (Named
'("iput",
FileSharingConfig)
(TeamId
-> Feature
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig))
:<|> Named
'("ipatch",
FileSharingConfig)
(TeamId
-> LockableFeaturePatch
FileSharingConfig
-> Handler
(LockableFeature
FileSharingConfig))))
:<|> (Named
'("iget",
ClassifiedDomainsConfig)
(TeamId
-> Handler
(LockableFeature
ClassifiedDomainsConfig))
:<|> ((Named
'("iget",
ConferenceCallingConfig)
(TeamId
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> (Named
'("iput",
ConferenceCallingConfig)
(TeamId
-> Feature
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig))
:<|> Named
'("ipatch",
ConferenceCallingConfig)
(TeamId
-> LockableFeaturePatch
ConferenceCallingConfig
-> Handler
(LockableFeature
ConferenceCallingConfig))))
:<|> ((Named
'("iget",
SelfDeletingMessagesConfig)
(TeamId
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> (Named
'("iput",
SelfDeletingMessagesConfig)
(TeamId
-> Feature
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))
:<|> Named
'("ipatch",
SelfDeletingMessagesConfig)
(TeamId
-> LockableFeaturePatch
SelfDeletingMessagesConfig
-> Handler
(LockableFeature
SelfDeletingMessagesConfig))))
:<|> ((Named
'("iget",
GuestLinksConfig)
(TeamId
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> (Named
'("iput",
GuestLinksConfig)
(TeamId
-> Feature
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig))
:<|> Named
'("ipatch",
GuestLinksConfig)
(TeamId
-> LockableFeaturePatch
GuestLinksConfig
-> Handler
(LockableFeature
GuestLinksConfig))))
:<|> ((Named
'("iget",
SndFactorPasswordChallengeConfig)
(TeamId
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> (Named
'("iput",
SndFactorPasswordChallengeConfig)
(TeamId
-> Feature
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))
:<|> Named
'("ipatch",
SndFactorPasswordChallengeConfig)
(TeamId
-> LockableFeaturePatch
SndFactorPasswordChallengeConfig
-> Handler
(LockableFeature
SndFactorPasswordChallengeConfig))))
:<|> ((Named
'("iget",
MLSConfig)
(TeamId
-> Handler
(LockableFeature
MLSConfig))
:<|> (Named
'("iput",
MLSConfig)
(TeamId
-> Feature
MLSConfig
-> Handler
(LockableFeature
MLSConfig))
:<|> Named
'("ipatch",
MLSConfig)
(TeamId
-> LockableFeaturePatch
MLSConfig
-> Handler
(LockableFeature
MLSConfig))))
:<|> ((Named
'("iget",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> (Named
'("iput",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> Feature
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))
:<|> Named
'("ipatch",
ExposeInvitationURLsToTeamAdminConfig)
(TeamId
-> LockableFeaturePatch
ExposeInvitationURLsToTeamAdminConfig
-> Handler
(LockableFeature
ExposeInvitationURLsToTeamAdminConfig))))
:<|> ((Named
'("iget",
OutlookCalIntegrationConfig)
(TeamId
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> (Named
'("iput",
OutlookCalIntegrationConfig)
(TeamId
-> Feature
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))
:<|> Named
'("ipatch",
OutlookCalIntegrationConfig)
(TeamId
-> LockableFeaturePatch
OutlookCalIntegrationConfig
-> Handler
(LockableFeature
OutlookCalIntegrationConfig))))
:<|> ((Named
'("iget",
MlsE2EIdConfig)
(TeamId
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> (Named
'("iput",
MlsE2EIdConfig)
(TeamId
-> Feature
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))
:<|> Named
'("ipatch",
MlsE2EIdConfig)
(TeamId
-> LockableFeaturePatch
MlsE2EIdConfig
-> Handler
(LockableFeature
MlsE2EIdConfig))))
:<|> ((Named
'("iget",
MlsMigrationConfig)
(TeamId
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> (Named
'("iput",
MlsMigrationConfig)
(TeamId
-> Feature
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig))
:<|> Named
'("ipatch",
MlsMigrationConfig)
(TeamId
-> LockableFeaturePatch
MlsMigrationConfig
-> Handler
(LockableFeature
MlsMigrationConfig))))
:<|> ((Named
'("iget",
EnforceFileDownloadLocationConfig)
(TeamId
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> (Named
'("iput",
EnforceFileDownloadLocationConfig)
(TeamId
-> Feature
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))
:<|> Named
'("ipatch",
EnforceFileDownloadLocationConfig)
(TeamId
-> LockableFeaturePatch
EnforceFileDownloadLocationConfig
-> Handler
(LockableFeature
EnforceFileDownloadLocationConfig))))
:<|> (Named
'("iget",
LimitedEventFanoutConfig)
(TeamId
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> (Named
'("iput",
LimitedEventFanoutConfig)
(TeamId
-> Feature
LimitedEventFanoutConfig
-> Handler
(LockableFeature
LimitedEventFanoutConfig))
:<|> Named
'("ipatch",
LimitedEventFanoutConfig)
(TeamId
-> LockableFeaturePatch
LimitedEventFanoutConfig
-> Handler
(LockableFeature
LimitedEventFanoutConfig)))))))))))))))))))))))
:<|> (Named
'("ilock", FileSharingConfig)
(TeamId
-> LockStatus
-> Handler LockStatusResponse)
:<|> (Named
'("ilock",
ConferenceCallingConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
SelfDeletingMessagesConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
GuestLinksConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
SndFactorPasswordChallengeConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MLSConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
OutlookCalIntegrationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MlsE2EIdConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
MlsMigrationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("ilock",
EnforceFileDownloadLocationConfig)
(TeamId
-> LockStatus
-> Handler
LockStatusResponse)
:<|> (Named
'("igetmulti",
SearchVisibilityInboundConfig)
(TeamFeatureNoConfigMultiRequest
-> Handler
(TeamFeatureNoConfigMultiResponse
SearchVisibilityInboundConfig))
:<|> Named
"feature-configs-internal"
(Maybe
UserId
-> Handler
AllTeamFeatures)))))))))))))
:<|> (Named
"get-federation-status"
(QualifiedWithTag 'QLocal UserId
-> RemoteDomains
-> Handler FederationStatus)
:<|> ((Named
"conversation-get-member"
(ConvId
-> UserId
-> Handler (Maybe Member))
:<|> (Named
"conversation-accept-v2"
(QualifiedWithTag
'QLocal UserId
-> Maybe ConnId
-> ConvId
-> Handler
Conversation)
:<|> (Named
"conversation-block-unqualified"
(UserId
-> ConvId
-> Handler ())
:<|> (Named
"conversation-block"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
ConvId
-> Handler
())
:<|> (Named
"conversation-unblock-unqualified"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> ConvId
-> Handler
Conversation)
:<|> (Named
"conversation-unblock"
(QualifiedWithTag
'QLocal
UserId
-> Maybe
ConnId
-> Qualified
ConvId
-> Handler
())
:<|> (Named
"conversation-meta"
(ConvId
-> Handler
ConversationMetadata)
:<|> (Named
"conversation-mls-one-to-one"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Conversation)
:<|> Named
"conversation-mls-one-to-one-established"
(QualifiedWithTag
'QLocal
UserId
-> Qualified
UserId
-> Handler
Bool)))))))))
:<|> Named
"get-conversations-by-user"
(UserId
-> Handler
[EJPDConvInfo])))))))))))))
:<|> ((Named
"on-conversation-created"
(Domain -> ConversationCreated ConvId -> Handler EmptyResponse)
:<|> (Named
"get-conversations@v1"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponse)
:<|> (Named
"get-conversations"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponseV2)
:<|> (Named
"leave-conversation"
(Domain
-> LeaveConversationRequest -> Handler LeaveConversationResponse)
:<|> (Named
"send-message"
(Domain
-> ProteusMessageSendRequest -> Handler MessageSendResponse)
:<|> (Named
"update-conversation"
(Domain
-> ConversationUpdateRequest
-> Handler ConversationUpdateResponse)
:<|> (Named
"mls-welcome"
(Domain
-> MLSWelcomeRequest -> Handler MLSWelcomeResponse)
:<|> (Named
"send-mls-message"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"send-mls-commit-bundle"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"query-group-info"
(Domain
-> GetGroupInfoRequest
-> Handler GetGroupInfoResponse)
:<|> (Named
"update-typing-indicator"
(Domain
-> TypingDataUpdateRequest
-> Handler
TypingDataUpdateResponse)
:<|> (Named
"on-typing-indicator-updated"
(Domain
-> TypingDataUpdated
-> Handler
EmptyResponse)
:<|> (Named
"get-sub-conversation"
(Domain
-> GetSubConversationsRequest
-> Handler
GetSubConversationsResponse)
:<|> (Named
"delete-sub-conversation"
(Domain
-> DeleteSubConversationFedRequest
-> Handler
DeleteSubConversationResponse)
:<|> (Named
"leave-sub-conversation"
(Domain
-> LeaveSubConversationRequest
-> Handler
LeaveSubConversationResponse)
:<|> (Named
"get-one2one-conversation@v1"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponse)
:<|> (Named
"get-one2one-conversation"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponseV2)
:<|> (Named
"on-client-removed"
(Domain
-> ClientRemovedRequest
-> Handler
EmptyResponse)
:<|> (Named
"on-message-sent"
(Domain
-> RemoteMessage
ConvId
-> Handler
EmptyResponse)
:<|> (Named
"on-mls-message-sent"
(Domain
-> RemoteMLSMessage
-> Handler
EmptyResponse)
:<|> (Named
(Versioned
'V0
"on-conversation-updated")
(Domain
-> ConversationUpdateV0
-> Handler
EmptyResponse)
:<|> (Named
"on-conversation-updated"
(Domain
-> ConversationUpdate
-> Handler
EmptyResponse)
:<|> Named
"on-user-deleted-conversations"
(Domain
-> UserDeletedConversationsNotification
-> Handler
EmptyResponse)))))))))))))))))))))))
:<|> Tagged Handler Application)
forall a b. a -> b -> a :<|> b
:<|> forall {k} (api :: k) (m :: * -> *) (n :: * -> *).
HasServer api '[Domain] =>
(forall x. m x -> n x) -> ServerT api m -> ServerT api n
forall api (m :: * -> *) (n :: * -> *).
HasServer api '[Domain] =>
(forall x. m x -> n x) -> ServerT api m -> ServerT api n
hoistServerWithDomain @FederationAPI (Env -> Sem GalleyEffects x -> Handler x
forall a. Env -> Sem GalleyEffects a -> Handler a
toServantHandler Env
e) ServerT
FederationAPI
(Sem
'[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,
HashPassword, Error InvalidInput, Error InternalError,
Error FederationError, Async, Delay, Fail, Embed IO,
Error JSONResponse, Resource, Final IO])
ServerT FederationAPI (Sem GalleyEffects)
federationSitemap
(Named
"on-conversation-created"
(Domain -> ConversationCreated ConvId -> Handler EmptyResponse)
:<|> (Named
"get-conversations@v1"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponse)
:<|> (Named
"get-conversations"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponseV2)
:<|> (Named
"leave-conversation"
(Domain
-> LeaveConversationRequest -> Handler LeaveConversationResponse)
:<|> (Named
"send-message"
(Domain
-> ProteusMessageSendRequest -> Handler MessageSendResponse)
:<|> (Named
"update-conversation"
(Domain
-> ConversationUpdateRequest
-> Handler ConversationUpdateResponse)
:<|> (Named
"mls-welcome"
(Domain -> MLSWelcomeRequest -> Handler MLSWelcomeResponse)
:<|> (Named
"send-mls-message"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"send-mls-commit-bundle"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"query-group-info"
(Domain
-> GetGroupInfoRequest
-> Handler GetGroupInfoResponse)
:<|> (Named
"update-typing-indicator"
(Domain
-> TypingDataUpdateRequest
-> Handler TypingDataUpdateResponse)
:<|> (Named
"on-typing-indicator-updated"
(Domain
-> TypingDataUpdated
-> Handler EmptyResponse)
:<|> (Named
"get-sub-conversation"
(Domain
-> GetSubConversationsRequest
-> Handler
GetSubConversationsResponse)
:<|> (Named
"delete-sub-conversation"
(Domain
-> DeleteSubConversationFedRequest
-> Handler
DeleteSubConversationResponse)
:<|> (Named
"leave-sub-conversation"
(Domain
-> LeaveSubConversationRequest
-> Handler
LeaveSubConversationResponse)
:<|> (Named
"get-one2one-conversation@v1"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponse)
:<|> (Named
"get-one2one-conversation"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponseV2)
:<|> (Named
"on-client-removed"
(Domain
-> ClientRemovedRequest
-> Handler
EmptyResponse)
:<|> (Named
"on-message-sent"
(Domain
-> RemoteMessage
ConvId
-> Handler
EmptyResponse)
:<|> (Named
"on-mls-message-sent"
(Domain
-> RemoteMLSMessage
-> Handler
EmptyResponse)
:<|> (Named
(Versioned
'V0
"on-conversation-updated")
(Domain
-> ConversationUpdateV0
-> Handler
EmptyResponse)
:<|> (Named
"on-conversation-updated"
(Domain
-> ConversationUpdate
-> Handler
EmptyResponse)
:<|> Named
"on-user-deleted-conversations"
(Domain
-> UserDeletedConversationsNotification
-> Handler
EmptyResponse)))))))))))))))))))))))
-> Tagged Handler Application
-> (Named
"on-conversation-created"
(Domain -> ConversationCreated ConvId -> Handler EmptyResponse)
:<|> (Named
"get-conversations@v1"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponse)
:<|> (Named
"get-conversations"
(Domain
-> GetConversationsRequest -> Handler GetConversationsResponseV2)
:<|> (Named
"leave-conversation"
(Domain
-> LeaveConversationRequest -> Handler LeaveConversationResponse)
:<|> (Named
"send-message"
(Domain
-> ProteusMessageSendRequest -> Handler MessageSendResponse)
:<|> (Named
"update-conversation"
(Domain
-> ConversationUpdateRequest
-> Handler ConversationUpdateResponse)
:<|> (Named
"mls-welcome"
(Domain
-> MLSWelcomeRequest -> Handler MLSWelcomeResponse)
:<|> (Named
"send-mls-message"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"send-mls-commit-bundle"
(Domain
-> MLSMessageSendRequest
-> Handler MLSMessageResponse)
:<|> (Named
"query-group-info"
(Domain
-> GetGroupInfoRequest
-> Handler GetGroupInfoResponse)
:<|> (Named
"update-typing-indicator"
(Domain
-> TypingDataUpdateRequest
-> Handler
TypingDataUpdateResponse)
:<|> (Named
"on-typing-indicator-updated"
(Domain
-> TypingDataUpdated
-> Handler EmptyResponse)
:<|> (Named
"get-sub-conversation"
(Domain
-> GetSubConversationsRequest
-> Handler
GetSubConversationsResponse)
:<|> (Named
"delete-sub-conversation"
(Domain
-> DeleteSubConversationFedRequest
-> Handler
DeleteSubConversationResponse)
:<|> (Named
"leave-sub-conversation"
(Domain
-> LeaveSubConversationRequest
-> Handler
LeaveSubConversationResponse)
:<|> (Named
"get-one2one-conversation@v1"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponse)
:<|> (Named
"get-one2one-conversation"
(Domain
-> GetOne2OneConversationRequest
-> Handler
GetOne2OneConversationResponseV2)
:<|> (Named
"on-client-removed"
(Domain
-> ClientRemovedRequest
-> Handler
EmptyResponse)
:<|> (Named
"on-message-sent"
(Domain
-> RemoteMessage
ConvId
-> Handler
EmptyResponse)
:<|> (Named
"on-mls-message-sent"
(Domain
-> RemoteMLSMessage
-> Handler
EmptyResponse)
:<|> (Named
(Versioned
'V0
"on-conversation-updated")
(Domain
-> ConversationUpdateV0
-> Handler
EmptyResponse)
:<|> (Named
"on-conversation-updated"
(Domain
-> ConversationUpdate
-> Handler
EmptyResponse)
:<|> Named
"on-user-deleted-conversations"
(Domain
-> UserDeletedConversationsNotification
-> Handler
EmptyResponse)))))))))))))))))))))))
:<|> Tagged Handler Application
forall a b. a -> b -> a :<|> b
:<|> Application -> Tagged Handler Application
forall {k} (s :: k) b. b -> Tagged s b
Tagged Application
fallback
)
Request
r
Response -> IO ResponseReceived
cont
closeApp :: Env -> IO ()
closeApp :: Env -> IO ()
closeApp Env
env = do
ClientState -> IO ()
forall (m :: * -> *). MonadIO m => ClientState -> m ()
shutdown (Env
env Env -> Getting ClientState Env ClientState -> ClientState
forall s a. s -> Getting a s a -> a
^. Getting ClientState Env ClientState
Lens' Env ClientState
cstate)
customFormatters :: Servant.ErrorFormatters
customFormatters :: ErrorFormatters
customFormatters =
ErrorFormatters
defaultErrorFormatters
{ bodyParserErrorFormatter = bodyParserErrorFormatter'
}
bodyParserErrorFormatter' :: Servant.ErrorFormatter
bodyParserErrorFormatter' :: ErrorFormatter
bodyParserErrorFormatter' TypeRep
_ Request
_ String
errMsg =
Servant.ServerError
{ errHTTPCode :: Int
Servant.errHTTPCode = Status -> Int
HTTP.statusCode Status
HTTP.status400,
errReasonPhrase :: String
Servant.errReasonPhrase = ByteString -> String
UTF8.toString (ByteString -> String) -> ByteString -> String
forall a b. (a -> b) -> a -> b
$ Status -> ByteString
HTTP.statusMessage Status
HTTP.status400,
errBody :: LByteString
Servant.errBody =
Value -> LByteString
forall a. ToJSON a => a -> LByteString
Aeson.encode (Value -> LByteString) -> Value -> LByteString
forall a b. (a -> b) -> a -> b
$
[Pair] -> Value
Aeson.object
[ Key
"code" Key -> Value -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
Aeson..= Scientific -> Value
Aeson.Number Scientific
400,
Key
"message" Key -> String -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
Aeson..= String
errMsg,
Key
"label" Key -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
forall v. ToJSON v => Key -> v -> Pair
Aeson..= (Text
"bad-request" :: Text)
],
errHeaders :: ResponseHeaders
Servant.errHeaders = [(HeaderName
HTTP.hContentType, MediaType -> ByteString
forall h. RenderHeader h => h -> ByteString
HTTPMedia.renderHeader (Proxy JSON -> MediaType
forall {k} (ctype :: k). Accept ctype => Proxy ctype -> MediaType
Servant.contentType (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @Servant.JSON)))]
}
type CombinedAPI =
GalleyAPI
:<|> InternalAPI
:<|> FederationAPI
:<|> Raw
refreshMetrics :: App ()
refreshMetrics :: App ()
refreshMetrics = do
Queue DeleteItem
q <- Getting (Queue DeleteItem) Env (Queue DeleteItem)
-> App (Queue DeleteItem)
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting (Queue DeleteItem) Env (Queue DeleteItem)
Lens' Env (Queue DeleteItem)
deleteQueue
String -> App () -> App ()
safeForever String
"refreshMetrics" (App () -> App ()) -> App () -> App ()
forall a b. (a -> b) -> a -> b
$ do
Word
n <- Queue DeleteItem -> App Word
forall (m :: * -> *) a. MonadIO m => Queue a -> m Word
Q.len Queue DeleteItem
q
Gauge -> Double -> App ()
forall (m :: * -> *). MonadMonitor m => Gauge -> Double -> m ()
Prom.setGauge Gauge
deleteQueueLengthGauge (Word -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
n)
Int -> App ()
forall (m :: * -> *). MonadIO m => Int -> m ()
threadDelay Int
1000000
{-# NOINLINE deleteQueueLengthGauge #-}
deleteQueueLengthGauge :: Prom.Gauge
deleteQueueLengthGauge :: Gauge
deleteQueueLengthGauge =
Metric Gauge -> Gauge
forall s. Metric s -> s
Prom.unsafeRegister (Metric Gauge -> Gauge) -> Metric Gauge -> Gauge
forall a b. (a -> b) -> a -> b
$
Info -> Metric Gauge
Prom.gauge
Prom.Info
{ metricName :: Text
Prom.metricName = Text
"galley_deletequeue_len",
metricHelp :: Text
Prom.metricHelp = Text
"Length of the galley delete queue"
}
collectAuthMetrics :: (MonadIO m) => AWS.Env -> m ()
collectAuthMetrics :: forall (m :: * -> *). MonadIO m => Env -> m ()
collectAuthMetrics Env
env = do
IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$
IO () -> IO ()
forall (f :: * -> *) a b. Applicative f => f a -> f b
forever (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
Maybe NominalDiffTime
mbRemaining <- Env -> IO (Maybe NominalDiffTime)
readAuthExpiration Env
env
Maybe NominalDiffTime -> IO ()
gaugeTokenRemaing Maybe NominalDiffTime
mbRemaining
Int -> IO ()
forall (m :: * -> *). MonadIO m => Int -> m ()
threadDelay Int
1_000_000