{"version":3,"sources":["../../src/config/index.ts","../../src/config/defineMeshConfig.ts","../../src/config/MeshConfigLoader.ts","../../src/core/errors.ts","../../src/utils/fs.ts","../../src/config/MeshConfigNormalizer.ts","../../src/hsm/HsmSchemaValidator.ts","../../src/hsm/HsmRouteMapper.ts","../../src/utils/origin.ts","../../src/hsm/HsmSchemaLoader.ts"],"sourcesContent":["export { defineMeshConfig } from './defineMeshConfig.js'\nexport { MeshConfigLoader } from './MeshConfigLoader.js'\nexport { MeshConfigNormalizer } from './MeshConfigNormalizer.js'\nexport type {\n  MeshConfig,\n  MeshRouterConfig,\n  MeshRouterTlsConfig,\n  MeshRuntimeConfig,\n  MeshObservabilityConfig,\n  NormalizedMeshObservabilityConfig,\n  MeshRegistryConfig,\n  MeshServiceConfig,\n  NormalizedMeshConfig,\n  NormalizedMeshRouterConfig,\n  NormalizedMeshRouterTlsConfig,\n  NormalizedMeshRegistryConfig,\n  NormalizedMeshServiceConfig,\n  MeshHsmBridgeConfig,\n  MeshHsmServiceBinding,\n  MeshHsmServiceMapping,\n  MeshHsmMappedRoute,\n  NormalizedMeshHsmBridgeConfig,\n  MeshCiConfig,\n  MeshCiFrontendConfig,\n  MeshCiBackendConfig,\n  MeshCiDrsConfig,\n  MeshCiFrontendStrategy,\n  MeshCiBackendStrategy,\n  MeshCiGenerateOptions,\n  NormalizedMeshCiConfig,\n  NormalizedMeshCiFrontendConfig,\n  NormalizedMeshCiBackendConfig,\n  NormalizedMeshCiDrsConfig\n} from '../core/types.js'\n","import type { MeshConfig } from '../core/types.js'\n\nexport function defineMeshConfig(config: MeshConfig): MeshConfig {\n  return config\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { createJiti } from 'jiti'\nimport { MeshConfigError } from '../core/errors.js'\nimport type { MeshConfig, NormalizedMeshConfig } from '../core/types.js'\nimport { pathExists } from '../utils/fs.js'\nimport { MeshConfigNormalizer } from './MeshConfigNormalizer.js'\nimport { HsmSchemaLoader } from '../hsm/HsmSchemaLoader.js'\n\nconst CONFIG_FILES = [\n  'mesh.config.ts',\n  'mesh.config.mts',\n  'mesh.config.cts',\n  'mesh.config.js',\n  'mesh.config.mjs',\n  'mesh.config.cjs',\n  'mesh.config.json'\n] as const\n\nexport class MeshConfigLoader {\n  private readonly normalizer = new MeshConfigNormalizer()\n  private readonly hsmLoader = new HsmSchemaLoader()\n\n  public async findConfig(projectRoot = process.cwd()): Promise<string> {\n    for (const file of CONFIG_FILES) {\n      const candidate = path.resolve(projectRoot, file)\n      if (await pathExists(candidate)) return candidate\n    }\n    throw new MeshConfigError(`No mesh config found in ${projectRoot}. Run: npx @panomapp/mesh init`)\n  }\n\n  public async load(configPath?: string, projectRoot = process.cwd()): Promise<NormalizedMeshConfig> {\n    const resolvedPath = configPath ? path.resolve(projectRoot, configPath) : await this.findConfig(projectRoot)\n    const raw = await this.loadRaw(resolvedPath)\n    const hydrated = await this.hsmLoader.hydrateConfig(raw, resolvedPath)\n    return this.normalizer.normalize(hydrated, path.dirname(resolvedPath), resolvedPath)\n  }\n\n  private async loadRaw(configPath: string): Promise<MeshConfig> {\n    if (!fs.existsSync(configPath)) throw new MeshConfigError(`Mesh config not found: ${configPath}`)\n\n    if (configPath.endsWith('.json')) {\n      const text = await fs.promises.readFile(configPath, 'utf8')\n      return JSON.parse(text) as MeshConfig\n    }\n\n    const jiti = createJiti(configPath, { interopDefault: true })\n    const mod = await jiti.import(configPath)\n    const loaded = (mod as { default?: unknown }).default ?? mod\n    if (!loaded || typeof loaded !== 'object') {\n      throw new MeshConfigError(`Mesh config must export an object: ${configPath}`)\n    }\n    return loaded as MeshConfig\n  }\n}\n","export class MeshError extends Error {\n  public constructor(message: string) {\n    super(message)\n    this.name = new.target.name\n  }\n}\n\nexport class MeshConfigError extends MeshError {}\nexport class MeshStateError extends MeshError {}\nexport class MeshProcessError extends MeshError {}\nexport class MeshIdResolutionError extends MeshError {}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport async function ensureDir(dir: string): Promise<void> {\n  await fs.promises.mkdir(dir, { recursive: true })\n}\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n  try {\n    await fs.promises.access(filePath)\n    return true\n  } catch {\n    return false\n  }\n}\n\nexport async function atomicWriteJson(filePath: string, value: unknown): Promise<void> {\n  await ensureDir(path.dirname(filePath))\n  const tempPath = `${filePath}.${process.pid}.${Date.now()}.tmp`\n  await fs.promises.writeFile(tempPath, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n  await fs.promises.rename(tempPath, filePath)\n}\n","import path from 'node:path'\nimport { MeshConfigError } from '../core/errors.js'\nimport type {\n  MeshConfig,\n  MeshPortRange,\n  MeshServiceConfig,\n  NormalizedMeshConfig,\n  NormalizedMeshRegistryConfig,\n  NormalizedMeshRuntimeConfig,\n  NormalizedMeshServiceConfig,\n  NormalizedMeshRouterConfig,\n  NormalizedMeshObservabilityConfig,\n  NormalizedMeshStreamingConfig,\n  NormalizedMeshCoordinationConfig,\n  MeshHsmMappedRoute,\n  NormalizedMeshHsmBridgeConfig,\n  NormalizedMeshCiConfig,\n  NormalizedMeshTestConfig\n} from '../core/types.js'\nimport { HsmRouteMapper } from '../hsm/HsmRouteMapper.js'\nimport { HsmSchemaValidator } from '../hsm/HsmSchemaValidator.js'\nimport { formatOrigin } from '../utils/origin.js'\n\nconst DEFAULT_PORT_RANGE: MeshPortRange = { from: 31_000, to: 32_999 }\n\nexport class MeshConfigNormalizer {\n  public normalize(config: MeshConfig, projectRoot = process.cwd(), configPath = path.join(projectRoot, 'mesh.config.ts')): NormalizedMeshConfig {\n    this.assertConfig(config)\n\n    const runtime = this.normalizeRuntime(config, projectRoot)\n    const router = this.normalizeRouter(config, projectRoot)\n    const observability = this.normalizeObservability(config)\n    const registry = this.normalizeRegistry(config, router)\n    const streaming = this.normalizeStreaming(config, registry)\n    const coordination = this.normalizeCoordination(config, registry, streaming)\n    const hsm = this.normalizeHsm(config)\n    const hsmRoutesByService = this.groupHsmRoutes(hsm.routes)\n    const services = new Map<string, NormalizedMeshServiceConfig>()\n    const tests = this.normalizeTests(config, projectRoot)\n\n    for (const [name, service] of Object.entries(config.services)) {\n      services.set(name, this.normalizeService(name, service, runtime, projectRoot, hsmRoutesByService.get(name) ?? []))\n    }\n\n    const ci = this.normalizeCi(config, services)\n\n    return {\n      app: config.app,\n      projectRoot,\n      configPath,\n      router,\n      observability,\n      streaming,\n      coordination,\n      runtime,\n      registry,\n      hsm,\n      ci,\n      tests,\n      services\n    }\n  }\n\n  private normalizeTests(config: MeshConfig, projectRoot: string): ReadonlyMap<string, NormalizedMeshTestConfig> {\n    const normalized = new Map<string, NormalizedMeshTestConfig>()\n    for (const [name, test] of Object.entries(config.tests ?? {})) {\n      if (!name.trim()) throw new MeshConfigError('Mesh test names must be non-empty.')\n      const command = typeof test.command === 'string' ? test.command : test.command.join(' ')\n      if (!command.trim()) throw new MeshConfigError(`Mesh test \"${name}\" must define a non-empty command.`)\n      normalized.set(name, {\n        name,\n        command: command.trim(),\n        cwd: path.resolve(projectRoot, test.cwd ?? '.'),\n        env: this.normalizeEnv(test.env ?? {})\n      })\n    }\n    return normalized\n  }\n\n  private normalizeHsm(config: MeshConfig): NormalizedMeshHsmBridgeConfig {\n    const hsm = config.hsm\n    const routeMode = hsm?.routeMode ?? 'both'\n    const strict = hsm?.strict ?? false\n    if (!hsm) {\n      return { enabled: false, routeMode, strict, routes: [] }\n    }\n    if (routeMode !== 'canonical' && routeMode !== 'backend' && routeMode !== 'both') {\n      throw new MeshConfigError('hsm.routeMode must be canonical, backend or both.')\n    }\n    const schema = hsm.schema\n    if (!schema) {\n      if (strict) throw new MeshConfigError('hsm.schema or hsm.schemaPath is required when hsm.strict is true.')\n      return {\n        enabled: false,\n        ...(hsm.schemaPath !== undefined ? { schemaPath: hsm.schemaPath } : {}),\n        routeMode,\n        strict,\n        routes: []\n      }\n    }\n    const hsmValidator: HsmSchemaValidator = new HsmSchemaValidator()\n    hsmValidator.assertValid(schema)\n    const routes = new HsmRouteMapper().map({\n      schema,\n      routeMode,\n      strict,\n      mappings: hsm.mappings ?? [],\n      services: config.services\n    })\n    return {\n      enabled: true,\n      schema,\n      ...(hsm.schemaPath !== undefined ? { schemaPath: hsm.schemaPath } : {}),\n      routeMode,\n      strict,\n      routes\n    }\n  }\n\n  private groupHsmRoutes(routes: readonly MeshHsmMappedRoute[]): ReadonlyMap<string, readonly MeshHsmMappedRoute[]> {\n    const grouped = new Map<string, MeshHsmMappedRoute[]>()\n    for (const route of routes) {\n      const existing = grouped.get(route.service) ?? []\n      existing.push(route)\n      grouped.set(route.service, existing)\n    }\n    return grouped\n  }\n\n  private normalizeRuntime(config: MeshConfig, projectRoot: string): NormalizedMeshRuntimeConfig {\n    const runtime = config.runtime ?? {}\n    return {\n      mode: runtime.mode ?? 'process',\n      podman: this.normalizePodman(config.app, runtime.podman ?? {}, projectRoot),\n      stateDir: path.resolve(projectRoot, runtime.stateDir ?? '.mesh'),\n      logsDir: path.resolve(projectRoot, runtime.logsDir ?? '.mesh/logs'),\n      defaultWatch: runtime.defaultWatch ?? true,\n      portRange: this.normalizePortRange(runtime.portRange ?? DEFAULT_PORT_RANGE, 'runtime.portRange'),\n      drainTimeoutMs: runtime.drainTimeoutMs ?? 10_000,\n      shutdownTimeoutMs: runtime.shutdownTimeoutMs ?? 8_000,\n      killTimeoutMs: runtime.killTimeoutMs ?? 2_000\n    }\n  }\n\n\n  private normalizePodman(app: string, podman: NonNullable<MeshConfig['runtime']>['podman'], projectRoot: string) {\n    const prefix = podman?.containerPrefix ?? this.slug(app)\n    return {\n      podmanPath: podman?.podmanPath ?? 'podman',\n      network: podman?.network ?? `${prefix}-mesh`,\n      createNetwork: podman?.createNetwork ?? true,\n      containerPrefix: prefix,\n      routerImage: podman?.routerImage ?? 'ghcr.io/panomapp/mesh-router:latest',\n      routerContainerPort: podman?.routerContainerPort ?? 8080,\n      publishHost: podman?.publishHost ?? '127.0.0.1',\n      replace: podman?.replace ?? true,\n      pull: podman?.pull ?? 'missing',\n      quadlet: {\n        outputDir: path.resolve(projectRoot, podman?.quadlet?.outputDir ?? '.mesh/quadlet'),\n        user: podman?.quadlet?.user ?? true,\n        installCommand: podman?.quadlet?.installCommand ?? true,\n        configSourceDir: path.resolve(projectRoot, podman?.quadlet?.configSourceDir ?? '.mesh/runtime-bundle'),\n        configTargetDir: podman?.quadlet?.configTargetDir ?? '/workspace'\n      },\n      redis: {\n        enabled: podman?.redis?.enabled ?? false,\n        image: podman?.redis?.image ?? 'docker.io/redis:7-alpine',\n        containerName: podman?.redis?.containerName ?? `${prefix}-redis`,\n        port: podman?.redis?.port ?? 6379,\n        volume: podman?.redis?.volume ?? `${prefix}-redis-data`\n      }\n    }\n  }\n\n  private normalizeRegistry(config: MeshConfig, router: NormalizedMeshRouterConfig): NormalizedMeshRegistryConfig {\n    const registry = config.registry ?? {}\n    const type = registry.type ?? (registry.url ? 'redis' : 'file')\n    if (type === 'redis' && !registry.url) {\n      throw new MeshConfigError('registry.url is required when registry.type is \"redis\".')\n    }\n    return {\n      type,\n      url: registry.url ?? '',\n      ...(registry.keyPrefix !== undefined ? { keyPrefix: registry.keyPrefix } : {}),\n      secret: registry.secret ?? router.secret,\n      requireSignature: registry.requireSignature ?? type === 'redis',\n      heartbeatIntervalMs: registry.heartbeatIntervalMs ?? 5_000,\n      ttlMs: registry.ttlMs ?? 15_000,\n      connectTimeoutMs: registry.connectTimeoutMs ?? 5_000\n    }\n  }\n\n\n  private normalizeStreaming(config: MeshConfig, registry: NormalizedMeshRegistryConfig): NormalizedMeshStreamingConfig {\n    const streaming = config.streaming ?? {}\n    const transport = streaming.transport ?? (registry.type === 'redis' ? 'redis' : 'memory')\n    if (transport !== 'memory' && transport !== 'redis') {\n      throw new MeshConfigError('streaming.transport must be memory or redis.')\n    }\n    if (transport === 'redis' && !(streaming.url ?? registry.url)) {\n      throw new MeshConfigError('streaming.url or registry.url is required when streaming.transport is \"redis\".')\n    }\n    const keyPrefix = streaming.keyPrefix ?? registry.keyPrefix ?? `mesh:${config.app}`\n    return {\n      enabled: streaming.enabled ?? registry.type === 'redis',\n      transport,\n      url: streaming.url ?? registry.url,\n      keyPrefix,\n      logs: streaming.logs ?? true,\n      events: streaming.events ?? true,\n      maxLogChunkBytes: streaming.maxLogChunkBytes ?? 32_768,\n      connectTimeoutMs: streaming.connectTimeoutMs ?? registry.connectTimeoutMs\n    }\n  }\n\n\n  private normalizeCoordination(config: MeshConfig, registry: NormalizedMeshRegistryConfig, streaming: NormalizedMeshStreamingConfig): NormalizedMeshCoordinationConfig {\n    const coordination = config.coordination ?? {}\n    const backend = coordination.backend ?? (registry.type === 'redis' ? 'redis' : 'memory')\n    if (backend !== 'memory' && backend !== 'redis') {\n      throw new MeshConfigError('coordination.backend must be memory or redis.')\n    }\n    const url = coordination.url ?? registry.url ?? streaming.url\n    if (backend === 'redis' && !url) {\n      throw new MeshConfigError('coordination.url or registry.url is required when coordination.backend is \"redis\".')\n    }\n    const keyPrefix = coordination.keyPrefix ?? registry.keyPrefix ?? streaming.keyPrefix ?? `mesh:${config.app}`\n    const locks = coordination.locks ?? {}\n    const lockBackend = locks.backend ?? backend\n    const lockUrl = locks.url ?? url\n    if (lockBackend === 'redis' && !lockUrl) {\n      throw new MeshConfigError('coordination.locks.url or coordination.url is required when lock backend is \"redis\".')\n    }\n    const leader = coordination.leader ?? {}\n    const cleanup = coordination.cleanup ?? {}\n    const enabled = coordination.enabled ?? locks.enabled ?? leader.enabled ?? cleanup.enabled ?? backend === 'redis'\n    return {\n      enabled,\n      backend,\n      url,\n      keyPrefix,\n      connectTimeoutMs: coordination.connectTimeoutMs ?? registry.connectTimeoutMs,\n      locks: {\n        enabled: locks.enabled ?? enabled,\n        backend: lockBackend,\n        url: lockUrl,\n        ttlMs: locks.ttlMs ?? 30_000,\n        waitMs: locks.waitMs ?? 0\n      },\n      leader: {\n        enabled: leader.enabled ?? enabled,\n        ttlMs: leader.ttlMs ?? 30_000,\n        renewEveryMs: leader.renewEveryMs ?? 10_000\n      },\n      cleanup: {\n        enabled: cleanup.enabled ?? false\n      }\n    }\n  }\n\n  private normalizeObservability(config: MeshConfig): NormalizedMeshObservabilityConfig {\n    const observability = config.observability ?? {}\n    const rawPath = observability.path ?? '/_mesh'\n    const path = rawPath === '/' ? '/_mesh' : `/${rawPath.replace(/^\\/+|\\/+$/g, '')}`\n    return {\n      enabled: observability.enabled ?? true,\n      path,\n      refreshIntervalMs: observability.refreshIntervalMs ?? 1_000,\n      logLines: observability.logLines ?? 20,\n      includeLogs: observability.includeLogs ?? false\n    }\n  }\n\n\n  private normalizeRouter(config: MeshConfig, projectRoot: string): NormalizedMeshRouterConfig {\n    const router = config.router ?? {}\n    const tls = router.tls ?? {}\n    const tlsEnabled = tls.enabled ?? false\n    const additionalPorts = this.normalizeAdditionalPorts(tls.additionalPorts ?? [], router.port ?? 8080)\n    const certPath = tls.certPath ? path.resolve(projectRoot, tls.certPath) : undefined\n    const keyPath = tls.keyPath ? path.resolve(projectRoot, tls.keyPath) : undefined\n    const caPath = tls.caPath ? path.resolve(projectRoot, tls.caPath) : undefined\n    if (tlsEnabled && (!certPath || !keyPath)) {\n      throw new MeshConfigError('router.tls.certPath and router.tls.keyPath are required when router.tls.enabled is true.')\n    }\n    const port = router.port ?? 8080\n    const protocol = tlsEnabled ? 'https' as const : 'http' as const\n    const publicPorts = [port, ...additionalPorts]\n    const canonicalPort = tlsEnabled && publicPorts.includes(443) ? 443 : port\n    return {\n      enabled: router.enabled ?? true,\n      host: router.host ?? '127.0.0.1',\n      port,\n      sessionAffinity: router.sessionAffinity ?? true,\n      cookieName: router.cookieName ?? 'pm_mesh',\n      secret: router.secret ?? 'dev-only-mesh-secret',\n      requestTimeoutMs: router.requestTimeoutMs ?? 30_000,\n      secureCookies: router.secureCookies ?? tlsEnabled,\n      drainTimeoutMs: router.drainTimeoutMs ?? 15_000,\n      socketDrainTimeoutMs: router.socketDrainTimeoutMs ?? 10_000,\n      protocol,\n      publicOrigin: formatOrigin(protocol, router.host ?? '127.0.0.1', canonicalPort),\n      publicOrigins: publicPorts.map((listenPort) => formatOrigin(protocol, router.host ?? '127.0.0.1', listenPort)),\n      tls: {\n        enabled: tlsEnabled,\n        ...(certPath ? { certPath } : {}),\n        ...(keyPath ? { keyPath } : {}),\n        ...(caPath ? { caPath } : {}),\n        ...(tls.passphraseEnv ? { passphraseEnv: tls.passphraseEnv } : {}),\n        ...(tls.minVersion ? { minVersion: tls.minVersion } : {}),\n        additionalPorts,\n      }\n    }\n  }\n\n  private normalizeAdditionalPorts(ports: readonly number[], primaryPort: number): readonly number[] {\n    const unique = new Set<number>()\n    for (const port of ports) {\n      if (!Number.isInteger(port) || port < 1 || port > 65_535) {\n        throw new MeshConfigError('router.tls.additionalPorts must contain valid TCP ports.')\n      }\n      if (port !== primaryPort) unique.add(port)\n    }\n    return [...unique].sort((a, b) => a - b)\n  }\n\n  private normalizeService(\n    name: string,\n    service: MeshServiceConfig,\n    runtime: NormalizedMeshRuntimeConfig,\n    projectRoot: string,\n    hsmRoutes: readonly MeshHsmMappedRoute[] = []\n  ): NormalizedMeshServiceConfig {\n    if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(name)) {\n      throw new MeshConfigError(`Invalid service name \"${name}\". Use letters, numbers, _ or -.`)\n    }\n\n    const command = Array.isArray(service.command) ? service.command : [service.command]\n    if (command.length === 0 || command.some(part => !part.trim())) {\n      throw new MeshConfigError(`Service \"${name}\" must define a non-empty command.`)\n    }\n\n    const instances = service.instances ?? 1\n    if (!Number.isInteger(instances) || instances < 0) {\n      throw new MeshConfigError(`Service \"${name}\" instances must be a non-negative integer.`)\n    }\n\n    const configuredRoutes = service.route === undefined\n      ? []\n      : Array.isArray(service.route)\n        ? service.route\n        : [service.route]\n    const routes = this.dedupeRoutes([...configuredRoutes, ...hsmRoutes.map(route => route.route)])\n\n    for (const route of routes) {\n      if (!route.startsWith('/')) {\n        throw new MeshConfigError(`Service \"${name}\" route \"${route}\" must start with /.`)\n      }\n    }\n\n    return {\n      name,\n      type: service.type ?? 'backend',\n      command,\n      ...(service.image !== undefined ? { image: service.image } : {}),\n      podman: this.normalizeServicePodman(name, service),\n      shell: typeof service.command === 'string',\n      cwd: path.resolve(projectRoot, service.cwd ?? '.'),\n      instances,\n      ...(service.port !== undefined ? { port: service.port } : {}),\n      portRange: this.normalizePortRange(service.portRange ?? runtime.portRange, `services.${name}.portRange`),\n      routes,\n      hsmRoutes,\n      ...(service.healthPath !== undefined ? { healthPath: service.healthPath } : {}),\n      strategy: service.strategy ?? 'round-robin',\n      watch: service.watch ?? runtime.defaultWatch,\n      env: this.normalizeEnv(service.env ?? {}),\n      autoRestart: service.autoRestart ?? false,\n      drainTimeoutMs: service.drainTimeoutMs ?? runtime.drainTimeoutMs,\n      shutdownTimeoutMs: service.shutdownTimeoutMs ?? runtime.shutdownTimeoutMs\n    }\n  }\n\n  private normalizeServicePodman(name: string, service: MeshServiceConfig) {\n    const podman = service.podman ?? {}\n    const toCommand = (value: string | readonly string[] | undefined): readonly string[] | undefined => {\n      if (value === undefined) return undefined\n      return typeof value === 'string' ? [value] : value\n    }\n    const containerPort = podman.containerPort ?? service.port ?? (service.type === 'frontend' ? 5173 : 3000)\n    if (!Number.isInteger(containerPort) || containerPort < 1 || containerPort > 65_535) {\n      throw new MeshConfigError(`Service \"${name}\" podman.containerPort must be a valid TCP port.`)\n    }\n    return {\n      ...(podman.image !== undefined ? { image: podman.image } : {}),\n      ...(toCommand(podman.command) !== undefined ? { command: toCommand(podman.command)! } : {}),\n      ...(toCommand(podman.entrypoint) !== undefined ? { entrypoint: toCommand(podman.entrypoint)! } : {}),\n      containerPort,\n      publish: podman.publish ?? [],\n      volumes: podman.volumes ?? [],\n      labels: this.normalizeEnv(podman.labels ?? {}),\n      env: this.normalizeEnv(podman.env ?? {}),\n      user: podman.user ?? '',\n      workdir: podman.workdir ?? '',\n      restartPolicy: podman.restartPolicy ?? 'unless-stopped',\n      networkAliases: podman.networkAliases ?? [],\n      extraArgs: podman.extraArgs ?? []\n    }\n  }\n\n  private dedupeRoutes(routes: readonly string[]): readonly string[] {\n    const seen = new Set<string>()\n    const output: string[] = []\n    for (const route of routes) {\n      const normalized = route.startsWith('/') ? (route === '/' ? '/' : `/${route.replace(/^\\/+|\\/+$/g, '')}`) : route\n      if (seen.has(normalized)) continue\n      seen.add(normalized)\n      output.push(normalized)\n    }\n    output.sort((a, b) => b.length - a.length || a.localeCompare(b))\n    return output\n  }\n\n  private slug(value: string): string {\n    const slug = value.toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^-+|-+$/g, '')\n    return slug || 'mesh'\n  }\n\n  private normalizeCi(config: MeshConfig, services: ReadonlyMap<string, NormalizedMeshServiceConfig>): NormalizedMeshCiConfig {\n    const ci = config.ci ?? {}\n    const enabled = config.ci !== undefined\n\n    // Derive default backend envSecrets from the union of all backend/worker service env keys.\n    const derivedBackendSecrets = (): readonly string[] => {\n      const keys = new Set<string>()\n      for (const svc of services.values()) {\n        if (svc.type === 'backend' || svc.type === 'worker') {\n          for (const key of Object.keys(svc.env)) keys.add(key)\n        }\n      }\n      return [...keys].sort()\n    }\n\n    // Derive default frontend buildArgs from the frontend service's podman.env keys (VITE_* etc.).\n    const derivedFrontendArgs = (): readonly string[] => {\n      const keys = new Set<string>()\n      for (const svc of services.values()) {\n        if (svc.type === 'frontend') {\n          for (const key of Object.keys(svc.podman.env)) keys.add(key)\n        }\n      }\n      return [...keys].sort()\n    }\n\n    return {\n      enabled,\n      branch: ci.branch ?? 'main',\n      frontend: {\n        strategy: ci.frontend?.strategy ?? 'rsync',\n        buildArgs: ci.frontend?.buildArgs ?? derivedFrontendArgs()\n      },\n      backend: {\n        strategy: ci.backend?.strategy ?? 'podman',\n        envSecrets: ci.backend?.envSecrets ?? derivedBackendSecrets()\n      },\n      drs: {\n        enabled: ci.drs?.enabled ?? false\n      }\n    }\n  }\n\n  private normalizeEnv(env: Record<string, string | number | boolean | null | undefined>): Record<string, string> {\n    const normalized: Record<string, string> = {}\n    for (const [key, value] of Object.entries(env)) {\n      if (value === null || value === undefined) continue\n      normalized[key] = String(value)\n    }\n    return normalized\n  }\n\n  private normalizePortRange(range: MeshPortRange, field: string): MeshPortRange {\n    if (!Number.isInteger(range.from) || !Number.isInteger(range.to) || range.from < 1 || range.to > 65_535 || range.from > range.to) {\n      throw new MeshConfigError(`${field} must be a valid TCP port range.`)\n    }\n    return range\n  }\n\n  private assertConfig(config: MeshConfig): void {\n    if (!config || typeof config !== 'object') throw new MeshConfigError('Mesh config must be an object.')\n    if (!config.app || typeof config.app !== 'string') throw new MeshConfigError('Mesh config requires app name.')\n    if (!config.services || typeof config.services !== 'object') throw new MeshConfigError('Mesh config requires services.')\n  }\n}\n","import { MeshConfigError } from '../core/errors.js'\nimport type { MeshHsmSchemaLike } from '../core/types.js'\n\nexport class HsmSchemaValidator {\n  public assertValid(schema: unknown): asserts schema is MeshHsmSchemaLike {\n    if (!schema || typeof schema !== 'object' || Array.isArray(schema)) {\n      throw new MeshConfigError('hsm.schema must be an object compatible with a compiled @panomapp/hsm schema.')\n    }\n    const candidate = schema as MeshHsmSchemaLike\n    if (candidate.kind !== undefined && candidate.kind !== 'panom-hsm.schema') {\n      throw new MeshConfigError(`Unsupported hsm.schema kind: ${String(candidate.kind)}.`)\n    }\n    if (!candidate.index || typeof candidate.index !== 'object') {\n      throw new MeshConfigError('hsm.schema.index is required.')\n    }\n    if (!Array.isArray(candidate.index.states)) {\n      throw new MeshConfigError('hsm.schema.index.states must be an array.')\n    }\n    if (candidate.index.routes !== undefined && !Array.isArray(candidate.index.routes)) {\n      throw new MeshConfigError('hsm.schema.index.routes must be an array when provided.')\n    }\n    for (const [index, state] of candidate.index.states.entries()) {\n      if (!state || typeof state !== 'object' || typeof state.id !== 'string' || state.id.length === 0) {\n        throw new MeshConfigError(`hsm.schema.index.states[${index}].id must be a non-empty string.`)\n      }\n    }\n    for (const [index, route] of (candidate.index.routes ?? []).entries()) {\n      if (!route || typeof route !== 'object' || typeof route.stateId !== 'string' || route.stateId.length === 0) {\n        throw new MeshConfigError(`hsm.schema.index.routes[${index}].stateId must be a non-empty string.`)\n      }\n      const pattern = route.canonicalPattern ?? route.pattern\n      if (pattern !== undefined && (typeof pattern !== 'string' || !pattern.startsWith('/'))) {\n        throw new MeshConfigError(`hsm.schema.index.routes[${index}] pattern must start with /.`)\n      }\n    }\n  }\n}\n","import { MeshConfigError } from '../core/errors.js'\nimport type {\n  MeshHsmMappedRoute,\n  MeshHsmRouteMode,\n  MeshHsmSchemaLike,\n  MeshHsmSchemaStateIndexEntry,\n  MeshHsmServiceBinding,\n  MeshHsmServiceMapping,\n  MeshServiceConfig\n} from '../core/types.js'\nimport { HsmSchemaValidator } from './HsmSchemaValidator.js'\n\nexport interface HsmRouteMapperOptions {\n  readonly schema: MeshHsmSchemaLike\n  readonly routeMode: MeshHsmRouteMode\n  readonly strict: boolean\n  readonly mappings: readonly MeshHsmServiceMapping[]\n  readonly services: Record<string, MeshServiceConfig>\n}\n\nexport class HsmRouteMapper {\n  private readonly validator: HsmSchemaValidator = new HsmSchemaValidator()\n\n  public map(options: HsmRouteMapperOptions): readonly MeshHsmMappedRoute[] {\n    this.validator.assertValid(options.schema)\n    const routes: MeshHsmMappedRoute[] = []\n    const stateById = new Map<string, MeshHsmSchemaStateIndexEntry>()\n    for (const state of options.schema.index?.states ?? []) stateById.set(state.id, state)\n\n    const mappings = this.collectMappings(options.services, options.mappings)\n    for (const mapping of mappings) {\n      if (!options.services[mapping.service]) {\n        if (options.strict) throw new MeshConfigError(`HSM mapping references unknown mesh service: ${mapping.service}`)\n        continue\n      }\n      const selectedStates = this.selectStates(stateById, mapping)\n      if (selectedStates.length === 0 && options.strict) {\n        throw new MeshConfigError(`HSM mapping for service \"${mapping.service}\" matched no states.`)\n      }\n      const selectedIds = new Set(selectedStates.map(state => state.id))\n      if (this.includeCanonical(mapping, options.routeMode)) {\n        for (const route of options.schema.index?.routes ?? []) {\n          if (!selectedIds.has(route.stateId)) continue\n          if (route.kind === 'virtual') continue\n          if (route.isAlias && route.redirectToCanonical) continue\n          const pattern = route.canonicalPattern ?? route.pattern\n          if (!pattern) continue\n          routes.push(this.toMappedRoute(mapping, 'hsm:canonical', route.stateId, pattern))\n        }\n      }\n      if (this.includeBackend(mapping, options.routeMode)) {\n        for (const state of selectedStates) {\n          for (const route of state.backend?.routes ?? []) {\n            routes.push(this.toMappedRoute(mapping, 'hsm:backend', state.id, route, state.backend?.methods))\n          }\n        }\n      }\n    }\n\n    return this.dedupe(routes)\n  }\n\n  public summarize(routes: readonly MeshHsmMappedRoute[]): string {\n    if (routes.length === 0) return 'No HSM routes mapped.\\n'\n    const rows = routes.map(route => ({\n      service: route.service,\n      route: route.route,\n      source: route.source,\n      state: route.stateId,\n      methods: route.methods?.join(',') ?? '-'\n    }))\n    const headers = ['SERVICE', 'ROUTE', 'SOURCE', 'STATE', 'METHODS']\n    const keys = ['service', 'route', 'source', 'state', 'methods'] as const\n    const widths = keys.map((key, index) => Math.max(headers[index]!.length, ...rows.map(row => row[key].length)))\n    const fmt = (values: readonly string[]) => values.map((value, index) => value.padEnd(widths[index]!)).join('  ')\n    return `${fmt(headers)}\\n${fmt(widths.map(w => '-'.repeat(w)))}\\n${rows.map(row => fmt(keys.map(key => row[key]))).join('\\n')}\\n`\n  }\n\n  private collectMappings(services: Record<string, MeshServiceConfig>, topLevel: readonly MeshHsmServiceMapping[]): readonly MeshHsmServiceMapping[] {\n    const mappings: MeshHsmServiceMapping[] = [...topLevel]\n    for (const [service, config] of Object.entries(services)) {\n      if (!config.hsm) continue\n      mappings.push({ service, ...config.hsm })\n    }\n    return mappings\n  }\n\n  private selectStates(stateById: Map<string, MeshHsmSchemaStateIndexEntry>, mapping: MeshHsmServiceMapping): readonly MeshHsmSchemaStateIndexEntry[] {\n    const states = Array.from(stateById.values())\n    const selectors = mapping.states ?? []\n    const tags = new Set(mapping.tags ?? [])\n    if (selectors.length === 0 && tags.size === 0) return []\n    return states.filter(state => {\n      const byState = selectors.some(selector => this.matchesStateSelector(state.id, selector))\n      const byTag = (state.tags ?? []).some(tag => tags.has(tag))\n      return byState || byTag\n    })\n  }\n\n  private matchesStateSelector(stateId: string, selector: string): boolean {\n    if (selector === stateId) return true\n    if (selector.endsWith('.*')) return stateId.startsWith(selector.slice(0, -2) + '.')\n    return false\n  }\n\n  private includeCanonical(mapping: MeshHsmServiceBinding, mode: MeshHsmRouteMode): boolean {\n    if (mapping.includeCanonicalRoutes !== undefined) return mapping.includeCanonicalRoutes\n    return mode === 'canonical' || mode === 'both'\n  }\n\n  private includeBackend(mapping: MeshHsmServiceBinding, mode: MeshHsmRouteMode): boolean {\n    if (mapping.includeBackendRoutes !== undefined) return mapping.includeBackendRoutes\n    return mode === 'backend' || mode === 'both'\n  }\n\n  private toMappedRoute(\n    mapping: MeshHsmServiceMapping,\n    source: MeshHsmMappedRoute['source'],\n    stateId: string,\n    pattern: string,\n    methods?: readonly string[]\n  ): MeshHsmMappedRoute {\n    const transformed = this.applyRouteTransforms(pattern, mapping)\n    const effectiveMethods = mapping.methods ?? methods\n    const mapped: MeshHsmMappedRoute = {\n      service: mapping.service,\n      route: this.toRoutablePattern(transformed),\n      source,\n      stateId,\n      originalPattern: pattern\n    }\n    return effectiveMethods === undefined ? mapped : { ...mapped, methods: effectiveMethods }\n  }\n\n  private applyRouteTransforms(route: string, mapping: MeshHsmServiceMapping): string {\n    let output = this.normalizePattern(route)\n    if (mapping.stripPrefix) {\n      const prefix = this.normalizePattern(mapping.stripPrefix)\n      if (output === prefix) output = '/'\n      else if (output.startsWith(`${prefix}/`)) output = output.slice(prefix.length) || '/'\n    }\n    if (mapping.routePrefix) {\n      const prefix = this.normalizePattern(mapping.routePrefix)\n      if (prefix !== '/') output = output === '/' ? prefix : `${prefix}${output}`\n    }\n    return this.normalizePattern(output)\n  }\n\n  private toRoutablePattern(pattern: string): string {\n    const normalized = this.normalizePattern(pattern)\n    if (normalized === '/') return '/'\n    return normalized\n  }\n\n  private normalizePattern(route: string): string {\n    const trimmed = route.trim()\n    if (!trimmed || !trimmed.startsWith('/')) throw new MeshConfigError(`HSM route pattern must start with /: ${route}`)\n    if (trimmed === '/') return '/'\n    return `/${trimmed.replace(/^\\/+|\\/+$/g, '')}`\n  }\n\n  private dedupe(routes: readonly MeshHsmMappedRoute[]): readonly MeshHsmMappedRoute[] {\n    const seen = new Set<string>()\n    const output: MeshHsmMappedRoute[] = []\n    for (const route of routes) {\n      const key = `${route.service}:${route.route}:${route.source}:${route.stateId}:${route.methods?.join(',') ?? '*'}`\n      if (seen.has(key)) continue\n      seen.add(key)\n      output.push(route)\n    }\n    output.sort((a, b) => a.service.localeCompare(b.service) || b.route.length - a.route.length || a.route.localeCompare(b.route))\n    return output\n  }\n}\n","export function formatOrigin(protocol: 'http' | 'https', host: string, port: number): string {\n  const defaultPort = protocol === 'https' ? 443 : 80\n  return port === defaultPort ? `${protocol}://${host}` : `${protocol}://${host}:${port}`\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { createJiti } from 'jiti'\nimport { MeshConfigError } from '../core/errors.js'\nimport type { MeshConfig, MeshHsmSchemaLike } from '../core/types.js'\nimport { HsmSchemaValidator } from './HsmSchemaValidator.js'\n\nexport class HsmSchemaLoader {\n  private readonly validator: HsmSchemaValidator = new HsmSchemaValidator()\n\n  public async hydrateConfig(config: MeshConfig, configPath: string): Promise<MeshConfig> {\n    const hsm = config.hsm\n    if (!hsm?.schemaPath || hsm.schema) return config\n    const schema = await this.loadSchema(path.resolve(path.dirname(configPath), hsm.schemaPath))\n    return {\n      ...config,\n      hsm: {\n        ...hsm,\n        schema\n      }\n    }\n  }\n\n  public async loadSchema(schemaPath: string): Promise<MeshHsmSchemaLike> {\n    if (!fs.existsSync(schemaPath)) throw new MeshConfigError(`HSM schema file not found: ${schemaPath}`)\n    let loaded: unknown\n    if (schemaPath.endsWith('.json')) {\n      loaded = JSON.parse(await fs.promises.readFile(schemaPath, 'utf8'))\n    } else {\n      const jiti = createJiti(schemaPath, { interopDefault: true })\n      const mod = await jiti.import(schemaPath)\n      loaded = (mod as { default?: unknown }).default ?? mod\n    }\n    this.validator.assertValid(loaded)\n    return loaded\n  }\n}\n"],"mappings":"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","names":["import_node_fs","import_node_path","import_jiti","fs","import_node_path","path","import_node_fs","import_node_path","path","fs","path","fs"]}