import type { EventHandler, Unsubscribe } from "./events"; export type Awaitable = T | Promise; export type ExtensionConfig = Record; export interface ExtensionSetupContext { add(name: string, value: T): void; on(event: string, handler: EventHandler): Unsubscribe; } export interface ExtensionRuntimeContext { get(name: string): T; all(name: string): T[]; on(event: string, handler: EventHandler): Unsubscribe; emit(event: string, payload: T): Promise; } export interface Extension { setup(context: ExtensionSetupContext): Awaitable; start?(context: ExtensionRuntimeContext): Awaitable; stop?(context: ExtensionRuntimeContext): Awaitable; } export interface ExtensionFactory { id: string; (options?: ExtensionConfig): Extension; }