import { AsyncLocalStorage } from 'node:async_hooks'; import type { AuthService, IdentifierService } from '@diia-inhouse/crypto'; import type { DatabaseAdapterType, DatabaseService, PostgresDatabaseService } from '@diia-inhouse/db'; import type { MetricsService } from '@diia-inhouse/diia-metrics'; import type { EventBus, EventMessageHandler, EventMessageValidator, ExternalCommunicator, ExternalEventBus, Queue, ScheduledTask, Task } from '@diia-inhouse/diia-queue'; import type { EnvService } from '@diia-inhouse/env'; import type { FeatureService } from '@diia-inhouse/features'; import type { HealthCheck } from '@diia-inhouse/healthcheck'; import type { PubSubService, RedlockService, StoreService } from '@diia-inhouse/redis'; import type { AlsData, Logger } from '@diia-inhouse/types'; import { Utils } from '@diia-inhouse/utils'; import type { AppValidator } from '@diia-inhouse/validators'; import { ActionExecutor } from '../actionExecutor.js'; import { GrpcClientFactory } from '../grpc/grpcClient.js'; import { GrpcService } from '../grpc/index.js'; import MoleculerService from '../moleculer/moleculerWrapper.js'; import { BaseConfig } from './config.js'; export interface BaseDeps { serviceName: string; systemServiceName: string; hostName: string; config: TConfig; logger: Logger; envService: EnvService; asyncLocalStorage: AsyncLocalStorage; validator: AppValidator; actionExecutor: ActionExecutor; metrics: MetricsService; grpcService: GrpcService; grpcClientFactory: GrpcClientFactory; utils: Utils; moleculer?: MoleculerService; store?: StoreService; redlock?: RedlockService; pubsub?: PubSubService; queue?: Queue; eventMessageHandler?: EventMessageHandler; eventMessageValidator?: EventMessageValidator; task?: Task; scheduledTask?: ScheduledTask; eventBus?: EventBus; externalEventBus?: ExternalEventBus; external?: ExternalCommunicator; healthCheck?: HealthCheck; databaseAdapter?: DatabaseAdapterType; database?: DatabaseService; postgresDatabaseService?: PostgresDatabaseService; auth?: AuthService; identifier?: IdentifierService; featureFlag?: FeatureService; }