arbiter-servant-0.1.0.0: Servant REST API for arbiter job queue
Safe HaskellNone
LanguageGHC2024

Arbiter.Servant.Server

Description

REST API server for the Arbiter job queue (SimpleDb backend).

Security: No built-in authentication. All endpoints are publicly accessible. Add auth middleware before exposing to untrusted networks.

Synopsis

Server handlers

arbiterServer :: forall (registry :: JobPayloadRegistry). BuildServer registry registry => ArbiterServerConfig registry -> ServerT (ArbiterAPI registry) Handler Source #

Complete Arbiter server at /api/v1/...

arbiterServerHoisted :: forall (registry :: JobPayloadRegistry) m. (BuildServer registry registry, HasServer (ArbiterAPI registry) ('[] :: [Type])) => (forall x. Handler x -> m x) -> ArbiterServerConfig registry -> ServerT (ArbiterAPI registry) m Source #

Hoisted server for integration into a route tree using a custom monad.

arbiterApp :: forall (registry :: JobPayloadRegistry). (BuildServer registry registry, HasServer (ArbiterAPI registry) ('[] :: [Type])) => ArbiterServerConfig registry -> Application Source #

Convert to WAI Application

runArbiterAPI :: forall (registry :: JobPayloadRegistry). (BuildServer registry registry, HasServer (ArbiterAPI registry) ('[] :: [Type])) => Port -> ArbiterServerConfig registry -> IO () Source #

Run the API server on a specific port.

Uses setTimeout 0 (no idle timeout) so that SSE streaming connections are not killed by Warp.

data ArbiterServerConfig (registry :: JobPayloadRegistry) Source #

Configuration for the API server

Constructors

ArbiterServerConfig 

Fields

  • serverEnv :: SimpleEnv registry

    The SimpleEnv containing schema and connection pool

  • enableSSE :: Bool

    Enable Server-Sent Events streaming endpoint. When False, the /events/stream endpoint returns a single "disabled" event and closes immediately, avoiding long-lived connections. The admin UI falls back to polling-only mode. Default: True.

initArbiterServer :: forall (registry :: JobPayloadRegistry). Proxy registry -> ByteString -> Text -> IO (ArbiterServerConfig registry) Source #

Create an ArbiterServerConfig with its own internal connection pool.

Note: Use runMigrationsForRegistry with enableEventStreaming = True to set up the database triggers for SSE.

class BuildServer (registry :: JobPayloadRegistry) (reg :: [(Symbol, Type)]) where Source #

Type class to build server implementations for registry entries

Methods

buildServer :: ArbiterServerConfig registry -> ServerT (RegistryToAPI reg) Handler Source #

Instances

Instances details
RegistryTables registry => BuildServer registry ('[] :: [(Symbol, Type)]) Source # 
Instance details

Defined in Arbiter.Servant.Server

Methods

buildServer :: ArbiterServerConfig registry -> ServerT (RegistryToAPI ('[] :: [(Symbol, Type)])) Handler Source #

(BuildServer registry (nextTable ': moreRest), JobPayload payload, KnownSymbol tableName) => BuildServer registry ('(tableName, payload) ': (nextTable ': moreRest)) Source # 
Instance details

Defined in Arbiter.Servant.Server

Methods

buildServer :: ArbiterServerConfig registry -> ServerT (RegistryToAPI ('(tableName, payload) ': (nextTable ': moreRest))) Handler Source #

(JobPayload payload, KnownSymbol tableName, RegistryTables registry) => BuildServer registry '['(tableName, payload)] Source # 
Instance details

Defined in Arbiter.Servant.Server

Methods

buildServer :: ArbiterServerConfig registry -> ServerT (RegistryToAPI '['(tableName, payload)]) Handler Source #