Skip to content

Chat Server

Defined in: chat/server/adapter-pool.ts:48

Lazy adapter pool with concurrent dedup and eviction. Thread-safe: concurrent getAdapter() calls for the same backend share a single creation promise.

T extends PooledAdapter = PooledAdapter

new AdapterPool<T>(options): AdapterPool<T>

Defined in: chat/server/adapter-pool.ts:54

AdapterPoolOptions<T>

AdapterPool<T>

get activeBackends(): string[]

Defined in: chat/server/adapter-pool.ts:108

Get all backend names with cached adapters.

string[]

dispose(): Promise<void>

Defined in: chat/server/adapter-pool.ts:113

Dispose all cached adapters and mark pool as unusable.

Promise<void>

evict(backend): Promise<void>

Defined in: chat/server/adapter-pool.ts:94

Evict (dispose and remove) the cached adapter for a backend. Use after token rotation to force re-creation on next getAdapter().

string

Promise<void>

getAdapter(backend): Promise<T>

Defined in: chat/server/adapter-pool.ts:63

Get or create an adapter for the given backend. Concurrent calls for the same backend share one creation promise. Failed creations are NOT cached — next call retries.

string

Promise<T>

has(backend): boolean

Defined in: chat/server/adapter-pool.ts:103

Check if a backend has a cached adapter.

string

boolean


Defined in: chat/server/utils.ts:8

Error thrown by readBody with an HTTP status code

  • Error

new BodyParseError(message, statusCode): BodyParseError

Defined in: chat/server/utils.ts:10

string

number

BodyParseError

Error.constructor

readonly statusCode: number

Defined in: chat/server/utils.ts:9


Defined in: chat/server/provider-store.ts:58

Filesystem-based provider store using JSON files (one per provider)

new FileProviderStore(options): FileProviderStore

Defined in: chat/server/provider-store.ts:61

FileProviderStoreOptions

FileProviderStore

create(config): Promise<void>

Defined in: chat/server/provider-store.ts:65

Create a new provider. Generates UUID if id not set on config.

ProviderConfig

Promise<void>

IProviderStore.create

delete(id): Promise<void>

Defined in: chat/server/provider-store.ts:90

Delete a provider by id.

string

Promise<void>

IProviderStore.delete

get(id): Promise<ProviderConfig | null>

Defined in: chat/server/provider-store.ts:72

Get a provider by id. Returns null if not found.

string

Promise<ProviderConfig | null>

IProviderStore.get

list(): Promise<ProviderConfig[]>

Defined in: chat/server/provider-store.ts:98

List all providers.

Promise<ProviderConfig[]>

IProviderStore.list

update(id, changes): Promise<void>

Defined in: chat/server/provider-store.ts:81

Update an existing provider. Throws if not found.

string

Partial<Omit<ProviderConfig, "id" | "createdAt">>

Promise<void>

IProviderStore.update


Defined in: chat/server/token-store.ts:64

Filesystem-based token store using JSON files (one per provider)

new FileTokenStore(options): FileTokenStore

Defined in: chat/server/token-store.ts:67

FileTokenStoreOptions

FileTokenStore

clear(provider): Promise<void>

Defined in: chat/server/token-store.ts:85

Remove a specific provider’s token.

string

Promise<void>

ITokenStore.clear

clearAll(): Promise<void>

Defined in: chat/server/token-store.ts:93

Remove all stored tokens.

Promise<void>

ITokenStore.clearAll

list(): Promise<string[]>

Defined in: chat/server/token-store.ts:106

List provider names that have saved tokens.

Promise<string[]>

ITokenStore.list

load(provider): Promise<AuthToken | null>

Defined in: chat/server/token-store.ts:76

Load a previously saved token. Returns null if not found.

string

Promise<AuthToken | null>

ITokenStore.load

save(provider, token): Promise<void>

Defined in: chat/server/token-store.ts:71

Save a token for a provider. Overwrites if exists.

string

AuthToken

Promise<void>

ITokenStore.save


Defined in: chat/server/provider-store.ts:19

In-memory provider store for testing and ephemeral use

new InMemoryProviderStore(): InMemoryProviderStore

InMemoryProviderStore

create(config): Promise<void>

Defined in: chat/server/provider-store.ts:22

Create a new provider. Generates UUID if id not set on config.

ProviderConfig

Promise<void>

IProviderStore.create

delete(id): Promise<void>

Defined in: chat/server/provider-store.ts:40

Delete a provider by id.

