{"version":3,"file":"broker.mjs","names":[],"sources":["../../../../../../../@warlock.js/herald/src/communicators/broker.ts"],"sourcesContent":["import type { BrokerDriverContract } from \"../contracts\";\r\nimport type { ChannelContract } from \"../contracts/channel.contract\";\r\nimport { EventMessage } from \"../message-managers/event-message\";\r\nimport { EventConsumerClass } from \"../message-managers/types\";\r\nimport type { ChannelOptions } from \"../types\";\r\n\r\n/**\r\n * Options for creating a Broker\r\n */\r\nexport interface BrokerOptions {\r\n  /** Unique name for this broker */\r\n  name: string;\r\n  /** The underlying driver */\r\n  driver: BrokerDriverContract;\r\n  /** Whether this is the default broker */\r\n  isDefault?: boolean;\r\n}\r\n\r\n/**\r\n * Broker - wrapper around a driver with metadata\r\n *\r\n * Similar to DataSource in @warlock.js/cascade\r\n *\r\n * @example\r\n * ```typescript\r\n * const broker = new Broker({\r\n *   name: \"default\",\r\n *   driver: rabbitMQDriver,\r\n *   isDefault: true,\r\n * });\r\n *\r\n * // Get a channel\r\n * const channel = broker.channel(\"user.created\");\r\n * ```\r\n */\r\nexport class Broker {\r\n  /** Unique name identifying this broker */\r\n  public readonly name: string;\r\n\r\n  /** The underlying driver */\r\n  public readonly driver: BrokerDriverContract;\r\n\r\n  /** Whether this is the default broker */\r\n  public readonly isDefault: boolean;\r\n\r\n  /**\r\n   * Create a new Broker\r\n   *\r\n   * @param options - Broker configuration\r\n   */\r\n  public constructor(options: BrokerOptions) {\r\n    this.name = options.name;\r\n    this.driver = options.driver;\r\n    this.isDefault = Boolean(options.isDefault);\r\n  }\r\n\r\n  /**\r\n   * Subscribe the given consumer\r\n   */\r\n  public subscribe(consumer: EventConsumerClass<any>) {\r\n    return this.driver.subscribe(consumer);\r\n  }\r\n\r\n  /**\r\n   * Publish the given event message\r\n   */\r\n  public publish<TPayload = Record<string, any>>(event: EventMessage<TPayload>) {\r\n    this.driver.publish(event);\r\n  }\r\n\r\n  /**\r\n   * Get or create a channel\r\n   *\r\n   * @param name - Channel name\r\n   * @param options - Channel options\r\n   * @returns Channel instance\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // Simple channel\r\n   * const channel = broker.channel(\"notifications\");\r\n   *\r\n   * // Typed channel with schema\r\n   * const orderChannel = broker.channel<OrderPayload>(\"orders\", {\r\n   *   schema: OrderSchema,\r\n   *   durable: true,\r\n   * });\r\n   * ```\r\n   */\r\n  public channel<TPayload = unknown>(\r\n    name: string,\r\n    options?: ChannelOptions<TPayload>,\r\n  ): ChannelContract<TPayload> {\r\n    return this.driver.channel<TPayload>(name, options);\r\n  }\r\n\r\n  /**\r\n   * Check if the broker is connected\r\n   */\r\n  public get isConnected(): boolean {\r\n    return this.driver.isConnected;\r\n  }\r\n\r\n  /**\r\n   * Connect the underlying driver\r\n   */\r\n  public async connect(): Promise<void> {\r\n    await this.driver.connect();\r\n  }\r\n\r\n  /**\r\n   * Disconnect the underlying driver\r\n   */\r\n  public async disconnect(): Promise<void> {\r\n    await this.driver.disconnect();\r\n  }\r\n\r\n  /**\r\n   * Start consuming messages\r\n   */\r\n  public async startConsuming(): Promise<void> {\r\n    await this.driver.startConsuming();\r\n  }\r\n\r\n  /**\r\n   * Stop consuming messages\r\n   */\r\n  public async stopConsuming(): Promise<void> {\r\n    await this.driver.stopConsuming();\r\n  }\r\n\r\n  /**\r\n   * Health check\r\n   */\r\n  public async healthCheck() {\r\n    return this.driver.healthCheck();\r\n  }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmCA,IAAa,SAAb,MAAoB;;;;;;CAelB,AAAO,YAAY,SAAwB;EACzC,KAAK,OAAO,QAAQ;EACpB,KAAK,SAAS,QAAQ;EACtB,KAAK,YAAY,QAAQ,QAAQ,SAAS;CAC5C;;;;CAKA,AAAO,UAAU,UAAmC;EAClD,OAAO,KAAK,OAAO,UAAU,QAAQ;CACvC;;;;CAKA,AAAO,QAAwC,OAA+B;EAC5E,KAAK,OAAO,QAAQ,KAAK;CAC3B;;;;;;;;;;;;;;;;;;;;CAqBA,AAAO,QACL,MACA,SAC2B;EAC3B,OAAO,KAAK,OAAO,QAAkB,MAAM,OAAO;CACpD;;;;CAKA,IAAW,cAAuB;EAChC,OAAO,KAAK,OAAO;CACrB;;;;CAKA,MAAa,UAAyB;EACpC,MAAM,KAAK,OAAO,QAAQ;CAC5B;;;;CAKA,MAAa,aAA4B;EACvC,MAAM,KAAK,OAAO,WAAW;CAC/B;;;;CAKA,MAAa,iBAAgC;EAC3C,MAAM,KAAK,OAAO,eAAe;CACnC;;;;CAKA,MAAa,gBAA+B;EAC1C,MAAM,KAAK,OAAO,cAAc;CAClC;;;;CAKA,MAAa,cAAc;EACzB,OAAO,KAAK,OAAO,YAAY;CACjC;AACF"}