48 lines
901 B
TypeScript
48 lines
901 B
TypeScript
import { Bonjour } from "bonjour-service"
|
|
|
|
let bonjour: Bonjour | undefined
|
|
let currentPort: number | undefined
|
|
|
|
export function publish(port: number, domain?: string) {
|
|
if (currentPort === port) return
|
|
if (bonjour) unpublish()
|
|
|
|
try {
|
|
const host = domain ?? "opencode.local"
|
|
const name = `opencode-${port}`
|
|
bonjour = new Bonjour()
|
|
const service = bonjour.publish({
|
|
name,
|
|
type: "http",
|
|
host,
|
|
port,
|
|
txt: { path: "/" },
|
|
})
|
|
|
|
service.on("error", () => {})
|
|
|
|
currentPort = port
|
|
} catch {
|
|
if (bonjour) {
|
|
try {
|
|
bonjour.destroy()
|
|
} catch {}
|
|
}
|
|
bonjour = undefined
|
|
currentPort = undefined
|
|
}
|
|
}
|
|
|
|
export function unpublish() {
|
|
if (bonjour) {
|
|
try {
|
|
bonjour.unpublishAll()
|
|
bonjour.destroy()
|
|
} catch {}
|
|
bonjour = undefined
|
|
currentPort = undefined
|
|
}
|
|
}
|
|
|
|
export * as MDNS from "./mdns"
|