import type { TriggerDefinition } from "@automate.ax/catalog/authoring" import { getTriggerDefinitionName } from "@automate.ax/catalog/triggers/name" import { getAutomationPlanningContext } from "./runtime" import { getCurrentSignalPrerequisites } from "./signal-operators" import type { Signal } from "./signal-protocol" import { createSubscription } from "./subscription" /** * Registers an event subscription in planning and creates its signal. * * @param trigger - Shared trigger definition to subscribe to. * @param config - Configuration for the event type. * @throws When the trigger inherits signal dependencies or an account-backed * trigger has invalid or dynamic configuration. */ export function subscribe( trigger: TriggerDefinition, config: unknown, ): Signal /** * Registers an event subscription with values exposed directly on its signal. * * @param trigger - Shared trigger definition to subscribe to. * @param config - Configuration for the event type. * @param staticProperties - Values exposed directly instead of as projections. * @throws When the trigger inherits signal dependencies or an account-backed * trigger has invalid or dynamic configuration. */ export function subscribe( trigger: TriggerDefinition, config: unknown, staticProperties: TStatic, ): Signal & Readonly export function subscribe( trigger: TriggerDefinition, config: unknown, staticProperties?: TStatic, ): Signal & Readonly { if (getAutomationPlanningContext() && getCurrentSignalPrerequisites()) { throw new Error( `Trigger "${getTriggerDefinitionName(trigger)}" cannot be declared inside a prerequisite section. Declare triggers outside prerequisite sections and use correlate() to join independent trigger streams.`, ) } return createSubscription(trigger, config, staticProperties) }