<?php

// +----------------------------------------------------------------------
// | 插件运行配置
// +----------------------------------------------------------------------
// | 该文件用于管理插件运行时的跨域策略和插件包下载安全策略。
// | 配置会被 iyibai 插件路由、中间件、插件包安装服务等框架能力读取。
// | 生产环境建议显式配置白名单，避免使用过宽的来源域名或下载域名。
// +----------------------------------------------------------------------

return [
    // 框架内置插件路由白名单。
    // 列表内目录用于承载框架工具能力，不要求写入 sys_addons 安装表；
    // 仍会执行路由参数校验、控制器方法校验和控制器自身的登录/权限逻辑。
    'internal_routes' => [
        'apidoc',
    ],

    // 插件路由跨域配置，主要用于插件独立接口或插件后台资源访问。
    'cors' => [
        // 允许访问插件接口的 Origin 白名单；空数组或空字符串表示不在插件层额外限制，交由全局 CORS 策略处理。
        // 示例：['https://admin.example.com', 'https://app.example.com']
        'allowed_origins' => env('addon.cors_allowed_origins', ''),

        // 是否允许跨域请求携带 Cookie、Authorization 等凭证信息。
        'allow_credentials' => true,
    ],

    // 第一阶段插件生命周期锁配置：用于安装、升级、卸载、包替换和注册表刷新互斥。
    'lock' => [
        'enabled' => env('addon.lock_enabled', true),
        'driver' => env('addon.lock_driver', 'db'),
        // 仅单机应急时开启文件锁兜底，多实例环境应保持 false。
        'file_fallback' => env('addon.lock_file_fallback', false),
        'lifecycle_ttl' => env('addon.lock_lifecycle_ttl', 300),
        'package_ttl' => env('addon.lock_package_ttl', 300),
        'registry_ttl' => env('addon.lock_registry_ttl', 60),
        'wait_seconds' => env('addon.lock_wait_seconds', 0),
    ],

    // 插件包下载与安装安全配置，用于远程安装插件包时限制来源和资源规模。
    'package' => [
        // 允许下载插件包的主机白名单；空数组表示兼容旧市场接口返回，不额外限制下载域名。
        'allowed_download_hosts' => [],

        // 生产环境可灰度开启强制白名单；默认 false 保持旧市场下载链路兼容。
        'require_download_host_whitelist' => env('addon.require_download_host_whitelist', false),

        // 默认禁止 HTTP 下载，确需开发调试时通过环境变量临时打开。
        'allow_http_download' => env('addon.allow_http_download', false),

        // 默认拦截回环、私网和保留地址，降低远程包下载 SSRF 风险。
        'block_private_network' => env('addon.block_private_network', true),

        // 下载插件包的超时时间，单位秒。
        'download_timeout' => 30,

        // 单个插件包允许包含的最大文件数量，防止异常压缩包消耗过多资源。
        'max_files' => 10000,

        // 市场返回 sha256 时始终校验；开启后无摘要也拒绝安装。
        'sha256_required' => env('addon.package_sha256_required', false),
    ],
];
