import { AnyFunction } from '@mds-core/mds-types' ; export const ServiceErrorDescriptorTypes = [ 'ServiceException' , 'NotFoundError' , 'ConflictError' , 'ValidationError' ] as const ; export type ServiceErrorDescriptorType = typeof ServiceErrorDescriptorTypes [ number ] ; export type ServiceErrorDescriptor < E extends string > = Readonly < { isServiceError : true ; type : E ; message : string ; details ? : string ; } > ; export interface ServiceErrorType < E extends string = ServiceErrorDescriptorType > { error : ServiceErrorDescriptor < E > ; } export interface ServiceResultType < R > { error : null ; result : R ; } export type ServiceResponse < R > = ServiceErrorType | ServiceResultType < R > ; export type ServiceClient < I > = { [ P in keyof I ] : I [ P ] extends AnyFunction < infer R > ? ( ... args : Parameters < I [ P ] > ) => Promise < R > : never ; } ; export type ServiceProvider < I > = { [ P in keyof I ] : I [ P ] extends AnyFunction < infer R > ? ( ... args : Parameters < I [ P ] > ) => Promise < ServiceResponse < R > > : never ; } ; export interface ProcessController { start : ( ) => Promise < void > ; stop : ( ) => Promise < void > ; }