string

Promise<void>

IProviderStore.delete

get(id): Promise<ProviderConfig | null>

Defined in: chat/server/provider-store.ts:27

Get a provider by id. Returns null if not found.

string

Promise<ProviderConfig | null>

IProviderStore.get

list(): Promise<ProviderConfig[]>

Defined in: chat/server/provider-store.ts:44

List all providers.

Promise<ProviderConfig[]>

IProviderStore.list

update(id, changes): Promise<void>

Defined in: chat/server/provider-store.ts:32

Update an existing provider. Throws if not found.

string

Partial<Omit<ProviderConfig, "id" | "createdAt">>

Promise<void>

IProviderStore.update


Defined in: chat/server/token-store.ts:30

In-memory token store for testing and ephemeral use

new InMemoryTokenStore(): InMemoryTokenStore

InMemoryTokenStore

clear(provider): Promise<void>

Defined in: chat/server/token-store.ts:42

Remove a specific provider’s token.

string

Promise<void>

ITokenStore.clear

clearAll(): Promise<void>

Defined in: chat/server/token-store.ts:46

Remove all stored tokens.

Promise<void>

ITokenStore.clearAll

list(): Promise<string[]>

Defined in: chat/server/token-store.ts:50

List provider names that have saved tokens.

Promise<string[]>

ITokenStore.list

load(provider): Promise<AuthToken | null>

Defined in: chat/server/token-store.ts:37

Load a previously saved token. Returns null if not found.

string

Promise<AuthToken | null>

ITokenStore.load

save(provider, token): Promise<void>

Defined in: chat/server/token-store.ts:33

Save a token for a provider. Overwrites if exists.

string

AuthToken

Promise<void>

ITokenStore.save


Defined in: chat/server/service-manager.ts:59

Manages IAgentService lifecycle: create, cache, and dispose on re-auth or logout. Optionally starts background token refresh when refreshFactory is configured.

new ServiceManager(options): ServiceManager

Defined in: chat/server/service-manager.ts:64

ServiceManagerOptions

ServiceManager

get activeBackends(): string[]

Defined in: chat/server/service-manager.ts:126

Get all backend names with active services.

string[]

dispose(): Promise<void>

Defined in: chat/server/service-manager.ts:111

Dispose the ServiceManager — stops all refresh managers and disposes all services.

Promise<void>

getRefreshManager(backend): TokenRefreshManager | undefined

Defined in: chat/server/service-manager.ts:131

Get active refresh manager for a backend (for testing/introspection).

string

TokenRefreshManager | undefined

getService(backend): ManagedService | undefined

Defined in: chat/server/service-manager.ts:116

Get cached service for a backend (undefined if not authenticated).

string

ManagedService | undefined

handleAuth(backend, token): Promise<ManagedService>

Defined in: chat/server/service-manager.ts:73

Handle auth event: dispose old service (if any) and create new one. If the token is refreshable and refreshFactory is configured, starts a TokenRefreshManager that auto-refreshes and recreates the service.

string

AuthToken

Promise<ManagedService>

handleLogout(): Promise<void>

Defined in: chat/server/service-manager.ts:96

Handle logout: dispose all services, stop all refresh managers, clear cache.

Promise<void>

hasService(backend): boolean

Defined in: chat/server/service-manager.ts:121

Check if a service exists for the given backend.

string

boolean

Defined in: chat/server/adapter-pool.ts:39

Configuration for AdapterPool

T extends PooledAdapter = PooledAdapter

factory: AdapterFactory<T>

Defined in: chat/server/adapter-pool.ts:41

Factory to create an adapter for a backend. Called lazily on first getAdapter().


Defined in: chat/server/auth-handler.ts:55

Configuration for createAuthHandler

optional createClaudeAuth: () => IClaudeAuth

Defined in: chat/server/auth-handler.ts:61

Factory for creating ClaudeAuth instances

IClaudeAuth

optional createCopilotAuth: () => ICopilotAuth

Defined in: chat/server/auth-handler.ts:59

Factory for creating CopilotAuth instances

ICopilotAuth

optional maxBodySize: number

Defined in: chat/server/auth-handler.ts:69

Maximum request body size in bytes. Default: 1MB

optional onAuth: OnAuthCallback

Defined in: chat/server/auth-handler.ts:63

Called after successful authentication for any provider

optional onLogout: () => void | Promise<void>

Defined in: chat/server/auth-handler.ts:65

Called when dispose/logout is requested

