import type { ApiResponse, QueryParams } from "./base-client"; import { type SchemaValidationError } from "./shared"; /** * Minimal logger interface that services depend on */ export interface Logger { error: (...args: any[]) => void; warn: (...args: any[]) => void; info: (...args: any[]) => void; debug: (...args: any[]) => void; } /** * Error reporter interface for capturing exceptions */ export interface ErrorReporter { captureException: (error: unknown, context?: Record) => void; } /** * Dependencies that can be injected into services */ export interface ServiceDependencies { /** Logger instance - defaults to console */ logger?: Logger; /** Error reporter (e.g., Sentry) - defaults to no-op */ errorReporter?: ErrorReporter; /** Get the current ID token for authenticated requests */ getIdToken?: () => Promise; /** Get the current locale for i18n */ getLocale?: () => string; } export type Payload = { payload: T; }; export type Options = { options?: Partial; }; /** * API Client interface that services depend on */ export interface ApiClientInterface { baseUrl: string; api_key: string; get(endpoint: string, headers?: HeadersInit, params?: QueryParams): Promise>; post(endpoint: string, body: object, headers?: HeadersInit): Promise>; patch(endpoint: string, body: object, headers?: HeadersInit): Promise>; delete(endpoint: string, headers?: HeadersInit): Promise>; } export type CommonErrors = ["connection_failed", null] | ["schema_validation_error", SchemaValidationError] | ["internal_error", null]; export type ServiceResult = CommonErrors | (TError extends never ? never : [TError, { error_identifier: string; [key: string]: unknown; }]) | [null, TSuccess]; export declare abstract class BaseService { protected client: ApiClientInterface; protected logger: Logger; protected errorReporter: ErrorReporter; protected getIdToken: () => Promise; protected getLocale: () => string; constructor(client: ApiClientInterface, serviceName: string, deps?: ServiceDependencies); protected handleResponse(response: ApiResponse, handler: () => T): T | ["connection_failed", null] | ["schema_validation_error", SchemaValidationError] | ["internal_error", null]; protected buildAuthHeaders(headers: Record): HeadersInit | undefined; }