-- 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