{"version":3,"file":"switchboard-CgVB4U76.mjs","sources":["../src/services/switchboard.ts"],"sourcesContent":["import type {\n  IdentityOptions,\n  StartServerOptions,\n} from \"@powerhousedao/switchboard/server\";\nimport { startSwitchboard as startSwitchboardServer } from \"@powerhousedao/switchboard/server\";\nimport type { ILogger } from \"document-model\";\nimport path from \"node:path\";\nimport type { SwitchboardArgs } from \"../types.js\";\n\nconst EGRESS_ALLOW_ENV = \"PH_WORKFLOWS_EGRESS_ALLOW_ADDRESSES\";\nconst LOCALHOST_ADDRESSES = [\"127.0.0.1/32\", \"::1/128\"];\n\n// Lets pieces reach services on this machine, keeping any addresses already set\nexport function allowLocalhostEgress(env: NodeJS.ProcessEnv = process.env) {\n  const current = (env[EGRESS_ALLOW_ENV] ?? \"\")\n    .split(\",\")\n    .map((entry) => entry.trim())\n    .filter((entry) => entry !== \"\");\n  const missing = LOCALHOST_ADDRESSES.filter(\n    (address) => !current.includes(address),\n  );\n  if (missing.length > 0)\n    env[EGRESS_ALLOW_ENV] = [...current, ...missing].join(\",\");\n}\n\nexport const defaultSwitchboardOptions = {\n  port: 4001,\n  dbPath: path.join(process.cwd(), \".ph/read-model.db\"),\n  drive: {\n    id: \"powerhouse\",\n    slug: \"powerhouse\",\n    global: {\n      name: \"Powerhouse\",\n      icon: \"https://ipfs.io/ipfs/QmcaTDBYn8X2psGaXe7iQ6qd8q6oqHLgxvMX9yXf7f9uP7\",\n    },\n    local: {\n      availableOffline: true,\n      listeners: [],\n      sharingType: \"public\",\n      triggers: [],\n    },\n  },\n  mcp: true,\n} satisfies StartServerOptions;\n\nfunction getDefaultVetraSwitchboardOptions(\n  vetraDriveId: string,\n): Partial<StartServerOptions> {\n  return {\n    port: 4001,\n    dbPath: path.join(process.cwd(), \".ph/read-model.db\"),\n    drive: {\n      id: vetraDriveId,\n      slug: vetraDriveId,\n      global: {\n        name: \"Vetra\",\n        icon: \"https://azure-elderly-tortoise-212.mypinata.cloud/ipfs/bafkreibf2xokjqqtomqjd2w2xxmmhvogq4262csevclxh6sbrjgmjfre5u\",\n      },\n      preferredEditor: \"vetra-drive-app\",\n      local: {\n        availableOffline: true,\n        listeners: [],\n        sharingType: \"public\",\n        triggers: [],\n      },\n    },\n  };\n}\n\nexport async function startSwitchboard(\n  options: SwitchboardArgs & {\n    strictPort?: boolean;\n    processorConfig?: Map<string, unknown>;\n  },\n  logger?: ILogger,\n) {\n  const {\n    packages: packagesString,\n    remoteDrives,\n    useVetraDrive,\n    vetraDriveId,\n    useIdentity,\n    keypairPath,\n    requireIdentity,\n    ...serverOptions\n  } = options;\n\n  // Vetra and dev mode run against local services\n  if (useVetraDrive || serverOptions.dev) allowLocalhostEgress();\n\n  // Choose the appropriate default configuration\n  const defaultOptions = useVetraDrive\n    ? getDefaultVetraSwitchboardOptions(vetraDriveId)\n    : defaultSwitchboardOptions;\n\n  // Build identity options if enabled\n  const identity: IdentityOptions | undefined =\n    useIdentity || keypairPath || requireIdentity\n      ? {\n          keypairPath,\n          requireExisting: requireIdentity,\n        }\n      : undefined;\n\n  const packages = packagesString?.split(\",\");\n\n  // Only include the default drive if no remote drives are provided\n  const finalOptions =\n    remoteDrives.length > 0\n      ? {\n          ...defaultOptions,\n          drive: undefined, // Don't create default drive when syncing with remote\n          ...serverOptions,\n          remoteDrives,\n          identity,\n          packages,\n          logger,\n        }\n      : {\n          ...defaultOptions,\n          ...serverOptions,\n          remoteDrives,\n          identity,\n          packages,\n          logger,\n        };\n\n  const reactor = await startSwitchboardServer({\n    ...finalOptions,\n    fatalErrorShutdown: true,\n  });\n\n  return reactor;\n}\n"],"names":["startSwitchboard","startSwitchboardServer"],"mappings":";;;;;AASA,MAAM,mBAAmB;AACzB,MAAM,sBAAsB,CAAC,gBAAgB,SAAS;AAGtD,SAAgB,qBAAqB,MAAyB,QAAQ,KAAK;CACzE,MAAM,WAAW,IAAI,qBAAqB,GAAA,CACvC,MAAM,GAAG,CAAC,CACV,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,CAC5B,QAAQ,UAAU,UAAU,EAAE;CACjC,MAAM,UAAU,oBAAoB,QACjC,YAAY,CAAC,QAAQ,SAAS,OAAO,CACxC;CACA,IAAI,QAAQ,SAAS,GACnB,IAAI,oBAAoB,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,KAAK,GAAG;AAC7D;AAEA,MAAa,4BAA4B;CACvC,MAAM;CACN,QAAQ,KAAK,KAAK,QAAQ,IAAI,GAAG,mBAAmB;CACpD,OAAO;EACL,IAAI;EACJ,MAAM;EACN,QAAQ;GACN,MAAM;GACN,MAAM;EACR;EACA,OAAO;GACL,kBAAkB;GAClB,WAAW,CAAC;GACZ,aAAa;GACb,UAAU,CAAC;EACb;CACF;CACA,KAAK;AACP;AAEA,SAAS,kCACP,cAC6B;CAC7B,OAAO;EACL,MAAM;EACN,QAAQ,KAAK,KAAK,QAAQ,IAAI,GAAG,mBAAmB;EACpD,OAAO;GACL,IAAI;GACJ,MAAM;GACN,QAAQ;IACN,MAAM;IACN,MAAM;GACR;GACA,iBAAiB;GACjB,OAAO;IACL,kBAAkB;IAClB,WAAW,CAAC;IACZ,aAAa;IACb,UAAU,CAAC;GACb;EACF;CACF;AACF;AAEA,eAAsBA,mBACpB,SAIA,QACA;CACA,MAAM,EACJ,UAAU,gBACV,cACA,eACA,cACA,aACA,aACA,iBACA,GAAG,kBACD;CAGJ,IAAI,iBAAiB,cAAc,KAAK,qBAAqB;CAG7D,MAAM,iBAAiB,gBACnB,kCAAkC,YAAY,IAC9C;CAGJ,MAAM,WACJ,eAAe,eAAe,kBAC1B;EACE;EACA,iBAAiB;CACnB,IACA,KAAA;CAEN,MAAM,WAAW,gBAAgB,MAAM,GAAG;CAG1C,MAAM,eACJ,aAAa,SAAS,IAClB;EACE,GAAG;EACH,OAAO,KAAA;EACP,GAAG;EACH;EACA;EACA;EACA;CACF,IACA;EACE,GAAG;EACH,GAAG;EACH;EACA;EACA;EACA;CACF;CAON,OAAO,MALeC,iBAAuB;EAC3C,GAAG;EACH,oBAAoB;CACtB,CAAC;AAGH","debug_id":"e51b80bc-6b99-5160-8676-10829ab96d29"}