mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-05-02 02:38:38 +00:00
- Implemented githubTokensDb for managing GitHub tokens with CRUD operations. - Created otificationPreferencesDb to handle user notification preferences. - Added projectsDb for project path management and related operations. - Introduced pushSubscriptionsDb for managing browser push subscriptions. - Developed scanStateDb to track the last scanned timestamp. - Established sessionsDb for session management with CRUD functionalities. - Created userDb for user management, including authentication and onboarding. - Implemented apidKeysDb for storing and managing VAPID keys. feat(database): define schema for new database tables - Added SQL schema definitions for users, API keys, user credentials, notification preferences, VAPID keys, push subscriptions, projects, sessions, scan state, and app configuration. - Included necessary indexes for performance optimization. refactor(shared): enhance type definitions and utility functions - Updated shared types and interfaces for improved clarity and consistency. - Added new types for credential management and provider-specific operations. - Refined utility functions for better error handling and message normalization.
239 lines
6.1 KiB
TypeScript
239 lines
6.1 KiB
TypeScript
//----------------- HTTP RESPONSE SHAPES ------------
|
|
/**
|
|
* Canonical success envelope used by backend APIs that return a structured payload.
|
|
*
|
|
* Use this for route handlers that need a stable `success/data` shape so frontend
|
|
* consumers can parse responses consistently across endpoints.
|
|
*/
|
|
export type ApiSuccessShape<TData = unknown> = {
|
|
success: true;
|
|
data: TData;
|
|
};
|
|
|
|
/**
|
|
* Generic plain-object record used when parsing loosely typed JSON payloads.
|
|
*
|
|
* Use this only after runtime shape checks, not as a replacement for validated
|
|
* domain models.
|
|
*/
|
|
export type AnyRecord = Record<string, any>;
|
|
|
|
// ---------------------------
|
|
//----------------- PROVIDER MESSAGE MODEL ------------
|
|
/**
|
|
* Providers supported by the unified server runtime.
|
|
*
|
|
* Use this as the source of truth whenever a function or payload needs to identify
|
|
* a specific LLM integration.
|
|
*/
|
|
export type LLMProvider = 'claude' | 'codex' | 'gemini' | 'cursor';
|
|
|
|
/**
|
|
* Message/event variants emitted by provider adapters and normalized transports.
|
|
*
|
|
* Keep this union in sync with event kinds produced by provider session adapters.
|
|
*/
|
|
export type MessageKind =
|
|
| 'text'
|
|
| 'tool_use'
|
|
| 'tool_result'
|
|
| 'thinking'
|
|
| 'stream_delta'
|
|
| 'stream_end'
|
|
| 'error'
|
|
| 'complete'
|
|
| 'status'
|
|
| 'permission_request'
|
|
| 'permission_cancelled'
|
|
| 'session_created'
|
|
| 'interactive_prompt'
|
|
| 'task_notification';
|
|
|
|
/**
|
|
* Provider-neutral message envelope used in REST responses and realtime channels.
|
|
*
|
|
* Every provider-specific message must be converted into this shape before being
|
|
* emitted outside provider-specific modules.
|
|
*/
|
|
export type NormalizedMessage = {
|
|
id: string;
|
|
sessionId: string;
|
|
timestamp: string;
|
|
provider: LLMProvider;
|
|
kind: MessageKind;
|
|
role?: 'user' | 'assistant';
|
|
content?: string;
|
|
images?: unknown;
|
|
toolName?: string;
|
|
toolInput?: unknown;
|
|
toolId?: string;
|
|
toolResult?: {
|
|
content?: string;
|
|
isError?: boolean;
|
|
toolUseResult?: unknown;
|
|
};
|
|
isError?: boolean;
|
|
text?: string;
|
|
tokens?: number;
|
|
canInterrupt?: boolean;
|
|
requestId?: string;
|
|
input?: unknown;
|
|
context?: unknown;
|
|
reason?: string;
|
|
newSessionId?: string;
|
|
status?: string;
|
|
summary?: string;
|
|
tokenBudget?: unknown;
|
|
subagentTools?: unknown;
|
|
toolUseResult?: unknown;
|
|
sequence?: number;
|
|
rowid?: number;
|
|
[key: string]: unknown;
|
|
};
|
|
|
|
/**
|
|
* Shared options used to fetch historical provider messages.
|
|
*
|
|
* Consumers should pass provider-specific lookup hints (`projectName`, `projectPath`)
|
|
* only when the selected provider requires them.
|
|
*/
|
|
export type FetchHistoryOptions = {
|
|
projectName?: string;
|
|
projectPath?: string;
|
|
limit?: number | null;
|
|
offset?: number;
|
|
};
|
|
|
|
/**
|
|
* Standardized response payload returned from provider history readers.
|
|
*
|
|
* Use this as the contract for APIs that return paginated conversation history.
|
|
*/
|
|
export type FetchHistoryResult = {
|
|
messages: NormalizedMessage[];
|
|
total: number;
|
|
hasMore: boolean;
|
|
offset: number;
|
|
limit: number | null;
|
|
tokenUsage?: unknown;
|
|
};
|
|
|
|
// ---------------------------
|
|
//----------------- SHARED ERROR TYPES ------------
|
|
/**
|
|
* Optional metadata used when constructing application-level errors.
|
|
*
|
|
* `statusCode` should reflect the HTTP response status, while `code` identifies
|
|
* the stable machine-readable error category.
|
|
*/
|
|
export type AppErrorOptions = {
|
|
code?: string;
|
|
statusCode?: number;
|
|
details?: unknown;
|
|
};
|
|
|
|
// ---------------------------
|
|
//----------------- MCP TYPES ------------
|
|
/**
|
|
* Scope where an MCP server definition is stored and resolved.
|
|
*
|
|
* `user` is global for a user account, `local` is provider-local, and `project`
|
|
* is tied to a specific project path.
|
|
*/
|
|
export type McpScope = 'user' | 'local' | 'project';
|
|
|
|
/**
|
|
* Transport protocol used by an MCP server definition.
|
|
*/
|
|
export type McpTransport = 'stdio' | 'http' | 'sse';
|
|
|
|
/**
|
|
* Normalized MCP server model exposed to frontend and route handlers.
|
|
*
|
|
* Provider adapters should map provider-native config to this structure before
|
|
* returning results.
|
|
*/
|
|
export type ProviderMcpServer = {
|
|
provider: LLMProvider;
|
|
name: string;
|
|
scope: McpScope;
|
|
transport: McpTransport;
|
|
command?: string;
|
|
args?: string[];
|
|
env?: Record<string, string>;
|
|
cwd?: string;
|
|
url?: string;
|
|
headers?: Record<string, string>;
|
|
envVars?: string[];
|
|
bearerTokenEnvVar?: string;
|
|
envHttpHeaders?: Record<string, string>;
|
|
};
|
|
|
|
/**
|
|
* Payload for create/update MCP server operations.
|
|
*
|
|
* Routes and services should accept this type, validate it, and then persist it
|
|
* through provider-specific MCP repositories.
|
|
*/
|
|
export type UpsertProviderMcpServerInput = {
|
|
name: string;
|
|
scope?: McpScope;
|
|
transport: McpTransport;
|
|
workspacePath?: string;
|
|
command?: string;
|
|
args?: string[];
|
|
env?: Record<string, string>;
|
|
cwd?: string;
|
|
url?: string;
|
|
headers?: Record<string, string>;
|
|
envVars?: string[];
|
|
bearerTokenEnvVar?: string;
|
|
envHttpHeaders?: Record<string, string>;
|
|
};
|
|
|
|
// ---------------------------
|
|
//----------------- PROVIDER AUTH TYPES ------------
|
|
/**
|
|
* Authentication status result returned by provider health checks.
|
|
*
|
|
* This shape is consumed by settings/status endpoints to report installation and
|
|
* credential state for each provider.
|
|
*/
|
|
export type ProviderAuthStatus = {
|
|
installed: boolean;
|
|
provider: LLMProvider;
|
|
authenticated: boolean;
|
|
email: string | null;
|
|
method: string | null;
|
|
error?: string;
|
|
};
|
|
|
|
// ---------------------------
|
|
//----------------- SHARED DATABASE CREDENTIAL TYPES ------------
|
|
/**
|
|
* Safe credential view returned by credential listing APIs.
|
|
*
|
|
* This intentionally excludes the raw credential secret while still exposing
|
|
* metadata needed for UI rendering and management operations.
|
|
*/
|
|
export type CredentialPublicRow = {
|
|
id: number;
|
|
credential_name: string;
|
|
credential_type: string;
|
|
description: string | null;
|
|
created_at: string;
|
|
is_active: number;
|
|
};
|
|
|
|
/**
|
|
* Result returned after creating a credential record.
|
|
*
|
|
* Use this return shape when callers need the created id and display metadata,
|
|
* but must never receive the stored secret value.
|
|
*/
|
|
export type CreateCredentialResult = {
|
|
id: number | bigint;
|
|
credentialName: string;
|
|
credentialType: string;
|
|
};
|