{
  auto_https off
  http_port 80
  https_port 0
}

browser-summarize.{$LAZYCAT_BOX_DOMAIN}:80 {
  route {
    lzcauth
    @foreignInference {
      path /summary-api/inference/*
      header Origin *
      not header Origin https://browser-summarize.{$LAZYCAT_BOX_DOMAIN}
      not header Origin chrome-extension://jfomlfikgiciodphlpbmopfaifbcpgnk
    }
    respond @foreignInference "Forbidden origin" 403
    @modelInference {
      method POST
      path_regexp modelInference ^/summary-api/inference/(qwen35-4b)/([A-Za-z0-9_-]+)/v1/chat/completions$
    }
    handle @modelInference {
      rewrite * /api/v1/deployments/{re.modelInference.2}/inference/v1/chat/completions
      reverse_proxy {re.modelInference.1}.{$LAZYCAT_BOX_DOMAIN}:443 {
        transport http {
          tls
          tls_server_name {re.modelInference.1}.{$LAZYCAT_BOX_DOMAIN}
        }
        header_up Host {re.modelInference.1}.{$LAZYCAT_BOX_DOMAIN}
        header_up -Origin
        header_up -Authorization
        flush_interval -1
      }
    }
    @foreignModelWrite {
      method POST
      path /summary-api/ai/model-install/* /summary-api/model/*
      not header Origin https://browser-summarize.{$LAZYCAT_BOX_DOMAIN}
    }
    respond @foreignModelWrite "Forbidden origin" 403
    @modelInstall {
      method GET POST
      path_regexp modelInstall ^/summary-api/ai/model-install/(cloud\.lazycat\.aipod\.(qwen35-4b))$
    }
    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 ^/summary-api/model/(qwen35-4b)/(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 /summary-api/ai/model-catalog {
      rewrite * /model-catalog.json
      reverse_proxy https://ai.{$LAZYCAT_BOX_DOMAIN} {
        header_up Host {upstream_hostport}
        header_up -Origin
      }
    }
    handle /summary-api/ai/device/list {
      rewrite * /backend/device/list
      reverse_proxy https://ai.{$LAZYCAT_BOX_DOMAIN} {
        header_up Host {upstream_hostport}
        header_up -Origin
      }
    }
    handle /summary-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 ^/summary-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 /summary-api/* {
      respond "Unknown summary API" 404
    }
    handle {
      @html path / /index.html /web-summary.html
      header @html Cache-Control "no-store, max-age=0"
      root * /lzcapp/pkg/content/web
      try_files {path} /index.html
      file_server
    }
  }
}
