RaxolGateway

Unified messaging gateway for Raxol: one supervised daemon connects many chat platforms through a single adapter contract, with process-per-chat sessions, unified session keying, and DM pairing authorization.

Installation

def deps do
  [{:raxol_gateway, "~> 0.2"}]
end

Start the daemon under your supervisor with the handler each chat session runs:

children = [
  {Raxol.Gateway.Supervisor,
   handler: {MyApp.ChatHandler, []}, adapter: {MyApp.Adapter, conn}}
]

MyApp.ChatHandler implements Raxol.Gateway.Handler; MyApp.Adapter implements Raxol.Gateway.Adapter, and conn is what its connect/1 returned.

Pieces

A session optionally records each inbound event and each successfully delivered outbound reply to a :log (any append(server, conversation_id, items), e.g. Conversation.Log) keyed by a stable conversation_id. Adapter errors, exceptions, and exits emit [:raxol_gateway, :session, :delivery_failed] and do not create phantom outbound history. SessionRouter.handoff/3 rebinds a conversation to another platform's route, reusing that conversation_id so the log resumes the same history.

Platform adapters