export * from "./base-events.ts"export type { BotMessageEvent, GenericMessageEvent } from "./message-events.ts"import { StringIndexed } from "../helpers.ts"import { SayFn } from "../utilities.ts"import { BasicSlackEvent, SlackEvent } from "./base-events.ts"
export interface SlackEventMiddlewareArgs<EventType extends string = string> { payload: EventFromType<EventType> event: EventFromType<EventType> message: EventType extends "message" ? EventFromType<EventType> : never body: EnvelopedEvent<EventFromType<EventType>> say: WhenEventHasChannelContext<EventFromType<EventType>, SayFn>}
interface EnvelopedEvent<Event = BasicSlackEvent> extends StringIndexed { token: string team_id: string enterprise_id?: string api_app_id: string event: Event type: "event_callback" event_id: string event_time: number authed_users?: string[] authed_teams?: string[] is_ext_shared_channel?: boolean authorizations?: Authorization[]}
interface Authorization { enterprise_id: string | null team_id: string | null user_id: string is_bot: boolean is_enterprise_install?: boolean}
type EventFromType<T extends string> = KnownEventFromType<T> extends never ? BasicSlackEvent<T> : KnownEventFromType<T>type KnownEventFromType<T extends string> = Extract<SlackEvent, { type: T }>
type WhenEventHasChannelContext<Event, Type> = Event extends { channel: string } | { item: { channel: string } } ? Type : never