void | Promise<void>

optional prefix: string

Defined in: chat/server/auth-handler.ts:67

Route prefix to strip from URL before matching. Default: ""

tokenStore: ITokenStore

Defined in: chat/server/auth-handler.ts:57

Token storage implementation


Defined in: chat/server/handler.ts:59

Configuration for createChatHandler

optional heartbeatMs: number

Defined in: chat/server/handler.ts:65

SSE heartbeat interval in milliseconds. 0 or undefined disables heartbeat.

optional hooks: ChatServerHooks

Defined in: chat/server/handler.ts:71

Consolidated server hooks.

optional maxBodySize: number

Defined in: chat/server/handler.ts:63

Maximum request body size in bytes. Default: 1MB (1048576)

optional prefix: string

Defined in: chat/server/handler.ts:61

Route prefix to strip from URL before matching. Default: "" (no prefix)

optional providerStore: IProviderStore

Defined in: chat/server/handler.ts:67

Optional provider store for provider CRUD routes.

optional tokenStore: ITokenStore

Defined in: chat/server/handler.ts:69

Optional token store for resolveRequestContext in /send.

optional transportFactory: TransportFactory

Defined in: chat/server/handler.ts:73

Custom transport factory for /send endpoint. Default: SSEChatTransport.


Defined in: chat/server/handler.ts:36

Server-side hooks for customizing chat handler behavior. Consolidates filter, guard, and lifecycle callbacks into a single interface.

optional filterModels(models): ModelInfo[]

Defined in: chat/server/handler.ts:38

Filter the model list before returning to client.

ModelInfo[]

ModelInfo[]

optional onBackendSwitch(backend): void | Promise<void>

Defined in: chat/server/handler.ts:44

Called before backend switch. Throw to reject.

string

void | Promise<void>

optional onBeforeSend(sessionId, message): void | Promise<void>

Defined in: chat/server/handler.ts:46

Called before sending a message. Throw to reject.

string

string

void | Promise<void>

optional onError(error, context): void

Defined in: chat/server/handler.ts:48

Global error handler for unhandled route errors.

Error

string

string

void

optional onModelSwitch(model): void | Promise<void>

Defined in: chat/server/handler.ts:40

Validate model selection on /model/switch and /send model override. Throw to reject.

string

void | Promise<void>

optional onProviderSwitch(info): void | Promise<void>

Defined in: chat/server/handler.ts:42

Called before provider switch. Receives providerId and resolved backend name. Throw to reject.

string

string

void | Promise<void>


Defined in: chat/server/chat-server.ts:39

Configuration for createChatServer

optional auth: AuthHandlerOptions

Defined in: chat/server/chat-server.ts:53

Auth handler options. If provided, auth routes are mounted.

optional authPrefix: string

Defined in: chat/server/chat-server.ts:56

Prefix for auth routes. Default: “/api/auth”

optional autoCreateProviders: boolean | Record<string, string>

Defined in: chat/server/chat-server.ts:91

Auto-create a default provider when a backend authenticates for the first time.

  • true — uses built-in default models per backend
  • Record<string, string> — custom backend→model mapping (e.g. { copilot: "gpt-5-mini" })
  • false / omitted — disabled

Requires both auth and providers to be configured.

optional chatHandlerOptions: Omit<ChatHandlerOptions, "prefix">

Defined in: chat/server/chat-server.ts:74

Chat handler options (maxBodySize, etc.)

optional chatPrefix: string

Defined in: chat/server/chat-server.ts:50

Prefix for chat API routes. Default: “/api/chat”

optional cors: false | CorsOptions

Defined in: chat/server/chat-server.ts:59

CORS options. Pass false to disable CORS. Default: enabled with permissive settings

optional healthPath: string | false

Defined in: chat/server/chat-server.ts:80

Path for the health check endpoint. Default: “/api/health”. Set to false to disable. Returns { ok: true }.

optional hooks: ChatServerHooks

Defined in: chat/server/chat-server.ts:47

Server-side hooks for customizing handler behavior.

optional providerPrefix: string

Defined in: chat/server/chat-server.ts:71

Prefix for provider routes. Default: “/api/providers”

optional providers: ProviderHandlerOptions

Defined in: chat/server/chat-server.ts:68

Provider handler options. If provided, provider routes are mounted.

optional runtime: IChatRuntime<Record<string, unknown>>

Defined in: chat/server/chat-server.ts:41

Pre-built runtime instance. Either runtime or runtimeConfig must be provided.

