import type { BaseInterface } from '../../interface'; import type { Cast, Join, UnionToIntersection } from '../../utils/type-utils'; import type { BasePlugin } from './generic'; type EventKey = string extends TIntegrationName ? string : string extends TEventName ? string : Join<[TIntegrationName, ':', TEventName]>; export type EnumerateInterfaceEvents = UnionToIntersection<{ [TInterfaceName in keyof TPlugin['interfaces']]: { [TEventName in keyof TPlugin['interfaces'][TInterfaceName]['events'] as EventKey, Cast>]: TPlugin['interfaces'][TInterfaceName]['events'][TEventName]; }; }[keyof TPlugin['interfaces']]>; /** * Used by a bot to tell the plugin what integration should be used to implement an interface. */ export type PluginInterfaceExtension = { id?: string; name: string; version: string; integrationAlias: string; integrationInterfaceAlias: string; entities: { [K in keyof TInterface['entities']]: { name: string; }; }; actions: { [K in keyof TInterface['actions']]: { name: string; }; }; events: { [K in keyof TInterface['events']]: { name: string; }; }; channels: { [K in keyof TInterface['channels']]: { name: string; }; }; }; export type PluginIntegrationExtension = { id?: string; name: string; version: string; integrationAlias: string; }; export type PluginInterfaceExtensions = { [TPluginInterfaceAlias in keyof TPlugin['interfaces']]: PluginInterfaceExtension; }; export type PluginIntegrationExtensions = { [TPluginIntegrationAlias in keyof TPlugin['integrations']]: PluginIntegrationExtension; }; export type PluginConfiguration = TPlugin['configuration']; export type PluginRuntimeProps = { alias: string; configuration: PluginConfiguration; interfaces: PluginInterfaceExtensions; integrations: PluginIntegrationExtensions; }; export {};