{"version":3,"sources":["../../src/events/unix-socket-pubsub.ts"],"names":["PubSub","unlink","mkdir","dirname","net","randomUUID"],"mappings":"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","file":"index.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { mkdir, unlink } 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<Event, 'id' | 'createdAt'> }\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 BrokerClient = {\n  socket: net.Socket;\n  subscriptions: Set<string>;\n};\n\ntype SubscribeWaiter = {\n  resolve: () => void;\n  reject: (error: Error) => void;\n};\n\nfunction writeFrame(socket: net.Socket, frame: ClientFrame | ServerFrame): Promise<void> {\n  return new Promise((resolve, reject) => {\n    const onError = (error: Error) => {\n      socket.off('drain', onDrain);\n      reject(error);\n    };\n    const onDrain = () => {\n      socket.off('error', onError);\n      resolve();\n    };\n\n    socket.once('error', onError);\n    const drained = socket.write(`${JSON.stringify(frame)}\\n`, () => {\n      if (drained) {\n        socket.off('error', onError);\n        resolve();\n      }\n    });\n    if (!drained) {\n      socket.once('drain', onDrain);\n    }\n  });\n}\n\nfunction nextTick(): Promise<void> {\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<void>;\n  #callbacks = new Map<string, Set<EventCallback>>();\n  #subscribeWaiters = new Map<string, SubscribeWaiter[]>();\n  #brokerClients = new Map<net.Socket, BrokerClient>();\n  #pendingWrites: Promise<void>[] = [];\n\n  constructor(socketPath: string) {\n    super();\n    this.socketPath = socketPath;\n  }\n\n  override get supportedModes(): ReadonlyArray<PubSubDeliveryMode> {\n    return ['push'];\n  }\n\n  get isBroker(): boolean {\n    return this.#isBroker;\n  }\n\n  async publish(topic: string, event: Omit<Event, 'id' | 'createdAt'>): Promise<void> {\n    await this.#ensureStarted();\n    if (this.#isBroker) {\n      await this.#publishFromBroker(topic, event);\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 });\n  }\n\n  async subscribe(topic: string, cb: EventCallback, options?: SubscribeOptions): Promise<void> {\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<EventCallback>();\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<void> {\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<void> {\n    await Promise.allSettled(this.#pendingWrites);\n    this.#pendingWrites = [];\n  }\n\n  async close(): Promise<void> {\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      client.socket.destroy();\n    }\n    this.#brokerClients.clear();\n\n    if (this.#server) {\n      await new Promise<void>(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<void> {\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<void> {\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      if (code !== 'EADDRINUSE') 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        await unlink(this.socketPath).catch(() => {});\n        this.#throwIfClosed();\n        await this.#listen();\n        this.#throwIfClosed();\n        this.#isBroker = true;\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<void> {\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<void> {\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        socket.on('close', () => {\n          if (this.#clientSocket === socket) this.#clientSocket = undefined;\n          this.#rejectSubscribeWaiters(new Error('UnixSocketPubSub broker connection closed'));\n        });\n        socket.on('error', error => {\n          if (this.#clientSocket === socket) this.#clientSocket = undefined;\n          this.#rejectSubscribeWaiters(error);\n        });\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  async #sendSubscribeToBroker(topic: string): Promise<void> {\n    let waiter: SubscribeWaiter | undefined;\n    const subscribed = new Promise<void>((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 = { socket, subscriptions: new Set() };\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        void writeFrame(socket, { type: 'subscribed', topic: clientFrame.topic }).catch(() => {});\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);\n      }\n    });\n    socket.on('close', () => this.#brokerClients.delete(socket));\n    socket.on('error', () => this.#brokerClients.delete(socket));\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(topic: string, event: Omit<Event, 'id' | 'createdAt'>) {\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    const frame: ServerFrame = { type: 'event', topic, event: brokerEvent };\n    for (const client of this.#brokerClients.values()) {\n      if (!client.subscriptions.has(topic) || client.socket.destroyed) continue;\n      const write = writeFrame(client.socket, frame).catch(() => {});\n      this.#pendingWrites.push(write);\n    }\n    await this.flush();\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      try {\n        const result = (cb as (event: Event, ack: () => Promise<void>, nack: () => Promise<void>) => unknown)(\n          event,\n          async () => {},\n          async () => {},\n        );\n        if (result && typeof (result as Promise<void>).catch === 'function') {\n          void (result as Promise<void>).catch(() => {});\n        }\n      } catch {\n        // Ignore subscriber failures so one callback cannot poison topic delivery.\n      }\n    }\n  }\n\n  async #sendToBroker(frame: ClientFrame) {\n    const socket = this.#clientSocket;\n    if (!socket || socket.destroyed) {\n      await this.#ensureStarted(true);\n    }\n    const activeSocket = this.#clientSocket;\n    if (!activeSocket || activeSocket.destroyed) {\n      throw new Error('UnixSocketPubSub is not connected to a broker');\n    }\n    await writeFrame(activeSocket, frame);\n  }\n}\n"]}