optional runtimeConfig: ChatRuntimeOptions

Defined in: chat/server/chat-server.ts:44

Config to auto-create a runtime. Used when runtime is not provided.

optional serviceManager: ServiceManager

Defined in: chat/server/chat-server.ts:100

Service lifecycle manager. When provided with auth, automatically wires:

  • onAuthserviceManager.handleAuth(backend, token) (creates/caches service)
  • onLogoutserviceManager.handleLogout() (disposes all services)

User’s own onAuth/onLogout callbacks in auth are still called first.

optional staticDir: string

Defined in: chat/server/chat-server.ts:62

Directory to serve static files from. Omit to disable static serving.

optional staticPrefix: string

Defined in: chat/server/chat-server.ts:65

Prefix for static file routes. Default: ”/“


Defined in: chat/server/cors.ts:8

Configuration for CORS middleware

optional headers: string[]

Defined in: chat/server/cors.ts:14

Allowed request headers. Default: [“Content-Type”]

optional maxAge: number

Defined in: chat/server/cors.ts:16

Max age for preflight cache in seconds. Default: 86400 (24h)

optional methods: string[]

Defined in: chat/server/cors.ts:12

Allowed HTTP methods. Default: common REST methods

optional origin: string | string[]

Defined in: chat/server/cors.ts:10

Allowed origins. Default: ”*” (any origin)


Defined in: chat/server/provider-store.ts:52

Options for FileProviderStore

directory: string

Defined in: chat/server/provider-store.ts:54

Directory to store provider JSON files


Defined in: chat/server/token-store.ts:58

Options for FileTokenStore

directory: string

Defined in: chat/server/token-store.ts:60

Directory to store token JSON files. Default: “.tokens” in cwd


Defined in: chat/server/routes/types.ts:17

Handler state — intentionally empty after stateless refactor (STAT-01). Preserved as a type for backward compatibility with custom route modules. Model resolution is now fully per-request via resolveRequestContext.

Will be removed in next major version.

optional currentModel: string

Defined in: chat/server/routes/types.ts:19

Model is now resolved per-request. This field is never set.


Defined in: chat/server/auth-handler.ts:38

Claude auth class interface (matches ClaudeAuth public API)

startOAuthFlow(options?): object

Defined in: chat/server/auth-handler.ts:39

string

string

object

authorizeUrl: string

completeAuth: (codeOrUrl) => Promise<ClaudeAuthToken>

string

Promise<ClaudeAuthToken>


Defined in: chat/server/auth-handler.ts:26

Copilot auth class interface (matches CopilotAuth public API)

startDeviceFlow(options?): Promise<{ userCode: string; verificationUrl: string; waitForToken: (signal?) => Promise<CopilotAuthToken>; }>

Defined in: chat/server/auth-handler.ts:27

string

AbortSignal

Promise<{ userCode: string; verificationUrl: string; waitForToken: (signal?) => Promise<CopilotAuthToken>; }>


Defined in: chat/server/token-store.ts:12

Token storage interface for server-side token management

clear(provider): Promise<void>

Defined in: chat/server/token-store.ts:18

Remove a specific provider’s token.

string

Promise<void>

clearAll(): Promise<void>

Defined in: chat/server/token-store.ts:20

Remove all stored tokens.

Promise<void>

optional dispose(): Promise<void>

Defined in: chat/server/token-store.ts:24

Release any resources held by this store (optional).

Promise<void>

list(): Promise<string[]>

Defined in: chat/server/token-store.ts:22

List provider names that have saved tokens.

Promise<string[]>

load(provider): Promise<AuthToken | null>

Defined in: chat/server/token-store.ts:16

Load a previously saved token. Returns null if not found.

string

Promise<AuthToken | null>

save(provider, token): Promise<void>

Defined in: chat/server/token-store.ts:14

Save a token for a provider. Overwrites if exists.

string

AuthToken

Promise<void>


Defined in: chat/server/service-manager.ts:28

Minimal IAgentService interface (avoids importing from main package)

dispose(): void | Promise<void>

Defined in: chat/server/service-manager.ts:29

void | Promise<void>


Defined in: chat/server/adapter-pool.ts:30

Minimal adapter interface (avoids importing full IChatBackend)

dispose(): void | Promise<void>

Defined in: chat/server/adapter-pool.ts:31

void | Promise<void>


Defined in: chat/server/provider-handler.ts:20

Configuration for createProviderHandler

providerStore: IProviderStore

