/** * Resilience Service * * Unified service for managing healthchecks, quotas, and fallbacks. * Provides a code-first API for building resilient integrations. */ import { IResilienceServiceConfig, IResilienceDefineOptions, IHealthcheckSchema, IQuotaSchema, IFallbackSchema } from './types'; import { HealthcheckService, HealthcheckError } from './healthcheck.service'; import { QuotaService, QuotaError } from './quota.service'; import { FallbackService, FallbackError } from './fallback.service'; /** * Error class for resilience operations */ export declare class ResilienceError extends Error { code: string; details?: unknown; constructor(message: string, code: string, details?: unknown); } /** * Combined resilience definition result */ export interface IDefinedResilience { tag: string; name?: string; description?: string; healthchecks: IHealthcheckSchema[]; quotas: IQuotaSchema[]; fallbacks: IFallbackSchema[]; } /** * Resilience Service * * Unified API for managing all resilience components: * - Healthchecks: Monitor provider availability * - Quotas: Distribute load across providers * - Fallbacks: Automatic failover on failures * * @example * ```ts * import { ResilienceService } from '@ductape/sdk'; * * const resilience = new ResilienceService({ * workspace_id: 'workspace-id', * public_key: 'public-key', * user_id: 'user-id', * token: 'token', * env_type: 'prd', * }); * * // Access individual services * const healthcheck = await resilience.healthcheck.define({ ... }); * const quota = await resilience.quota.define({ ... }); * const fallback = await resilience.fallback.define({ ... }); * * // Or define combined resilience * const combined = await resilience.define({ * tag: 'payment-resilience', * handler: async (ctx) => { * ctx.healthcheck('stripe-health').probe().app('stripe').action('health'); * ctx.quota('payment-quota', { input: { amount: { type: 'number' } } }) * .provider('stripe').weight(70).app('stripe').action('charge'); * }, * }); * ``` */ export declare class ResilienceService { /** * Healthcheck service instance */ readonly healthcheck: HealthcheckService; /** * Quota service instance */ readonly quota: QuotaService; /** * Fallback service instance */ readonly fallback: FallbackService; private config; constructor(config: IResilienceServiceConfig & { private_key: string; access_key: string; }); /** * Define combined resilience configuration * * Use this to define healthchecks, quotas, and fallbacks together. */ define(options: IResilienceDefineOptions): Promise; /** * Register all resilience components with a product */ register(product: string, resilience: IDefinedResilience): Promise; } export default ResilienceService; export { HealthcheckService, HealthcheckError }; export { QuotaService, QuotaError }; export { FallbackService, FallbackError };