@gftdcojp/ksqldb-orm
Version:
ksqldb-orm - Server-Side TypeScript ORM for ksqlDB with enterprise security extensions
244 lines • 7.32 kB
TypeScript
/**
* 基本型定義
*/
import { PullQueryOptions } from './ksqldb-client';
import { ColumnNameTransformConfig } from './utils/column-name-transform';
export interface ExecutionContext {
userId: string;
tenantId: string;
roles: string[];
[key: string]: any;
}
export interface KsqlDbConfig {
url: string;
apiKey?: string;
apiSecret?: string;
headers?: Record<string, string>;
resilience?: ResilienceConfig;
/** 列名変換設定 - KsqlDBの強制大文字化に対応 */
columnNameTransform?: ColumnNameTransformConfig;
}
export interface SchemaRegistryConfig {
url: string;
auth?: {
user: string;
pass: string;
};
apiKey?: string;
}
export interface OrmConfig {
ksql: KsqlDbConfig;
schemaRegistry: SchemaRegistryConfig;
}
/**
* ksqlDB のストリーム/テーブルの種類
*/
export declare enum StreamType {
STREAM = "STREAM",
TABLE = "TABLE",
MATERIALIZED_VIEW = "MATERIALIZED_VIEW"
}
export interface AvroSchema {
type: 'record';
name: string;
fields: AvroField[];
}
export interface AvroField {
name: string;
type: string | string[] | AvroComplexType;
default?: any;
}
export interface AvroComplexType {
type: string;
logicalType?: string;
[key: string]: any;
}
/**
* Materialized View 設定
*/
export interface MaterializedViewConfig {
sourceTable?: string;
sourceStream?: string;
query?: string;
groupBy?: string[];
aggregations?: Record<string, string>;
windowConfig?: {
type: 'TUMBLING' | 'HOPPING' | 'SESSION';
size: string;
advanceBy?: string;
};
refreshInterval?: number;
}
/**
* SQL オプション(拡張)
*/
export interface SqlOptions {
as?: string;
with?: Record<string, any>;
materializedView?: MaterializedViewConfig;
partitions?: number;
replicas?: number;
[key: string]: any;
}
export interface WhereCondition {
[field: string]: any | {
like?: string;
in?: any[];
gt?: any;
gte?: any;
lt?: any;
lte?: any;
eq?: any;
ne?: any;
};
}
export interface OrderByCondition {
[field: string]: 'asc' | 'desc';
}
export interface FindManyOptions {
where?: WhereCondition;
orderBy?: OrderByCondition;
limit?: number;
offset?: number;
}
export type PolicyFunction = (ctx: ExecutionContext) => string;
/**
* Resilience Configuration for partition rebalancing and error handling
*/
export interface ResilienceConfig {
/** Retry configuration */
retries?: RetryConfig;
/** Circuit breaker configuration */
circuitBreaker?: CircuitBreakerConfig;
/** Partition awareness configuration */
partitionAwareness?: PartitionAwarenessConfig;
/** Fallback strategies configuration */
fallback?: FallbackConfig;
/** Metrics collection configuration */
metrics?: MetricsConfig;
}
export interface RetryConfig {
/** Maximum number of retries (default: 5) */
maxRetries?: number;
/** Base delay between retries in milliseconds (default: 1500) */
baseDelay?: number;
/** Maximum delay between retries in milliseconds (default: 30000) */
maxDelay?: number;
/** Backoff strategy (default: 'exponential') */
backoffStrategy?: 'exponential' | 'linear' | 'fixed';
/** Jitter to add randomness to retry delays (default: 0.1) */
jitter?: number;
/** Retry only specific error types */
retryableErrors?: string[];
}
export interface CircuitBreakerConfig {
/** Whether circuit breaker is enabled (default: true) */
enabled?: boolean;
/** Failure threshold to open circuit (default: 5) */
failureThreshold?: number;
/** Time window for failure tracking in milliseconds (default: 60000) */
timeWindow?: number;
/** Time to wait before attempting to close circuit in milliseconds (default: 30000) */
openTimeout?: number;
/** Number of successful calls needed to close circuit (default: 2) */
successThreshold?: number;
}
export interface PartitionAwarenessConfig {
/** Whether partition awareness is enabled (default: true) */
enabled?: boolean;
/** Partition-specific error patterns to detect */
errorPatterns?: string[];
/** Timeout for partition rebalancing detection in milliseconds (default: 10000) */
rebalanceTimeout?: number;
}
export interface FallbackConfig {
/** Whether to fallback to HTTP when WebSocket fails (default: true) */
fallbackToHttp?: boolean;
/** Alternative endpoints to try */
alternativeEndpoints?: string[];
/** Timeout for fallback attempts in milliseconds (default: 5000) */
fallbackTimeout?: number;
}
export interface MetricsConfig {
/** Whether metrics collection is enabled (default: true) */
enabled?: boolean;
/** Metrics collection interval in milliseconds (default: 60000) */
interval?: number;
/** Custom metrics collector function */
collector?: (metrics: ResilienceMetrics) => void;
}
/**
* Resilience metrics data structure
*/
export interface ResilienceMetrics {
/** Total number of requests */
totalRequests: number;
/** Number of successful requests */
successfulRequests: number;
/** Number of failed requests */
failedRequests: number;
/** Number of retried requests */
retriedRequests: number;
/** Number of circuit breaker trips */
circuitBreakerTrips: number;
/** Number of fallback activations */
fallbackActivations: number;
/** Average response time in milliseconds */
averageResponseTime: number;
/** Partition rebalancing events detected */
partitionRebalanceEvents: number;
/** Timestamp of last update */
lastUpdated: Date;
}
/**
* Error types for resilience handling
*/
export declare enum ResilienceErrorType {
PARTITION_REBALANCING = "partition_rebalancing",
CONNECTION_TIMEOUT = "connection_timeout",
NETWORK_ERROR = "network_error",
SERVER_ERROR = "server_error",
UNKNOWN_ERROR = "unknown_error"
}
/**
* Circuit breaker states
*/
export declare enum CircuitBreakerState {
CLOSED = "closed",
OPEN = "open",
HALF_OPEN = "half_open"
}
/**
* Enhanced pull query options with resilience features
*/
export interface EnhancedPullQueryOptions extends PullQueryOptions {
/** Retry configuration for this specific query */
retries?: number;
/** Backoff strategy for this specific query */
backoffStrategy?: 'exponential' | 'linear' | 'fixed';
/** Whether to use HTTP fallback for this query */
fallbackToHttp?: boolean;
/** Custom timeout for this query in milliseconds */
timeout?: number;
}
/**
* Result wrapper with resilience information
*/
export interface ResilientQueryResult<T = any> {
/** Query result data */
data: T;
/** Error information if any */
error?: any;
/** Resilience metadata */
resilience: {
/** Number of retries attempted */
retryCount: number;
/** Whether fallback was used */
fallbackUsed: boolean;
/** Total execution time in milliseconds */
executionTime: number;
/** Circuit breaker state when query was executed */
circuitBreakerState: CircuitBreakerState;
};
}
//# sourceMappingURL=types.d.ts.map