Defined in: chat/server/provider-handler.ts:22

Provider storage implementation


Defined in: chat/server/handler.ts:20

Minimal readable request interface (node:http IncomingMessage subset)

readonly optional method: string

Defined in: chat/server/handler.ts:21

readonly optional url: string

Defined in: chat/server/handler.ts:22

on(event, listener): unknown

Defined in: chat/server/handler.ts:23

"data"

(chunk) => void

unknown

on(event, listener): unknown

Defined in: chat/server/handler.ts:24

"end"

() => void

unknown


Defined in: chat/server/request-context.ts:27

Per-request context carrying backend, credentials, and model

backend: string

Defined in: chat/server/request-context.ts:29

Backend name (e.g. “copilot”, “claude”, “vercel-ai”)

credentials: AuthToken

Defined in: chat/server/request-context.ts:31

Resolved authentication token

model: string

Defined in: chat/server/request-context.ts:33

Model identifier from provider config

provider: ProviderConfig

Defined in: chat/server/request-context.ts:35

Original provider config for reference


Defined in: chat/server/request-context.ts:39

Dependencies for context resolution

providerStore: IProviderStore

Defined in: chat/server/request-context.ts:41

Provider store to look up provider config

tokenStore: ITokenStore

Defined in: chat/server/request-context.ts:43

Token store to load credentials for the backend


Defined in: chat/server/routes/types.ts:25

Shared context passed to every route module.

readonly optional heartbeatMs: number

Defined in: chat/server/routes/types.ts:28

readonly optional hooks: ChatServerHooks

Defined in: chat/server/routes/types.ts:29

readonly maxBodySize: number

Defined in: chat/server/routes/types.ts:27

readonly optional providerStore: IProviderStore

Defined in: chat/server/routes/types.ts:30

readonly runtime: IChatRuntime

Defined in: chat/server/routes/types.ts:26

readonly state: HandlerState

Defined in: chat/server/routes/types.ts:33

readonly optional tokenStore: ITokenStore

Defined in: chat/server/routes/types.ts:31

readonly optional transportFactory: TransportFactory

Defined in: chat/server/routes/types.ts:32


Defined in: chat/server/service-manager.ts:36

Configuration for ServiceManager

createService: (backend, token) => ManagedService | Promise<ManagedService>

Defined in: chat/server/service-manager.ts:41

Factory to create a service for a backend. Called on every auth event (old service is disposed first).

string

AuthToken

ManagedService | Promise<ManagedService>

optional onTokenExpired: (backend) => void

Defined in: chat/server/service-manager.ts:52

Called when a token expires (before logout).

string

void

optional refreshFactory: RefreshFactory

Defined in: chat/server/service-manager.ts:48

Optional factory returning a refresh function per backend. If provided and the token has expiresIn, a TokenRefreshManager is started. On refresh → the stored token is updated and the service is recreated. On expiry → handleLogout() for that backend is called.

optional refreshOptions: Partial<Pick<TokenRefreshOptions, "maxRetries" | "refreshThreshold" | "retryDelayMs">>

Defined in: chat/server/service-manager.ts:50

Override TokenRefreshManager options (threshold, retries, etc.)

AdapterFactory<T> = (backend) => Promise<T>

Defined in: chat/server/adapter-pool.ts:35

Factory function to create an adapter for a given backend

T extends PooledAdapter = PooledAdapter

string

Promise<T>


AuthProvider = "copilot" | "claude" | "vercel-ai"

Defined in: chat/server/auth-handler.ts:23

Auth provider names recognized by the handler


ChatRuntimeConfig = ChatRuntimeOptions

Defined in: chat/server/chat-server.ts:36

Configuration for auto-creating a ChatRuntime from options. Alternative to providing a pre-built IChatRuntime instance. Uses the same shape as ChatRuntimeOptions from the runtime module.


OnAuthCallback = (provider, token) => void | Promise<void>

Defined in: chat/server/auth-handler.ts:49

Callback invoked after successful authentication

AuthProvider

AuthToken

void | Promise<void>


RefreshFactory = (backend) => (token) => Promise<AuthToken> | undefined

Defined in: chat/server/service-manager.ts:33

Callback for building a token refresh function per backend

string

(token) => Promise<AuthToken> | undefined


RequestHandler = (req, res) => Promise<void>

Defined in: chat/server/chat-server.ts:134

Request handler type returned by createChatServer

ReadableRequest

WritableResponse

Promise<void>


