-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Types describing the core and extended Avers APIs
--
-- See README
@package avers-api
@version 0.0.5
module Avers.API
-- | The Core API to manipulate objects, patches, releases etc.
type AversCoreAPI = ("objects" :> (Credentials :> (ReqBody '[JSON] CreateObjectBody :> Post '[JSON] CreateObjectResponse))) :<|> (("objects" :> (Capture "objId" ObjId :> (Credentials :> (CacheValidationToken :> Get '[JSON] (Cacheable LookupObjectResponse))))) :<|> (("objects" :> (Capture "objId" ObjId :> (Credentials :> (ReqBody '[JSON] PatchObjectBody :> Patch '[JSON] PatchObjectResponse)))) :<|> (("objects" :> (Capture "objId" ObjId :> (Credentials :> Delete '[JSON] ()))) :<|> (("objects" :> (Capture "objId" ObjId :> ("patches" :> (Capture "revId" RevId :> (Credentials :> (CacheValidationToken :> Get '[JSON] (Cacheable LookupPatchResponse))))))) :<|> (("objects" :> (Capture "objId" ObjId :> ("changes" :> (Credentials :> Raw)))) :<|> (("objects" :> (Capture "objId" ObjId :> ("releases" :> (Credentials :> (ReqBody '[JSON] CreateReleaseBody :> Post '[JSON] CreateReleaseResponse))))) :<|> (("objects" :> (Capture "objId" ObjId :> ("releases" :> (Capture "revId" RevId :> (Credentials :> (CacheValidationToken :> Get '[JSON] (Cacheable LookupReleaseResponse))))))) :<|> (("objects" :> (Capture "objId" ObjId :> ("releases" :> ("_latest" :> (Credentials :> (CacheValidationToken :> Get '[JSON] (Cacheable LookupLatestReleaseResponse))))))) :<|> (("feed" :> (Credentials :> Raw)) :<|> ("secret" :> (Credentials :> (ReqBody '[JSON] ChangeSecretBody :> Post '[] ()))))))))))))
-- | API to create and maintain sessions. Also contains API to change the
-- secret, which is part of the session code.
type AversSessionAPI = ("session" :> (ReqBody '[JSON] CreateSessionBody :> Post '[JSON] (Headers '[Header "Set-Cookie" SetCookie] CreateSessionResponse))) :<|> (("session" :> (SessionId :> Get '[JSON] (Headers '[Header "Set-Cookie" SetCookie] LookupSessionResponse))) :<|> ("session" :> (SessionId :> Delete '[JSON] (Headers '[Header "Set-Cookie" SetCookie] ()))))
-- | API to manange blobs
type AversBlobAPI = ("blobs" :> (Header "Content-Type" Text :> (ReqBody '[OctetStream] ByteString :> Post '[JSON] UploadBlobResponse))) :<|> (("blobs" :> (Capture "blobId" BlobId :> Get '[JSON] LookupBlobResponse)) :<|> ("blobs" :> (Capture "blobId" BlobId :> ("content" :> Get '[OctetStream] (Headers '[Header "Content-Type" Text] ByteString)))))
-- | API to manage accounts. These are optional and not really part of
-- Avers, but many applications do have a concept of a user or account,
-- some person which is using the API.
type AversAccountAPI = "signup" :> (ReqBody '[JSON] SignupBody :> Post '[JSON] SignupResponse)
-- | The cache validator token when passed in the request. The server will
-- use it to determine if the cached response on the client can be reused
-- or not.
type CacheValidationToken = Header "If-None-Match" Text
-- | Includes Cache-Control and ETag headers in the
-- response to mark it as cacheable by the client.
type Cacheable a = Headers '[Header "Cache-Control" Text, Header "ETag" Text] a
data CreateObjectBody
CreateObjectBody :: !Text -> !Value -> CreateObjectBody
[cobType] :: CreateObjectBody -> !Text
[cobContent] :: CreateObjectBody -> !Value
data CreateObjectResponse
CreateObjectResponse :: !ObjId -> !Text -> !Value -> CreateObjectResponse
[corId] :: CreateObjectResponse -> !ObjId
[corType] :: CreateObjectResponse -> !Text
[corContent] :: CreateObjectResponse -> !Value
data LookupObjectResponse
LookupObjectResponse :: !ObjId -> !Text -> !UTCTime -> !ObjId -> !RevId -> !Value -> LookupObjectResponse
[lorId] :: LookupObjectResponse -> !ObjId
[lorType] :: LookupObjectResponse -> !Text
[lorCreatedAt] :: LookupObjectResponse -> !UTCTime
[lorCreatedBy] :: LookupObjectResponse -> !ObjId
[lorRevisionId] :: LookupObjectResponse -> !RevId
[lorContent] :: LookupObjectResponse -> !Value
data PatchObjectBody
PatchObjectBody :: !RevId -> ![Operation] -> PatchObjectBody
-- | The RevId against which the client created the operations. This
-- may be a bit behind if some other client submitted patches in
-- parallel.
[pobRevisionId] :: PatchObjectBody -> !RevId
-- | The operations which the client wants to store in the database.
[pobOperations] :: PatchObjectBody -> ![Operation]
data PatchObjectResponse
PatchObjectResponse :: ![Patch] -> !Int -> ![Patch] -> PatchObjectResponse
-- | Patches which were already in the database. The submitted ops were
-- rebased on top of these.
[porPreviousPatches] :: PatchObjectResponse -> ![Patch]
-- | The number of operations which were processed. This may be smaller
-- than the number of submitted ops if the processing failed somewhere in
-- the middle. The client can then decide what to do with those which
-- were not accepted.
[porNumProcessedOperations] :: PatchObjectResponse -> !Int
-- | Out of the submitted operations, these are the patches which were
-- actually applied and stored in the database. This list may be shorter
-- if some operations were dropped (because redundant or conflicting).
[porResultingPatches] :: PatchObjectResponse -> ![Patch]
data ObjectChangeNotification
-- | A new patch was created.
PatchNotification :: !Patch -> ObjectChangeNotification
type LookupPatchResponse = Patch
data CreateReleaseBody
CreateReleaseBody :: CreateReleaseBody
data CreateReleaseResponse
CreateReleaseResponse :: CreateReleaseResponse
data LookupReleaseResponse
LookupReleaseResponse :: LookupReleaseResponse
data LookupLatestReleaseResponse
LookupLatestReleaseResponse :: LookupLatestReleaseResponse
data CreateSessionBody
CreateSessionBody :: !SecretId -> !Text -> CreateSessionBody
[csbLogin] :: CreateSessionBody -> !SecretId
[csbSecret] :: CreateSessionBody -> !Text
data CreateSessionResponse
CreateSessionResponse :: !SessionId -> !ObjId -> CreateSessionResponse
[csrSessionId] :: CreateSessionResponse -> !SessionId
[csrSessionObjId] :: CreateSessionResponse -> !ObjId
data LookupSessionResponse
LookupSessionResponse :: !SessionId -> !ObjId -> LookupSessionResponse
[lsrSessionId] :: LookupSessionResponse -> !SessionId
[lsrSessionObjId] :: LookupSessionResponse -> !ObjId
data ChangeFeedSubscription
IncludeObjectChanges :: ObjId -> ChangeFeedSubscription
data ChangeSecretBody
ChangeSecretBody :: !Text -> ChangeSecretBody
[csbNewSecret] :: ChangeSecretBody -> !Text
data UploadBlobResponse
UploadBlobResponse :: UploadBlobResponse
data LookupBlobResponse
LookupBlobResponse :: LookupBlobResponse
data SignupBody
SignupBody :: SignupBody
data SignupResponse
SignupResponse :: SignupResponse
-- | Credentials are used to authenticate the client. It can be a SessionId
-- (extracted from the session cookie).
--
-- Later we may add support for token based authentication. Then we
-- extend this into a sumtype covering all the possible ways how
-- credentials can be passed along with the request.
data Credentials
SessionIdCredential :: !SessionId -> Credentials