package vip.mate.hook; import org.springframework.boot.context.properties.ConfigurationProperties; import java.time.Duration; import java.util.ArrayList; import java.util.List; /** * Hook 系统全局配置(RFC-017)。 * *
 * mateclaw:
 *   hooks:
 *     enabled: true
 *     global-rate-limit: 200       # 全局每秒最大触发数
 *     global-concurrency: 32       # Semaphore 上限
 *     dispatch-deadline: 5s        # 单事件派发总预算
 *     trusted-domains:             # HttpAction 允许调用的域名(精确或后缀匹配)
 *       - example.com
 *     http:
 *       connect-timeout: 2s
 *       read-timeout: 3s
 *     audit:
 *       enabled: true              # 每次派发写 mate_hook_run
 *       retain-days: 7
 * 
*/ @ConfigurationProperties(prefix = "mateclaw.hooks") public class HookProperties { private boolean enabled = true; private int globalRateLimit = 200; private int globalConcurrency = 32; private Duration dispatchDeadline = Duration.ofSeconds(5); private List trustedDomains = new ArrayList<>(); private final Http http = new Http(); private final Audit audit = new Audit(); public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public int getGlobalRateLimit() { return globalRateLimit; } public void setGlobalRateLimit(int v) { this.globalRateLimit = v; } public int getGlobalConcurrency() { return globalConcurrency; } public void setGlobalConcurrency(int v) { this.globalConcurrency = v; } public Duration getDispatchDeadline() { return dispatchDeadline; } public void setDispatchDeadline(Duration v) { this.dispatchDeadline = v; } public List getTrustedDomains() { return trustedDomains; } public void setTrustedDomains(List trustedDomains) { this.trustedDomains = trustedDomains; } public Http getHttp() { return http; } public Audit getAudit() { return audit; } public static class Http { private Duration connectTimeout = Duration.ofSeconds(2); private Duration readTimeout = Duration.ofSeconds(3); public Duration getConnectTimeout() { return connectTimeout; } public void setConnectTimeout(Duration v) { this.connectTimeout = v; } public Duration getReadTimeout() { return readTimeout; } public void setReadTimeout(Duration v) { this.readTimeout = v; } } public static class Audit { private boolean enabled = true; private int retainDays = 7; public boolean isEnabled() { return enabled; } public void setEnabled(boolean v) { this.enabled = v; } public int getRetainDays() { return retainDays; } public void setRetainDays(int v) { this.retainDays = v; } } }