RouteHandler = (method, path, req, res, ctx) => Promise<boolean>

Defined in: chat/server/routes/types.ts:40

A route module handler. Returns true if the request was handled, false to try next module.

string

string

ReadableRequest

WritableResponse

RouteContext

Promise<boolean>


TransportFactory = (req, res) => IChatTransport

Defined in: chat/server/handler.ts:56

Factory for creating a chat transport for a /send request. Return an IChatTransport instance that will receive the event stream. Default: SSEChatTransport.

ReadableRequest

WritableResponse

IChatTransport

const configRoutes: RouteHandler

Defined in: chat/server/routes/config.ts:14


const DEFAULT_PROVIDER_MODELS: Record<string, string>

Defined in: chat/server/chat-server.ts:106

Default model per backend for auto-created providers


const messageRoutes: RouteHandler

Defined in: chat/server/routes/messages.ts:18


const providerRoutes: RouteHandler

Defined in: chat/server/routes/providers.ts:17


const sessionRoutes: RouteHandler

Defined in: chat/server/routes/sessions.ts:15

corsMiddleware(options?): (req, res) => boolean

Defined in: chat/server/cors.ts:39

Create a CORS middleware function.

CorsOptions

A function that sets CORS headers and handles OPTIONS preflight. Returns true if the request was fully handled (preflight), false if the caller should continue processing.

(req, res): boolean

CorsRequest

CorsResponse

boolean


createAuthHandler(options): (req, res) => Promise<void>

Defined in: chat/server/auth-handler.ts:104

Create an HTTP request handler for server-mediated authentication.

AuthHandlerOptions

Auth handler configuration (token store, auth factories, callbacks)

Async request handler (req, res) => Promise<void>

(req, res): Promise<void>

ReadableRequest

WritableResponse

Promise<void>

import { CopilotAuth, ClaudeAuth } from "@witqq/agent-sdk/auth";
const authHandler = createAuthHandler({
tokenStore: new FileTokenStore({ directory: ".tokens" }),
createCopilotAuth: () => new CopilotAuth(),
createClaudeAuth: () => new ClaudeAuth(),
onAuth: (provider, token) => {
// Rebuild runtime with new credentials
},
});

createChatHandler(runtime, options?): (req, res) => Promise<void>

Defined in: chat/server/handler.ts:94

Create an HTTP request handler that maps RemoteChatClient contract endpoints to IChatRuntime method calls.

Routes are handled by composable route modules (sessions, messages, config, providers). Model state is managed in a shared HandlerState object.

IChatRuntime

ChatHandlerOptions

(req, res): Promise<void>

ReadableRequest

WritableResponse

Promise<void>


createChatServer(options): RequestHandler

Defined in: chat/server/chat-server.ts:156

Create a combined HTTP request handler that routes to chat, auth, static, or 404.

ChatServerOptions

Server configuration

RequestHandler

Async request handler

import http from "node:http";
import { createChatServer } from "@witqq/agent-sdk/chat/server";
const handler = createChatServer({
runtime,
auth: { tokenStore },
staticDir: "./public",
});
http.createServer(handler).listen(3000);

createProviderHandler(options): (req, res) => Promise<void>

Defined in: chat/server/provider-handler.ts:33

Create an HTTP request handler for provider CRUD operations.

ProviderHandlerOptions

Provider handler configuration

Async request handler (req, res) => Promise<void>

(req, res): Promise<void>

ReadableRequest

WritableResponse

Promise<void>


json(res, data, status?): void

Defined in: chat/server/utils.ts:54

Send a JSON response with given status code.

WritableResponse

unknown

number = 200

void


readBody(req, maxSize?): Promise<Record<string, unknown>>

Defined in: chat/server/utils.ts:21

Read and parse JSON request body with size limit. Throws BodyParseError on oversized, malformed, or errored requests.

ReadableRequest

number = 1_048_576

Promise<Record<string, unknown>>


resolveRequestContext(providerId, deps): Promise<RequestContext>

Defined in: chat/server/request-context.ts:56

Resolve a providerId into a full RequestContext.

Flow: providerId → ProviderConfig (from providerStore) → AuthToken (from tokenStore) → RequestContext

string

RequestContextDeps

Promise<RequestContext>

ChatError with PROVIDER_NOT_FOUND if provider doesn’t exist

ChatError with AUTH_REQUIRED if no token found for the provider’s backend

Re-exports IProviderStore


Re-exports ProviderConfig


Re-exports WritableResponse