Skip to content

microservices config

  • Source: src/config/microservices.ts

Usage

Import from the framework:

ts
import { microservices } from '@zintrust/core';

// Example (if supported by the module):
// microservices.*

Snapshot (top)

ts
/**
 * Microservices Configuration
 * Microservices architecture and service discovery settings
 * Sealed namespace for immutability
 */

import { Env } from '@zintrust/core';

const microservicesConfigObj = {
  /**
   * Enable microservices mode
   */
  enabled: Env.getBool('MICROSERVICES', false),

  /**
   * Enabled services (comma-separated)
   */
  services: Env.get('SERVICES', '')
    .split(',')
    .filter((s) => s.trim()),

  /**
   * Service discovery
   */
  discovery: {
    type: Env.get('SERVICE_DISCOVERY_TYPE', 'filesystem') as 'filesystem' | 'consul' | 'etcd',
    servicesPath: Env.get('SERVICES_PATH', 'services'),
    refreshInterval: Env.getInt('SERVICE_DISCOVERY_REFRESH_INTERVAL', 30000),
  },

  /**
   * Service Registry
   */
  registry: {
    host: Env.get('SERVICE_REGISTRY_HOST', 'localhost'),
    port: Env.getInt('SERVICE_REGISTRY_PORT', 8500),
    deregisterCriticalServiceAfter: Env.get('SERVICE_DEREGISTER_CRITICAL_AFTER', '30s'),
  },

  /**
   * Service Authentication
   */
  auth: {
    strategy: Env.get('SERVICE_AUTH_STRATEGY', 'none') as 'api-key' | 'jwt' | 'none' | 'custom',
    apiKey: Env.get('SERVICE_API_KEY'),
    jwtSecret: Env.get('SERVICE_JWT_SECRET'),
  },

  /**
   * Request Tracing
   */
  tracing: {
    enabled: Env.getBool('MICROSERVICES_TRACING', false),
    samplingRate: Env.getInt('MICROSERVICES_TRACING_RATE', 100) / 100,
    exportInterval: Env.getInt('TRACING_EXPORT_INTERVAL', 10000),
    jaegerEndpoint: Env.get('JAEGER_AGENT_HOST', 'localhost'),
  },

  /**
   * Database Isolation
   */
  database: {
    isolation: Env.get('DATABASE_ISOLATION', 'shared') as 'shared' | 'isolated',
    schema: Env.get('DATABASE_SCHEMA_PREFIX', 'microservice'),
  },

  /**
   * Service Health Check
   */
  healthCheck: {

Snapshot (bottom)

ts
    jwtSecret: Env.get('SERVICE_JWT_SECRET'),
  },

  /**
   * Request Tracing
   */
  tracing: {
    enabled: Env.getBool('MICROSERVICES_TRACING', false),
    samplingRate: Env.getInt('MICROSERVICES_TRACING_RATE', 100) / 100,
    exportInterval: Env.getInt('TRACING_EXPORT_INTERVAL', 10000),
    jaegerEndpoint: Env.get('JAEGER_AGENT_HOST', 'localhost'),
  },

  /**
   * Database Isolation
   */
  database: {
    isolation: Env.get('DATABASE_ISOLATION', 'shared') as 'shared' | 'isolated',
    schema: Env.get('DATABASE_SCHEMA_PREFIX', 'microservice'),
  },

  /**
   * Service Health Check
   */
  healthCheck: {
    enabled: Env.getBool('SERVICE_HEALTH_CHECK_ENABLED', true),
    interval: Env.getInt('SERVICE_HEALTH_CHECK_INTERVAL', 30000),
    timeout: Env.getInt('SERVICE_HEALTH_CHECK_TIMEOUT', 5000),
    unhealthyThreshold: Env.getInt('SERVICE_UNHEALTHY_THRESHOLD', 3),
    healthyThreshold: Env.getInt('SERVICE_HEALTHY_THRESHOLD', 2),
  },

  /**
   * Service Communication
   */
  communication: {
    timeout: Env.getInt('SERVICE_CALL_TIMEOUT', 30000),
    retries: Env.getInt('SERVICE_CALL_RETRIES', 3),
    retryDelay: Env.getInt('SERVICE_CALL_RETRY_DELAY', 1000),
    circuitBreaker: {
      enabled: Env.getBool('CIRCUIT_BREAKER_ENABLED', true),
      threshold: Env.getInt('CIRCUIT_BREAKER_THRESHOLD', 5),
      timeout: Env.getInt('CIRCUIT_BREAKER_TIMEOUT', 60000),
    },
  },

  /**
   * Service Mesh (Istio/Linkerd support)
   */
  mesh: {
    enabled: Env.getBool('SERVICE_MESH_ENABLED', false),
    type: Env.get('SERVICE_MESH_TYPE', 'istio') as 'istio' | 'linkerd',
    namespace: Env.get('SERVICE_MESH_NAMESPACE', 'default'),
  },
} as const;

export const microservicesConfig = Object.freeze(microservicesConfigObj);

export type MicroservicesConfig = typeof microservicesConfig;

Released under the MIT License.