{"version":3,"sources":["../../src/events/unix-socket-pubsub.ts"],"names":["PubSub","randomUUID","unlink","mkdir","dirname","net","open","stat"],"mappings":"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","file":"index.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { mkdir, open, stat, unlink } from 'node:fs/promises';\nimport type { FileHandle } from 'node:fs/promises';\nimport net from 'node:net';\nimport { dirname } from 'node:path';\n\nimport { PubSub } from './pubsub';\nimport type { PubSubDeliveryMode } from './pubsub';\nimport type { Event, EventCallback, SubscribeOptions } from './types';\n\ntype ClientFrame =\n | { type: 'subscribe'; topic: string }\n | { type: 'unsubscribe'; topic: string }\n | { type: 'publish'; topic: string; event: Omit; localOnly?: boolean }\n | { type: 'ack'; id?: string }\n | { type: 'nack'; id?: string };\n\ntype ServerFrame = { type: 'event'; topic: string; event: Event } | { type: 'subscribed'; topic: string };\n\ntype UnixSocketPubSubOptions = {\n maxRemoteClientQueuedBytes?: number;\n};\n\ntype BrokerClient = {\n socket: net.Socket;\n subscriptions: Set;\n writeChain: Promise;\n queuedBytes: number;\n};\n\ntype SubscribeWaiter = {\n resolve: () => void;\n reject: (error: Error) => void;\n};\n\nconst DEFAULT_MAX_REMOTE_CLIENT_QUEUED_BYTES = 64 * 1024 * 1024;\n\nfunction serializeFrame(frame: ClientFrame | ServerFrame): string {\n return `${JSON.stringify(frame)}\\n`;\n}\n\nfunction writeSerializedFrame(socket: net.Socket, serializedFrame: string): Promise {\n return new Promise((resolve, reject) => {\n let writeCompleted = false;\n let drainCompleted = true;\n let settled = false;\n\n const cleanup = () => {\n socket.off('error', onError);\n socket.off('close', onClose);\n socket.off('drain', onDrain);\n };\n const settle = (error?: Error) => {\n if (settled) return;\n settled = true;\n cleanup();\n if (error) {\n reject(error);\n return;\n }\n resolve();\n };\n const maybeResolve = () => {\n if (writeCompleted && drainCompleted) {\n settle();\n }\n };\n const onError = (error: Error) => settle(error);\n // NOTE: keep this exact message in sync with the transient-error classifier\n // in #sendToBroker (search for 'socket closed before write completed').\n const onClose = () => settle(new Error('UnixSocketPubSub socket closed before write completed'));\n const onDrain = () => {\n drainCompleted = true;\n maybeResolve();\n };\n\n socket.once('error', onError);\n socket.once('close', onClose);\n let drained: boolean;\n try {\n drained = socket.write(serializedFrame, error => {\n if (error) {\n settle(error);\n return;\n }\n writeCompleted = true;\n maybeResolve();\n });\n } catch (error) {\n settle(error as Error);\n return;\n }\n if (!drained) {\n drainCompleted = false;\n socket.once('drain', onDrain);\n }\n });\n}\n\nfunction writeFrame(socket: net.Socket, frame: ClientFrame | ServerFrame): Promise {\n return writeSerializedFrame(socket, serializeFrame(frame));\n}\n\nfunction nextTick(): Promise {\n return new Promise(resolve => setImmediate(resolve));\n}\n\nfunction readFrames(socket: net.Socket, onFrame: (frame: any) => void) {\n let buffer = '';\n socket.setEncoding('utf8');\n socket.on('data', chunk => {\n buffer += chunk;\n while (true) {\n const newlineIndex = buffer.indexOf('\\n');\n if (newlineIndex === -1) break;\n const line = buffer.slice(0, newlineIndex);\n buffer = buffer.slice(newlineIndex + 1);\n if (!line.trim()) continue;\n try {\n onFrame(JSON.parse(line));\n } catch {\n // Ignore malformed frames. The transport is local IPC and callers can retry.\n }\n }\n });\n}\n\nexport class UnixSocketPubSub extends PubSub {\n readonly socketPath: string;\n #server?: net.Server;\n #clientSocket?: net.Socket;\n #isBroker = false;\n #closed = false;\n #starting?: Promise;\n #callbacks = new Map>();\n #subscribeWaiters = new Map();\n #brokerClients = new Map();\n #pendingWrites = new Set>();\n #recovering?: Promise;\n #maxRemoteClientQueuedBytes: number;\n\n constructor(socketPath: string, options: UnixSocketPubSubOptions = {}) {\n super();\n this.socketPath = socketPath;\n this.#maxRemoteClientQueuedBytes = options.maxRemoteClientQueuedBytes ?? DEFAULT_MAX_REMOTE_CLIENT_QUEUED_BYTES;\n }\n\n override get supportedModes(): ReadonlyArray {\n return ['push'];\n }\n\n get isBroker(): boolean {\n return this.#isBroker;\n }\n\n /** Number of remote clients currently connected to this broker. Always 0 for non-broker instances. */\n get remoteClientCount(): number {\n return this.#isBroker ? this.#brokerClients.size : 0;\n }\n\n async publish(\n topic: string,\n event: Omit,\n options?: { localOnly?: boolean },\n ): Promise {\n await this.#ensureStarted();\n\n // `localOnly` events stay entirely within the publishing process. They are\n // never serialized over a unix socket, so live methods on payload values\n // (e.g. `MastraModelOutput.getFullOutput`, `step.condition` functions on\n // serialized step graphs) survive intact. This is the semantic the agent's\n // execution-workflow relies on: the run result is delivered via\n // `workflows-finish` and includes the `MastraModelOutput` instance —\n // round-tripping it through the broker would strip its methods.\n if (options?.localOnly) {\n const localEvent: Event = {\n ...event,\n id: randomUUID(),\n createdAt: new Date(),\n deliveryAttempt: 1,\n };\n this.#deliverLocal(topic, localEvent);\n return;\n }\n\n if (this.#isBroker) {\n await this.#publishFromBroker(topic, event, undefined, options?.localOnly);\n return;\n }\n\n const socket = this.#clientSocket;\n if (!socket || socket.destroyed) {\n await this.#ensureStarted(true);\n }\n await this.#sendToBroker({ type: 'publish', topic, event, localOnly: options?.localOnly });\n }\n\n async subscribe(topic: string, cb: EventCallback, options?: SubscribeOptions): Promise {\n if (options?.group) {\n throw new Error('UnixSocketPubSub does not support grouped subscriptions yet');\n }\n\n const callbacks = this.#callbacks.get(topic) ?? new Set();\n const hadCallback = callbacks.has(cb);\n const wasConnected = Boolean(this.#clientSocket && !this.#clientSocket.destroyed);\n callbacks.add(cb);\n this.#callbacks.set(topic, callbacks);\n\n try {\n await this.#ensureStarted();\n if (!this.#isBroker && !hadCallback && wasConnected) {\n await this.#sendSubscribeToBroker(topic);\n }\n } catch (error) {\n if (!hadCallback) {\n callbacks.delete(cb);\n if (callbacks.size === 0) {\n this.#callbacks.delete(topic);\n }\n }\n throw error;\n }\n }\n\n async unsubscribe(topic: string, cb: EventCallback): Promise {\n const callbacks = this.#callbacks.get(topic);\n callbacks?.delete(cb);\n if (callbacks?.size === 0) {\n this.#callbacks.delete(topic);\n if (!this.#isBroker && this.#clientSocket && !this.#clientSocket.destroyed) {\n await this.#sendToBroker({ type: 'unsubscribe', topic });\n await nextTick();\n }\n }\n }\n\n async flush(): Promise {\n await Promise.allSettled([...this.#pendingWrites]);\n }\n\n async close(): Promise {\n this.#closed = true;\n this.#callbacks.clear();\n\n this.#clientSocket?.destroy();\n this.#clientSocket = undefined;\n this.#rejectSubscribeWaiters(new Error('UnixSocketPubSub is closed'));\n\n for (const client of [...this.#brokerClients.values()]) {\n this.#removeBrokerClient(client);\n }\n\n if (this.#server) {\n await new Promise(resolve => this.#server?.close(() => resolve()));\n this.#server = undefined;\n }\n\n if (this.#isBroker) {\n await unlink(this.socketPath).catch(() => {});\n }\n this.#isBroker = false;\n }\n\n async #ensureStarted(forceReconnect = false): Promise {\n if (this.#closed) {\n throw new Error('UnixSocketPubSub is closed');\n }\n if (!forceReconnect && (this.#isBroker || (this.#clientSocket && !this.#clientSocket.destroyed))) {\n return;\n }\n if (this.#starting) {\n return this.#starting;\n }\n\n this.#starting = this.#start(forceReconnect).finally(() => {\n this.#starting = undefined;\n });\n return this.#starting;\n }\n\n async #start(forceReconnect: boolean): Promise {\n if (forceReconnect) {\n this.#clientSocket?.destroy();\n this.#clientSocket = undefined;\n this.#isBroker = false;\n }\n\n this.#throwIfClosed();\n await mkdir(dirname(this.socketPath), { recursive: true });\n this.#throwIfClosed();\n\n try {\n await this.#listen();\n this.#throwIfClosed();\n this.#isBroker = true;\n return;\n } catch (error) {\n if (this.#closed) {\n await this.close();\n throw new Error('UnixSocketPubSub is closed');\n }\n const code = (error as NodeJS.ErrnoException).code;\n // EADDRINUSE: another broker bound the socket. EEXIST: another process\n // created the socket file but hasn't bound yet (macOS race). Both mean\n // \"fall through and try to connect as a client\".\n if (code !== 'EADDRINUSE' && code !== 'EEXIST') throw error;\n }\n\n try {\n await this.#connectClient();\n this.#throwIfClosed();\n } catch (error) {\n if (this.#closed) {\n await this.close();\n throw new Error('UnixSocketPubSub is closed');\n }\n const code = (error as NodeJS.ErrnoException).code;\n if (code === 'ECONNREFUSED' || code === 'ENOENT' || code === 'ENOTSOCK') {\n this.#throwIfClosed();\n await this.#electBroker();\n return;\n }\n throw error;\n }\n }\n\n #throwIfClosed() {\n if (this.#closed) {\n throw new Error('UnixSocketPubSub is closed');\n }\n }\n\n #listen(): Promise {\n return new Promise((resolve, reject) => {\n const server = net.createServer(socket => this.#handleBrokerClient(socket));\n const onError = (error: Error) => {\n server.off('listening', onListening);\n reject(error);\n };\n const onListening = () => {\n server.off('error', onError);\n this.#server = server;\n resolve();\n };\n\n server.once('error', onError);\n server.once('listening', onListening);\n server.listen(this.socketPath);\n });\n }\n\n #connectClient(): Promise {\n return new Promise((resolve, reject) => {\n const socket = net.createConnection(this.socketPath);\n const onError = (error: Error) => {\n socket.off('connect', onConnect);\n reject(error);\n };\n const onConnect = () => {\n socket.off('error', onError);\n this.#clientSocket = socket;\n this.#isBroker = false;\n readFrames(socket, frame => this.#handleServerFrame(frame));\n // NOTE: keep this exact message in sync with the transient-error\n // classifier in #sendToBroker (search for 'broker connection closed').\n socket.on('close', () =>\n this.#handleClientDisconnect(socket, new Error('UnixSocketPubSub broker connection closed')),\n );\n socket.on('error', error => this.#handleClientDisconnect(socket, error));\n void this.#resubscribeClient().then(resolve, reject);\n };\n\n socket.once('error', onError);\n socket.once('connect', onConnect);\n });\n }\n\n async #resubscribeClient() {\n for (const topic of this.#callbacks.keys()) {\n await this.#sendSubscribeToBroker(topic);\n }\n }\n\n #handleClientDisconnect(socket: net.Socket, error: Error) {\n if (this.#clientSocket !== socket) return;\n this.#clientSocket = undefined;\n this.#rejectSubscribeWaiters(error);\n if (!this.#closed) {\n void this.#recoverClientConnection();\n }\n }\n\n async #recoverClientConnection(): Promise {\n if (this.#recovering) return this.#recovering;\n this.#recovering = this.#recoverClientConnectionLoop().finally(() => {\n this.#recovering = undefined;\n });\n return this.#recovering;\n }\n\n async #recoverClientConnectionLoop(): Promise {\n while (!this.#closed && !this.#isBroker && !(this.#clientSocket && !this.#clientSocket.destroyed)) {\n try {\n await this.#ensureStarted(true);\n return;\n } catch {\n if (this.#closed) return;\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n }\n }\n\n /**\n * Serializes broker election across processes using an exclusive lock file.\n * Only the lock winner unlinks the stale socket and listens; losers wait\n * then connect as clients to the newly elected broker.\n */\n async #electBroker(): Promise {\n const lockPath = this.socketPath + '.elect';\n let lockFd: FileHandle | undefined;\n try {\n lockFd = await open(lockPath, 'wx');\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'EEXIST') {\n if (await this.#isElectionLockStale(lockPath)) {\n await unlink(lockPath).catch(() => {});\n throw new Error('Stale broker election lock removed');\n }\n await new Promise(resolve => setTimeout(resolve, 150));\n try {\n await this.#connectClient();\n this.#throwIfClosed();\n return;\n } catch {\n throw new Error('Broker election in progress by another process');\n }\n }\n throw e;\n }\n\n try {\n // Re-check: a previous election round may have installed a broker\n // between our initial connectClient() and acquiring this lock.\n try {\n await this.#connectClient();\n this.#throwIfClosed();\n return;\n } catch {\n // Still no live broker — proceed with election.\n }\n await unlink(this.socketPath).catch(() => {});\n this.#throwIfClosed();\n await this.#listen();\n this.#throwIfClosed();\n this.#isBroker = true;\n } finally {\n await lockFd.close().catch(() => {});\n await unlink(lockPath).catch(() => {});\n }\n }\n\n async #isElectionLockStale(lockPath: string): Promise {\n try {\n const lockStat = await stat(lockPath);\n return Date.now() - lockStat.mtimeMs > 2000;\n } catch {\n return true;\n }\n }\n\n async #sendSubscribeToBroker(topic: string): Promise {\n let waiter: SubscribeWaiter | undefined;\n const subscribed = new Promise((resolve, reject) => {\n waiter = { resolve, reject };\n const waiters = this.#subscribeWaiters.get(topic) ?? [];\n waiters.push(waiter);\n this.#subscribeWaiters.set(topic, waiters);\n });\n try {\n await this.#sendToBroker({ type: 'subscribe', topic });\n } catch (error) {\n this.#removeSubscribeWaiter(topic, waiter);\n throw error;\n }\n await subscribed;\n }\n\n #removeSubscribeWaiter(topic: string, waiter: SubscribeWaiter | undefined) {\n if (!waiter) return;\n const waiters = this.#subscribeWaiters.get(topic);\n if (!waiters) return;\n const nextWaiters = waiters.filter(item => item !== waiter);\n if (nextWaiters.length === 0) {\n this.#subscribeWaiters.delete(topic);\n return;\n }\n this.#subscribeWaiters.set(topic, nextWaiters);\n }\n\n #settleSubscribeWaiters(topic: string, error?: Error) {\n const waiters = this.#subscribeWaiters.get(topic);\n this.#subscribeWaiters.delete(topic);\n if (error) {\n waiters?.forEach(waiter => waiter.reject(error));\n return;\n }\n waiters?.forEach(waiter => waiter.resolve());\n }\n\n #rejectSubscribeWaiters(error: Error) {\n for (const topic of this.#subscribeWaiters.keys()) {\n this.#settleSubscribeWaiters(topic, error);\n }\n }\n\n #handleBrokerClient(socket: net.Socket) {\n const client: BrokerClient = {\n socket,\n subscriptions: new Set(),\n writeChain: Promise.resolve(),\n queuedBytes: 0,\n };\n this.#brokerClients.set(socket, client);\n readFrames(socket, frame => {\n const clientFrame = frame as ClientFrame;\n if (clientFrame.type === 'subscribe') {\n client.subscriptions.add(clientFrame.topic);\n this.#enqueueBrokerClientWrite(client, { type: 'subscribed', topic: clientFrame.topic });\n } else if (clientFrame.type === 'unsubscribe') {\n client.subscriptions.delete(clientFrame.topic);\n } else if (clientFrame.type === 'publish') {\n void this.#publishFromBroker(clientFrame.topic, clientFrame.event, client, clientFrame.localOnly);\n }\n });\n socket.on('close', () => this.#removeBrokerClient(client));\n socket.on('error', () => this.#removeBrokerClient(client));\n }\n\n #enqueueBrokerClientWrite(client: BrokerClient, frame: ServerFrame) {\n if (this.#brokerClients.get(client.socket) !== client || client.socket.destroyed) return;\n\n const serializedFrame = serializeFrame(frame);\n const queuedBytes = Buffer.byteLength(serializedFrame);\n if (client.queuedBytes + queuedBytes > this.#maxRemoteClientQueuedBytes) {\n this.#removeBrokerClient(client);\n return;\n }\n\n client.queuedBytes += queuedBytes;\n\n const write = client.writeChain\n .catch(() => {})\n .then(async () => {\n if (this.#brokerClients.get(client.socket) !== client || client.socket.destroyed) return;\n await writeSerializedFrame(client.socket, serializedFrame);\n })\n .catch(() => {\n this.#removeBrokerClient(client);\n })\n .finally(() => {\n client.queuedBytes = Math.max(0, client.queuedBytes - queuedBytes);\n });\n\n client.writeChain = write;\n this.#pendingWrites.add(write);\n void write.finally(() => this.#pendingWrites.delete(write));\n }\n\n #removeBrokerClient(client: BrokerClient) {\n if (this.#brokerClients.get(client.socket) !== client) return;\n this.#brokerClients.delete(client.socket);\n client.subscriptions.clear();\n client.queuedBytes = 0;\n client.writeChain = Promise.resolve();\n if (!client.socket.destroyed) {\n client.socket.destroy();\n }\n }\n\n #handleServerFrame(frame: ServerFrame) {\n if (frame.type === 'subscribed') {\n this.#settleSubscribeWaiters(frame.topic);\n return;\n }\n if (frame.type !== 'event') return;\n const event = {\n ...frame.event,\n createdAt: new Date(frame.event.createdAt),\n };\n this.#deliverLocal(frame.topic, event);\n }\n\n async #publishFromBroker(\n topic: string,\n event: Omit,\n sourceClient?: BrokerClient,\n localOnly?: boolean,\n ) {\n const brokerEvent: Event = {\n ...event,\n id: randomUUID(),\n createdAt: new Date(),\n deliveryAttempt: 1,\n };\n\n this.#deliverLocal(topic, brokerEvent);\n\n // Skip serialization entirely when no remote clients could receive the event.\n if (this.#brokerClients.size === 0) return;\n\n // `localOnly` events are scoped to the publishing instance.\n // When the publisher is the broker, the `#deliverLocal` above is enough.\n // When the publisher is a remote client, relay the event back ONLY to\n // that client so its subscription callback fires, but do NOT fan out to\n // other clients — their WEP would just drop the event via `#ownsWorkflow`\n // and the multi-MB payload would waste socket/kernel buffer for nothing.\n if (localOnly) {\n if (sourceClient && sourceClient.subscriptions.has(topic) && !sourceClient.socket.destroyed) {\n this.#enqueueBrokerClientWrite(sourceClient, { type: 'event', topic, event: brokerEvent });\n }\n return;\n }\n\n let frame: ServerFrame | undefined;\n for (const client of this.#brokerClients.values()) {\n if (!client.subscriptions.has(topic) || client.socket.destroyed) continue;\n // Lazily build the frame only when we know at least one client needs it.\n frame ??= { type: 'event', topic, event: brokerEvent };\n this.#enqueueBrokerClientWrite(client, frame);\n }\n }\n\n #deliverLocal(topic: string, event: Event) {\n const callbacks = this.#callbacks.get(topic);\n if (!callbacks) return;\n for (const cb of callbacks) {\n this.#invokeLocalCallback(topic, event, cb, 0);\n }\n }\n\n #invokeLocalCallback(topic: string, event: Event, cb: EventCallback, attempt: number) {\n // Keep this aligned with (or above) the consumer-side retry budget\n // (e.g. WorkflowEventProcessor.MAX_DELIVERY_ATTEMPTS). The transport must\n // give the consumer enough redeliveries to exhaust its own retry budget\n // and surface a terminal failure, otherwise the consumer never sees\n // attempt N and the run silently hangs.\n const MAX_LOCAL_REDELIVERIES = 6;\n const REDELIVERY_DELAY_MS = 100;\n let nacked = false;\n const nack = async () => {\n if (nacked || this.#closed) return;\n nacked = true;\n if (attempt >= MAX_LOCAL_REDELIVERIES) return;\n const stillSubscribed = this.#callbacks.get(topic)?.has(cb);\n if (!stillSubscribed) return;\n const timer = setTimeout(\n () => {\n if (this.#closed) return;\n if (!this.#callbacks.get(topic)?.has(cb)) return;\n const redeliveredEvent: Event = {\n ...event,\n deliveryAttempt: (event.deliveryAttempt ?? 1) + 1,\n };\n this.#invokeLocalCallback(topic, redeliveredEvent, cb, attempt + 1);\n },\n REDELIVERY_DELAY_MS * (attempt + 1),\n );\n // Unrefed so a queued redelivery never holds the event loop open at\n // shutdown. The trade-off: an in-flight redelivery during process exit\n // is silently dropped. That's acceptable because the consumer (WEP)\n // is itself shutting down and the workflow will be re-driven from\n // durable state on the next start.\n timer.unref?.();\n };\n try {\n const result = (cb as (event: Event, ack: () => Promise, nack: () => Promise) => unknown)(\n event,\n async () => {},\n nack,\n );\n if (result && typeof (result as Promise).catch === 'function') {\n void (result as Promise).catch(() => {});\n }\n } catch {\n // Ignore subscriber failures so one callback cannot poison topic delivery.\n }\n }\n\n async #sendToBroker(frame: ClientFrame) {\n // If the broker died mid-write (EPIPE) or while election is rotating, we\n // reconnect and retry. The first attempt is the normal path. Each retry\n // forces a fresh broker resolution. Retry budget is bounded so a truly\n // unreachable broker still errors instead of looping forever.\n const maxRetries = 3;\n let lastError: unknown;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n if (attempt === 0) {\n await this.#sendToActiveBroker(frame);\n } else {\n if (this.#closed) throw lastError;\n const failedSocket = this.#clientSocket;\n this.#clientSocket = undefined;\n failedSocket?.destroy();\n await this.#ensureStarted(true);\n await this.#sendToActiveBroker(frame);\n }\n return;\n } catch (error) {\n lastError = error;\n if (this.#closed) throw error;\n const code = (error as NodeJS.ErrnoException)?.code;\n // EPIPE/ECONNRESET/ENOTCONN: broker died mid-write — retry against a\n // fresh broker. Anything else (e.g. closed pubsub, validation error)\n // is not safe to retry blindly. The string-message checks cover three\n // internal errors thrown from within this file that don't carry an\n // ErrnoException-style `code` — keep them in lockstep with those\n // throw sites:\n // - \"socket closed before write completed\" (writeSerializedFrame,\n // when the broker dies mid-write before the drain settles)\n // - \"broker connection closed\" (#handleClientDisconnect)\n // - \"not connected to a broker\" (#sendToActiveBroker)\n const transient =\n code === 'EPIPE' ||\n code === 'ECONNRESET' ||\n code === 'ENOTCONN' ||\n (error as Error)?.message?.includes('socket closed before write completed') ||\n (error as Error)?.message?.includes('broker connection closed') ||\n (error as Error)?.message?.includes('not connected to a broker');\n if (!transient || attempt === maxRetries) throw error;\n // Tiny backoff so concurrent senders don't dogpile re-election.\n await new Promise(resolve => setTimeout(resolve, 10 * (attempt + 1)));\n }\n }\n }\n\n async #sendToActiveBroker(frame: ClientFrame) {\n const socket = this.#clientSocket;\n if (!socket || socket.destroyed) {\n await this.#ensureStarted(true);\n }\n if (this.#isBroker) {\n await this.#handlePromotedBrokerFrame(frame);\n return;\n }\n const activeSocket = this.#clientSocket;\n if (!activeSocket || activeSocket.destroyed) {\n // NOTE: keep this exact message in sync with the transient-error\n // classifier in #sendToBroker (search for 'not connected to a broker').\n throw new Error('UnixSocketPubSub is not connected to a broker');\n }\n await writeFrame(activeSocket, frame);\n }\n\n async #handlePromotedBrokerFrame(frame: ClientFrame) {\n if (frame.type === 'subscribe') {\n this.#settleSubscribeWaiters(frame.topic);\n } else if (frame.type === 'publish') {\n await this.#publishFromBroker(frame.topic, frame.event);\n }\n }\n}\n"]}