{
  auto_https off
  http_port 80
  https_port 0
}

browser-audio.{$LAZYCAT_BOX_DOMAIN}:80 {
  route {
    lzcauth
    @foreignSpeech {
      path /audio-api/speech
      header Origin *
      not header Origin https://browser-audio.{$LAZYCAT_BOX_DOMAIN}
      not header Origin chrome-extension://fefcmggipllofompnobdnakdmkcjacih
    }
    respond @foreignSpeech "Forbidden origin" 403
    handle /audio-api/speech {
      reverse_proxy inference.cloud.lazycat.app.browser.audio.lzcapp:8080 {
        flush_interval -1
      }
    }
    @foreignModelWrite {
      method POST
      path /audio-api/ai/model-install/* /audio-api/model/*
      not header Origin https://browser-audio.{$LAZYCAT_BOX_DOMAIN}
    }
    respond @foreignModelWrite "Forbidden origin" 403
    @modelInstall {
      method GET POST
      path_regexp modelInstall ^/audio-api/ai/model-install/(cloud\.lazycat\.aipod\.(sensevoice-small-q4k|qwen35-4b|qwen3tts))$
    }
    handle @modelInstall {
      rewrite * /backend/model-install/v1/packages/{re.modelInstall.1}
      reverse_proxy https://ai.{$LAZYCAT_BOX_DOMAIN} {
        header_up Host {upstream_hostport}
        header_up -Origin
      }
    }
    @recommendedModel {
      method GET POST
      path_regexp recommendedModel ^/audio-api/model/(sensevoice-small-q4k|qwen35-4b|qwen3tts)/(descriptor|devices|deployments(/requirements|/[A-Za-z0-9_-]+(/(retry|start))?)?)$
    }
    handle @recommendedModel {
      rewrite * /api/v1/{re.recommendedModel.2}
      reverse_proxy {re.recommendedModel.1}.{$LAZYCAT_BOX_DOMAIN}:443 {
        transport http {
          tls
          tls_server_name {re.recommendedModel.1}.{$LAZYCAT_BOX_DOMAIN}
        }
        header_up Host {re.recommendedModel.1}.{$LAZYCAT_BOX_DOMAIN}
        header_up -Origin
      }
    }
    handle /audio-api/ai/backend/audio/transcriptions {
      rewrite * /backend/audio/transcriptions
      reverse_proxy https://ai.{$LAZYCAT_BOX_DOMAIN} {
        header_up Host {upstream_hostport}
        header_up -Origin
      }
    }
    handle /audio-api/ai/backend/pdf/generate {
      rewrite * /backend/pdf/generate
      reverse_proxy https://ai.{$LAZYCAT_BOX_DOMAIN} {
        header_up Host {upstream_hostport}
        header_up -Origin
      }
    }
    handle /audio-api/ai/model-catalog {
      rewrite * /model-catalog.json
      reverse_proxy https://ai.{$LAZYCAT_BOX_DOMAIN} {
        header_up Host {upstream_hostport}
        header_up -Origin
      }
    }
    handle /audio-api/ai/device/list {
      rewrite * /backend/device/list
      reverse_proxy https://ai.{$LAZYCAT_BOX_DOMAIN} {
        header_up Host {upstream_hostport}
        header_up -Origin
      }
    }
    handle /audio-api/ai/aiapps/installed {
      rewrite * /backend/aiapps/installed
      reverse_proxy https://ai.{$LAZYCAT_BOX_DOMAIN} {
        header_up Host {upstream_hostport}
        header_up -Origin
      }
    }
    @modelMetadata {
      method GET
      path_regexp modelMetadata ^/audio-api/model/([a-z0-9-]+)/(deployments|descriptor)$
    }
    handle @modelMetadata {
      rewrite * /api/v1/{re.modelMetadata.2}
      reverse_proxy {re.modelMetadata.1}.{$LAZYCAT_BOX_DOMAIN}:443 {
        transport http {
          tls
          tls_server_name {re.modelMetadata.1}.{$LAZYCAT_BOX_DOMAIN}
        }
        header_up Host {re.modelMetadata.1}.{$LAZYCAT_BOX_DOMAIN}
        header_up -Origin
      }
    }
    handle /audio-api/* {
      respond "Unknown audio API" 404
    }
    handle {
      @html path / /index.html /audio.html
      header @html Cache-Control "no-store, max-age=0"
      root * /lzcapp/pkg/content/web
      try_files {path} /index.html
      file_server
    }
  }
}
