import { EVENT_KEYS } from './events.constants';
import { MESSAGE_CHANNELS } from './channels.constants';
type ValueOf<T> = T[keyof T];
export type ExchangeEventMap = {
    [MESSAGE_CHANNELS.AI]: typeof EVENT_KEYS.ai;
    [MESSAGE_CHANNELS.AUTH]: typeof EVENT_KEYS.auth;
    [MESSAGE_CHANNELS.COMPLIANCE]: typeof EVENT_KEYS.compliance;
    [MESSAGE_CHANNELS.CRM]: typeof EVENT_KEYS.crm;
    [MESSAGE_CHANNELS.FINANCE]: typeof EVENT_KEYS.finance;
    [MESSAGE_CHANNELS.PORTFOLIO]: typeof EVENT_KEYS.portfolio;
    [MESSAGE_CHANNELS.NOTIFICATIONS]: typeof EVENT_KEYS.notifications;
};
type QueueMessageForExchange<TExchange extends keyof ExchangeEventMap> = {
    exchange: TExchange;
    routingKey: ValueOf<ExchangeEventMap[TExchange]>;
    taskId: string;
    createdAt: string;
    source: string;
    payload: unknown;
};
export type TQueueParams = ValueOf<{
    [TExchange in keyof ExchangeEventMap]: QueueMessageForExchange<TExchange>;
}>;
export type TExchange = (typeof MESSAGE_CHANNELS)[keyof typeof MESSAGE_CHANNELS];
export type TEventKey = ValueOf<{
    [Domain in keyof typeof EVENT_KEYS]: ValueOf<(typeof EVENT_KEYS)[Domain]>;
}>;
export {};
