{
  "botThreshold": 0.7,
  "enableTestMode": false,
  "testModeSimulations": {},
  "signatureHashKey": null,
  "enableUserAgentDetection": true,
  "enableHeaderAnalysis": true,
  "enableIpDetection": true,
  "enableBehavioralAnalysis": true,
  "enableLlmDetection": false,
  "aiDetection": {
    "provider": "Ollama",
    "timeoutMs": 15000,
    "maxConcurrentRequests": 5,
    "ollama": {
      "enabled": true,
      "endpoint": "http://localhost:11434",
      "model": "gemma4",
      "useJsonMode": true,
      "customPrompt": null,
      "numThreads": 4,
      "enableThinking": false
    },
    "llamaSharp": {
      "enabled": true,
      "modelPath": "Qwen/Qwen2.5-0.5B-Instruct-GGUF/qwen2.5-0.5b-instruct-q4_k_m.gguf",
      "modelCacheDir": null,
      "contextSize": 512,
      "threadCount": 2,
      "temperature": 0.1,
      "maxTokens": 150,
      "timeoutMs": 10000
    },
    "heuristic": {
      "enabled": true,
      "loadLearnedWeights": true,
      "enableWeightLearning": true,
      "minConfidenceForLearning": 0.8,
      "learningRate": 0.01,
      "weightReloadIntervalMinutes": 60
    }
  },
  "llmCoordinator": {
    "channelCapacity": 20,
    "minProbabilityToEnqueue": 0.3,
    "maxProbabilityToEnqueue": 0.85,
    "baseSampleRate": 0.05,
    "highRiskConfirmationRate": 0.1,
    "conclusiveSkipWindow": "01:00:00"
  },
  "backgroundEnrichment": {
    "confidenceThreshold": 0.6,
    "minBotProbability": 0.3,
    "maxConcurrency": 2,
    "channelCapacity": 500
  },
  "threatIntel": {
    "enabled": false,
    "privacyMode": "Ip",
    "blockStartupOnFirstFetch": true,
    "startupFetchTimeoutSeconds": 60,
    "staggerWindowSeconds": 300,
    "enrichmentQueueCapacity": 500,
    "enrichmentTimeoutSeconds": 10,
    "providers": {
      "spamhausDrop": {
        "enabled": false,
        "url": "https://www.spamhaus.org/drop/drop.txt",
        "edropUrl": "https://www.spamhaus.org/drop/edrop.txt",
        "refreshHours": 12
      },
      "torExit": {
        "enabled": false,
        "url": "https://check.torproject.org/torbulkexitlist",
        "refreshMinutes": 30
      },
      "cisaKev": {
        "enabled": false,
        "url": "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json",
        "refreshHours": 1
      },
      "cloudRanges": {
        "enabled": false,
        "refreshHours": 24,
        "includeAws": true,
        "includeAzure": true,
        "includeGcp": true,
        "includeCloudflare": true,
        "fastly": {
          "enabled": true,
          "url": "https://api.fastly.com/public-ip-list"
        }
      }
    }
  },
  "licensing": {
    "domains": [],
    "token": null
  },
  "proxyEnvironment": {
    "mode": "Auto"
  },
  "tunnelEnvironment": {
    "enabled": true,
    "minSamples": 10,
    "docsUrl": "https://stylobot.net/articles/tunnel-trade-off"
  },
  "excludeLocalIpFromBroadcast": true,
  "signatureDescriptionThreshold": 50,
  "blockDetectedBots": false,
  "blockStatusCode": 403,
  "blockMessage": "Access denied",
  "minConfidenceToBlock": 0.8,
  "nonAiMinProbability": 0,
  "nonAiMaxProbability": 0.9,
  "allowVerifiedSearchEngines": true,
  "allowSocialMediaBots": true,
  "allowMonitoringBots": true,
  "allowTools": false,
  "maxRequestsPerMinute": 60,
  "behavioralWindowSeconds": 60,
  "behavioral": {
    "apiKeyHeader": null,
    "apiKeyRateLimit": 0,
    "userIdClaim": null,
    "userIdHeader": null,
    "userRateLimit": 0,
    "enableAnomalyDetection": true,
    "spikeThresholdMultiplier": 5,
    "newPathAnomalyThreshold": 0.8,
    "analysisWindow": "00:15:00",
    "enableAdvancedPatternDetection": true,
    "minRequestsForPatternAnalysis": 10,
    "identityHashSalt": "e7662236-70d5-4b8b-835f-fe93e150e34f"
  },
  "populationWarmupRequests": 50,
  "populationWindowSize": 500,
  "anomalySaver": {
    "enabled": false,
    "outputPath": "./logs/bot-detections.jsonl",
    "minBotProbabilityThreshold": 0.5,
    "batchSize": 50,
    "flushInterval": "00:00:05",
    "rollingInterval": "01:00:00",
    "maxFileSizeBytes": 10485760,
    "retentionDays": 30
  },
  "versionAge": {
    "enabled": true,
    "updateIntervalHours": 24,
    "checkBrowserVersion": true,
    "maxBrowserVersionAge": 10,
    "browserSeverelyOutdatedConfidence": 0.4,
    "browserModeratelyOutdatedConfidence": 0.2,
    "browserSlightlyOutdatedConfidence": 0.1,
    "checkOsVersion": true,
    "osAncientConfidence": 0.3,
    "osVeryOldConfidence": 0.1,
    "osOldConfidence": 0.05,
    "combinedOutdatedBoost": 0.15,
    "impossibleCombinationConfidence": 0.5,
    "fallbackBrowserVersions": {},
    "osAgeClassification": {
      "windows NT 10.0": "current",
      "windows NT 6.3": "old",
      "windows NT 6.2": "old",
      "windows NT 6.1": "very_old",
      "windows NT 6.0": "ancient",
      "windows NT 5.1": "ancient",
      "windows NT 5.0": "ancient",
      "mac OS X 14": "current",
      "mac OS X 13": "current",
      "mac OS X 12": "current",
      "mac OS X 11": "current",
      "mac OS X 10_15": "current",
      "mac OS X 10_14": "very_old",
      "mac OS X 10_13": "very_old",
      "mac OS X 10_12": "ancient",
      "android 14": "current",
      "android 13": "current",
      "android 12": "old",
      "android 11": "old",
      "android 10": "very_old",
      "android 9": "very_old",
      "android 8": "ancient",
      "android 7": "ancient",
      "android 6": "ancient",
      "android 5": "ancient",
      "android 4": "ancient",
      "iOS 18": "current",
      "iOS 17": "current",
      "iOS 16": "old",
      "iOS 15": "old",
      "iOS 14": "very_old",
      "iOS 13": "very_old",
      "iOS 12": "ancient",
      "linux": "current"
    },
    "minBrowserVersionByOs": {
      "windows NT 5": 49,
      "windows NT 6.0": 49,
      "windows NT 6.1": 109,
      "mac OS X 10_9": 65,
      "mac OS X 10_10": 87,
      "mac OS X 10_11": 103,
      "android 4": 42,
      "android 5": 81,
      "iOS 10": 49,
      "iOS 11": 65
    }
  },
  "cacheDurationSeconds": 300,
  "maxCacheEntries": 10000,
  "enableBackgroundUpdates": true,
  "updateSchedule": {
    "cron": "0 2 * * *",
    "timezone": "UTC",
    "signal": "botlist.update",
    "key": null,
    "runOnStartup": true,
    "description": "Daily bot list update",
    "maxExecutionSeconds": 300,
    "useDurableTask": false
  },
  "listDownloadTimeoutSeconds": 30,
  "maxDownloadRetries": 3,
  "startupDelaySeconds": 5,
  "dataSources": {
    "isBot": {
      "enabled": true,
      "url": "https://raw.githubusercontent.com/omrilotan/isbot/main/src/patterns.json",
      "description": "IsBot patterns from omrilotan/isbot - comprehensive bot regex patterns (JSON array)",
      "updateSchedule": null
    },
    "matomo": {
      "enabled": false,
      "url": "https://raw.githubusercontent.com/matomo-org/device-detector/master/regexes/bots.yml",
      "description": "Matomo Device Detector - categorized bot patterns with metadata (YAML)",
      "updateSchedule": null
    },
    "crawlerUserAgents": {
      "enabled": false,
      "url": "https://raw.githubusercontent.com/monperrus/crawler-user-agents/master/crawler-user-agents.json",
      "description": "Crawler User Agents - community-maintained crawler patterns (JSON)",
      "updateSchedule": null
    },
    "awsIpRanges": {
      "enabled": true,
      "url": "https://ip-ranges.amazonaws.com/ip-ranges.json",
      "description": "AWS IP ranges - official Amazon cloud IP ranges (JSON)",
      "updateSchedule": null
    },
    "gcpIpRanges": {
      "enabled": true,
      "url": "https://www.gstatic.com/ipranges/cloud.json",
      "description": "Google Cloud IP ranges - official GCP IP ranges (JSON)",
      "updateSchedule": null
    },
    "azureIpRanges": {
      "enabled": false,
      "url": "",
      "description": "Azure IP ranges - URL changes weekly, requires manual update",
      "updateSchedule": null
    },
    "cloudflareIpv4": {
      "enabled": true,
      "url": "https://www.cloudflare.com/ips-v4",
      "description": "Cloudflare IPv4 ranges - official Cloudflare IPs (text, one CIDR per line)",
      "updateSchedule": null
    },
    "cloudflareIpv6": {
      "enabled": true,
      "url": "https://www.cloudflare.com/ips-v6",
      "description": "Cloudflare IPv6 ranges - official Cloudflare IPs (text, one CIDR per line)",
      "updateSchedule": null
    },
    "browserVersions": {
      "enabled": true,
      "url": "https://www.browsers.fyi/api",
      "description": "Browser versions from browsers.fyi - current browser versions (JSON)",
      "updateSchedule": null
    },
    "scannerUserAgents": {
      "enabled": true,
      "url": "https://raw.githubusercontent.com/digininja/scanner_user_agents/main/list.json",
      "description": "Security scanner user agents from digininja - JSON format with tool metadata",
      "updateSchedule": null
    },
    "coreRuleSetScanners": {
      "enabled": true,
      "url": "https://raw.githubusercontent.com/coreruleset/coreruleset/main/rules/scanners-user-agents.data",
      "description": "OWASP CoreRuleSet scanner patterns - text format, one per line",
      "updateSchedule": null
    }
  },
  "fastPath": {
    "enabled": true,
    "maxParallelDetectors": 4,
    "enableWaveParallelism": true,
    "continueOnWaveFailure": true,
    "waveTimeoutMs": 50,
    "abortThreshold": 0.95,
    "sampleRate": 0.01,
    "earlyExitThreshold": 0.85,
    "skipSlowPathThreshold": 0.2,
    "slowPathTriggerThreshold": 0.5,
    "fastPathTimeoutMs": 100,
    "slowPathQueueCapacity": 10000,
    "alwaysRunFullOnPaths": [],
    "enableDriftDetection": true,
    "driftThreshold": 0.005,
    "minSamplesForDrift": 100,
    "driftWindowHours": 24,
    "enableFeedbackLoop": true,
    "feedbackMinConfidence": 0.9,
    "feedbackMinOccurrences": 5,
    "fastPathDetectors": [
      {
        "name": "User-Agent Detector",
        "signal": "UserAgentAnalyzed",
        "expectedLatencyMs": 0.1,
        "weight": 1,
        "minConfidenceToContribute": 0.3,
        "category": "UserAgent",
        "wave": 1,
        "isCacheable": true,
        "timeoutMs": null,
        "enabled": true,
        "description": null,
        "priority": 0,
        "tags": null,
        "metadata": null
      },
      {
        "name": "Header Detector",
        "signal": "HeadersAnalyzed",
        "expectedLatencyMs": 0.1,
        "weight": 1,
        "minConfidenceToContribute": 0.3,
        "category": "Header",
        "wave": 1,
        "isCacheable": true,
        "timeoutMs": null,
        "enabled": true,
        "description": null,
        "priority": 0,
        "tags": null,
        "metadata": null
      },
      {
        "name": "IP Detector",
        "signal": "IpAnalyzed",
        "expectedLatencyMs": 0.5,
        "weight": 1,
        "minConfidenceToContribute": 0.3,
        "category": "Ip",
        "wave": 2,
        "isCacheable": true,
        "timeoutMs": null,
        "enabled": true,
        "description": null,
        "priority": 0,
        "tags": null,
        "metadata": null
      },
      {
        "name": "Behavioral Detector",
        "signal": "BehaviourSampled",
        "expectedLatencyMs": 1,
        "weight": 1,
        "minConfidenceToContribute": 0.3,
        "category": "Behavioral",
        "wave": 2,
        "isCacheable": true,
        "timeoutMs": null,
        "enabled": true,
        "description": null,
        "priority": 0,
        "tags": null,
        "metadata": null
      },
      {
        "name": "Client-Side Detector",
        "signal": "ClientFingerprintReceived",
        "expectedLatencyMs": 1,
        "weight": 1,
        "minConfidenceToContribute": 0.3,
        "category": "ClientSide",
        "wave": 2,
        "isCacheable": true,
        "timeoutMs": null,
        "enabled": true,
        "description": null,
        "priority": 0,
        "tags": null,
        "metadata": null
      },
      {
        "name": "Inconsistency Detector",
        "signal": "InconsistencyUpdated",
        "expectedLatencyMs": 2,
        "weight": 1,
        "minConfidenceToContribute": 0.3,
        "category": "Inconsistency",
        "wave": 3,
        "isCacheable": true,
        "timeoutMs": null,
        "enabled": true,
        "description": null,
        "priority": 0,
        "tags": null,
        "metadata": null
      }
    ],
    "slowPathDetectors": [
      {
        "name": "Heuristic Detector",
        "signal": "HeuristicCompleted",
        "expectedLatencyMs": 1,
        "weight": 2,
        "minConfidenceToContribute": 0.3,
        "category": "Heuristic",
        "wave": 1,
        "isCacheable": true,
        "timeoutMs": null,
        "enabled": true,
        "description": null,
        "priority": 0,
        "tags": null,
        "metadata": null
      }
    ],
    "aiPathDetectors": [
      {
        "name": "LLM Detector",
        "signal": "LlmClassificationCompleted",
        "expectedLatencyMs": 100,
        "weight": 2.5,
        "minConfidenceToContribute": 0.3,
        "category": "AI",
        "wave": 1,
        "isCacheable": true,
        "timeoutMs": 15000,
        "enabled": true,
        "description": null,
        "priority": 0,
        "tags": null,
        "metadata": null
      }
    ],
    "slowPathTriggers": [
      "HighConfidenceDetection",
      "GreyZoneDetection",
      "PatternDiscovered",
      "InconsistencyDetected"
    ],
    "signatureMatching": {
      "weightPrimary": 100,
      "weightIp": 50,
      "weightUa": 50,
      "weightIpSubnet": 30,
      "weightClientSide": 80,
      "weightPlugin": 60,
      "minWeightForMatch": 100,
      "minWeightForWeakMatch": 80,
      "minFactorsForWeakMatch": 3
    }
  },
  "reputation": {
    "learningRate": 0.1,
    "maxSupport": 1000,
    "scoreDecayTauHours": 3,
    "supportDecayTauHours": 6,
    "confirmedBadScoreDecayTauHours": 12,
    "confirmedBadSupportDecayTauHours": 24,
    "prior": 0.5,
    "decaySweepIntervalMinutes": 15,
    "promoteToBadScore": 0.9,
    "promoteToBadSupport": 50,
    "demoteFromBadScore": 0.5,
    "demoteFromBadSupport": 100,
    "promoteToSuspectScore": 0.6,
    "promoteToSuspectSupport": 10,
    "demoteToNeutralScore": 0.4,
    "promoteToGoodScore": 0.1,
    "promoteToGoodSupport": 100,
    "gcEligibleDays": 90,
    "gcSupportThreshold": 1,
    "gcOnlyNeutral": true
  },
  "orchestrator": {
    "totalTimeout": "00:00:05",
    "maxWaves": 10,
    "waveInterval": "00:00:00.0500000",
    "expensiveDetectorThreshold": 0.3,
    "circuitBreakerThreshold": 5,
    "circuitBreakerResetTime": "00:01:00",
    "enableParallelExecution": true,
    "maxParallelDetectors": 10,
    "parallelismPerWave": {},
    "enableQuorumExit": true,
    "minDetectorsForVerdict": 3,
    "quorumTimeout": "00:00:00.1000000",
    "quorumBotThreshold": 0.75,
    "quorumHumanThreshold": 0.25,
    "uncertainQuorumForAiEscalation": 3,
    "signalSinkMaxCapacity": 5000,
    "signalSinkMaxAge": "00:05:00",
    "contributionSignalSinkMaxCapacity": 1000,
    "contributionSignalSinkMaxAge": "00:05:00",
    "circuitBreakerMaxEntries": 100,
    "circuitBreakerSuccessHealAmount": -2,
    "circuitBreakerFailurePenalty": 1,
    "circuitBreakerHalfOpenMultiplier": 1.5,
    "ephemeralTrackedOperationsMultiplier": 2,
    "ephemeralMaxOperationLifetime": "00:00:30",
    "requestSignalSinkCapacity": 200,
    "requestSignalSinkMaxAge": "00:00:30"
  },
  "signatureCoordinator": {
    "maxSignaturesInWindow": 1000,
    "signatureWindow": "00:15:00",
    "maxRequestsPerSignature": 100,
    "minRequestsForAberrationDetection": 5,
    "aberrationScoreThreshold": 0.7,
    "signatureTtl": "00:30:00",
    "ttlCleanupInterval": "00:01:00",
    "enableUpdateSignals": true,
    "enableErrorSignals": true
  },
  "responseCoordinator": {
    "maxClientsInWindow": 5000,
    "responseWindow": "00:10:00",
    "maxResponsesPerClient": 200,
    "clientTtl": "00:20:00",
    "minResponsesForScoring": 3,
    "enableSignals": true,
    "trigger": {
      "minRequestBotProbability": 0.4,
      "statusCodeTriggers": [
        {
          "min": 400,
          "max": 499
        },
        {
          "min": 500,
          "max": 599
        }
      ],
      "pathTriggers": [],
      "clientIdTriggers": [],
      "mode": "Async"
    },
    "bodyPatterns": {
      "stack_trace_marker": "Exception in thread|Stack trace|Traceback \\(most recent call last\\)",
      "generic_error_message": "An unexpected error occurred",
      "login_failed_message": "Invalid username or password|Login failed|Authentication failed",
      "rate_limited_message": "Too many requests|Rate limit exceeded|Slow down",
      "ip_blocked_message": "Your IP has been blocked|Access denied for this IP|Forbidden"
    },
    "honeypotPaths": [
      "/__test-hp",
      "/wp-*",
      "/xmlrpc.php",
      "/.git*",
      "/.env*",
      "/.DS_Store",
      "/.svn*",
      "/backup*",
      "/*.sql",
      "/db*",
      "/dump*",
      "/phpmyadmin*",
      "/admin*",
      "/cpanel*",
      "/manager*",
      "/server-status",
      "/server-info",
      "/config.*",
      "/web.config",
      "/*.php"
    ],
    "featureWeights": {
      "fourXxRatio": 0.4,
      "fourOhFourScan": 0.5,
      "fiveXxAnomaly": 0.3,
      "authStruggle": 0.2,
      "honeypotHit": 0.8,
      "errorTemplate": 0.25,
      "abuseFeedback": 0.3
    },
    "cacheCleanupInterval": "00:00:30",
    "compactionThreshold": 100
  },
  "responseStatusBoost": {
    "enabled": true,
    "notFoundDelta": 0.15,
    "unauthorizedDelta": 0.1,
    "forbiddenDelta": 0.08,
    "serverErrorDelta": 0.08,
    "goneDelta": 0.12,
    "methodNotAllowedDelta": 0.06,
    "authenticatedClearDelta": -0.15,
    "authenticatedClearThreshold": 0.3,
    "authenticatedClearMaxProbability": 0.6
  },
  "responsePiiMasking": {
    "enabled": false,
    "autoApplyForHighConfidenceMalicious": true,
    "autoApplyBotProbabilityThreshold": 0.9,
    "autoApplyConfidenceThreshold": 0.75
  },
  "cluster": {
    "clusterIntervalSeconds": 30,
    "similarityThreshold": 0.55,
    "minClusterSize": 2,
    "maxIterations": 10,
    "productSimilarityThreshold": 0.75,
    "networkTemporalDensityThreshold": 0.4,
    "minBotProbabilityForClustering": 0.5,
    "minBotDetectionsToTrigger": 20,
    "knnK": 20,
    "enableBehaviouralVectorAxis": true,
    "algorithm": "leiden",
    "leidenResolution": 1,
    "behaviouralVectorWeight": 0.4,
    "enableLlmDescriptions": false,
    "descriptionModel": "gemma4",
    "descriptionEndpoint": null
  },
  "markov": {
    "signatureHalfLifeHours": 1,
    "cohortHalfLifeHours": 6,
    "globalHalfLifeHours": 24,
    "maxEdgesPerNode": 20,
    "minTransitionsForDrift": 5,
    "recentTransitionWindowSize": 30,
    "cohortFlushIntervalSeconds": 5,
    "snapshotIntervalSeconds": 300,
    "transitionEventFlushIntervalSeconds": 10,
    "maxTransitionEventsPerSignature": 50,
    "selfDriftThreshold": 0.3,
    "humanDriftThreshold": 0.4,
    "loopScoreThreshold": 0.5,
    "sequenceSurpriseThreshold": 3,
    "transitionNoveltyThreshold": 0.4,
    "entropyDeltaThreshold": 1,
    "maxTrackedSignatures": 10000
  },
  "countryReputation": {
    "decayTauHours": 24,
    "minSampleSize": 10
  },
  "signatureConvergence": {
    "enabled": true,
    "evaluationIntervalSeconds": 15,
    "temporalProximityWindowSeconds": 300,
    "minSignaturesForMerge": 2,
    "mergeScoreThreshold": 0.6,
    "splitDivergenceThreshold": 0.4,
    "minEvaluationsBeforeSplit": 3,
    "maxFamilies": 500,
    "temporalWeight": 0.3,
    "behavioralWeight": 0.3,
    "botProbabilityWeight": 0.4
  },
  "selfMaintenance": {
    "signatureCacheSize": 5000,
    "sessionCacheSize": 2000,
    "intentCacheSize": 1000,
    "centroidRetentionDays": 30,
    "markovCohortSize": 10000,
    "cacheSlidingExpiration": "02:00:00",
    "highPerformanceMode": false,
    "learningQueueDepth": 1000
  },
  "enablePatternLearning": false,
  "minConfidenceToLearn": 0.9,
  "maxLearnedPatterns": 1000,
  "patternConsolidationIntervalHours": 24,
  "storageProvider": "Sqlite",
  "databasePath": null,
  "approvalTokenTtl": "1.00:00:00",
  "signatureEwmaAlpha": 0.15,
  "identity": {
    "enabled": false,
    "vector": {
      "absorptionMaturityThreshold": 5,
      "absorptionAgeDays": 30,
      "activeWindowDays": 90,
      "observationSamplingRate": 1
    },
    "match": {
      "mergeThreshold": 0.92,
      "looseThreshold": 0.75,
      "topK": 10,
      "rotationDimensionsTopK": 5,
      "driftEpsilon": 0.05,
      "significantDriftEpsilon": 0.2,
      "minArchetypeMatchScore": 0
    },
    "weights": {
      "correctionLearningRate": 0.05,
      "stabilityLearningRate": 0.01,
      "minWeight": 0.1,
      "maxWeight": 10,
      "globalRefreshSeconds": 60
    },
    "drift": {
      "driftCheckIntervalSeconds": 5,
      "driftBatchSize": 50,
      "driftSamplingRate": 0.05,
      "cachedScoreEwmaAlpha": 0.2,
      "cachedScoreTtlSeconds": 60,
      "driftWarningThreshold": 0.92,
      "ambiguityEwmaAlpha": 0.1,
      "ambiguityProbingThreshold": 0.4
    },
    "calibration": {
      "calibrationIntervalMinutes": 30,
      "archetypeRefinementCap": 0.7
    },
    "engine": {
      "preferSqliteVec": true,
      "sqliteVecExtensionPath": null
    },
    "coordinator": {
      "maxQueueDepth": 10000,
      "maxQueuedPerFingerprint": 4,
      "coalesceWindowMs": 100,
      "breakerTripThreshold": 0.8,
      "breakerResetThreshold": 0.3,
      "breakerTripHoldSeconds": 5,
      "breakerResetHoldSeconds": 10,
      "agingBoostPerSecond": 0.01,
      "workerCount": 4
    },
    "looksLike": {
      "enabled": true,
      "neighbourCount": 3,
      "maxDistance": 4
    }
  },
  "urlRewrite": {
    "enabled": false,
    "prefix": "sb_",
    "signals": [
      "country",
      "is_bot",
      "probability",
      "risk_band",
      "is_datacenter",
      "is_vpn"
    ],
    "sign": true,
    "stripExisting": true,
    "applyTo": "Patterns",
    "pathPatterns": [
      "/api/*"
    ],
    "pathExclusions": []
  },
  "enableDatabaseWalMode": true,
  "retention": {
    "sessionRetention": "30.00:00:00",
    "detectionRetention": "7.00:00:00",
    "patternRetention": "90.00:00:00",
    "clusterRetention": "14.00:00:00",
    "reputationRetention": "1.00:00:00",
    "bucketRetention": "365.00:00:00",
    "maxSessionCount": 500000,
    "maxPatternCount": 100000,
    "maxSessionsPerSignature": 20,
    "hnswLevel1Threshold": 50000,
    "hnswLevel2Threshold": 100000,
    "l2CompactionPriorityThreshold": 0.1,
    "cleanupTime": "02:00",
    "compactionHourUtc": 3,
    "sessionGap": "00:30:00",
    "sessionGraceAge": "00:35:00",
    "atomizerRunInterval": "00:02:00",
    "sessionMinRequests": 3
  },
  "weightStoreCacheSize": 1000,
  "whitelistedBotPatterns": [
    "Googlebot",
    "Bingbot",
    "Slackbot",
    "DuckDuckBot",
    "Baiduspider",
    "YandexBot",
    "Sogou",
    "Exabot",
    "facebot",
    "ia_archiver"
  ],
  "datacenterIpPrefixes": [
    "3.0.0.0/8",
    "13.0.0.0/8",
    "18.0.0.0/8",
    "52.0.0.0/8",
    "20.0.0.0/8",
    "40.0.0.0/8",
    "104.0.0.0/8",
    "34.0.0.0/8",
    "35.0.0.0/8",
    "138.0.0.0/8",
    "139.0.0.0/8",
    "140.0.0.0/8"
  ],
  "customBotPatterns": [],
  "whitelistedIps": [],
  "blacklistedIps": [],
  "logAllRequests": false,
  "logDetailedReasons": true,
  "logPerformanceMetrics": false,
  "logIpAddresses": true,
  "logUserAgents": true,
  "clientSide": {
    "enabled": false,
    "tokenSecret": null,
    "tokenLifetimeSeconds": 300,
    "fingerprintCacheDurationSeconds": 1800,
    "collectionTimeoutMs": 5000,
    "collectWebGL": true,
    "collectCanvas": true,
    "collectAudio": false,
    "minIntegrityScore": 70,
    "headlessThreshold": 0.5
  },
  "securityTools": {
    "enabled": true,
    "blockSecurityTools": true,
    "logDetections": true,
    "customPatterns": [],
    "excludedPatterns": [],
    "enabledCategories": [],
    "honeypotRedirectUrl": null
  },
  "projectHoneypot": {
    "enabled": false,
    "accessKey": null,
    "highThreatThreshold": 25,
    "maxDaysAge": 90,
    "timeoutMs": 1000,
    "cacheDurationSeconds": 1800,
    "skipLocalIps": true,
    "treatHarvestersAsMalicious": true,
    "treatCommentSpammersAsMalicious": true,
    "treatSuspiciousAsSuspicious": true
  },
  "enabledSimulationPacks": [],
  "enabled": true,
  "trainingEndpoints": {
    "enabled": true,
    "requireApiKey": true,
    "apiKeys": [],
    "rateLimitPerMinute": 30,
    "maxExportRecords": 10000
  },
  "bdfReplay": {
    "enabled": true,
    "requireApiKey": true,
    "apiKeys": [],
    "rateLimitPerMinute": 10,
    "maxRequestsPerReplay": 100
  },
  "trustUpstreamDetection": false,
  "upstreamSignatureHeader": null,
  "upstreamSignatureMaxAgeSeconds": 300,
  "responseHeaders": {
    "enabled": false,
    "headerPrefix": "X-Bot-",
    "includePolicyName": true,
    "includeConfidence": true,
    "includeDetectors": true,
    "includeProcessingTime": true,
    "includeBotName": false,
    "includeFullJson": false,
    "includeThreatScore": true,
    "includeReasonHeader": false,
    "includeApprovalId": false,
    "skipPaths": [
      "/health",
      "/metrics",
      "/swagger"
    ]
  },
  "forwardedHeaders": {
    "stripInboundFromClient": true,
    "emitOnForwardedRequest": true
  },
  "yarpLearningMode": {
    "enabled": false,
    "outputPath": "./yarp-learning-data",
    "fileFormat": "jsonl",
    "logToConsole": true,
    "minConfidenceToLog": 0,
    "includeLlmDetector": false,
    "includeOnnxDetector": true,
    "samplingRate": 1,
    "rotation": {
      "maxSizeBytes": 104857600,
      "maxAgeHours": 24,
      "maxFiles": 30
    },
    "includeFullHttpContext": false,
    "includeRequestBody": false,
    "excludePaths": [
      "/health",
      "/healthz",
      "/ping",
      "/metrics"
    ],
    "useTimestampedFiles": true,
    "bufferSize": 100,
    "includeDetectorOutputs": true,
    "includeBlackboardSignals": true
  },
  "throttling": {
    "baseDelaySeconds": 60,
    "maxDelaySeconds": 300,
    "enableJitter": true,
    "jitterPercent": 30,
    "scaleByRisk": false,
    "delayResponse": false,
    "responseDelayMs": 1000,
    "throttleMessage": "Please slow down and try again later.",
    "blockRedirectUrl": "/blocked",
    "challengeType": "captcha"
  },
  "policies": {
    "dashboard-api": {
      "fastPath": [],
      "slowPath": [],
      "aiPath": [],
      "responsePath": [],
      "useFastPath": true,
      "forceSlowPath": false,
      "escalateToAi": false,
      "aiEscalationThreshold": 0.6,
      "earlyExitThreshold": 0.3,
      "immediateBlockThreshold": 0.95,
      "minConfidence": 0,
      "weights": {},
      "actionPolicyName": "throttle-stealth",
      "actionPolicyOverridable": true,
      "fallbackActionPolicyName": null,
      "transitions": [],
      "timeoutMs": 5000,
      "bypassTriggerConditions": false,
      "onFailure": null,
      "loadShed": null,
      "signatureCache": null,
      "enabled": true,
      "description": null,
      "priority": 0,
      "tags": null,
      "metadata": null
    }
  },
  "pathPolicies": {
    "/dashboard/api/**": "dashboard-api"
  },
  "defaultPolicyName": null,
  "useDefaultStaticPathPolicies": true,
  "useFileExtensionStaticDetection": true,
  "staticAssetExtensions": [],
  "useContentTypeStaticDetection": false,
  "staticAssetMimeTypes": [],
  "globalWeights": {},
  "actionPolicies": {},
  "defaultActionPolicyName": "throttle-stealth",
  "botTypeActionPolicies": {
    "maliciousBot": "block-hard",
    "exploitScanner": "block-hard",
    "clickFraud": "block-hard",
    "tool": "throttle-tools",
    "scraper": "throttle-aggressive",
    "aiBot": "rate-limit-ai",
    "searchEngine": "rate-limit-search",
    "goodBot": "rate-limit-search",
    "verifiedBot": "rate-limit-search",
    "socialMediaBot": "rate-limit-social",
    "monitoringBot": "rate-limit-monitoring"
  },
  "internalNetworkBotTypeActionPolicies": {
    "tool": "logonly",
    "scraper": "logonly",
    "bot": "logonly",
    "aiBot": "logonly",
    "searchEngine": "logonly",
    "goodBot": "logonly",
    "verifiedBot": "logonly",
    "socialMediaBot": "logonly",
    "monitoringBot": "logonly"
  },
  "observeOnly": false,
  "excludedPaths": [
    "/health",
    "/metrics"
  ],
  "apiBypassKeys": [],
  "enableLegacyApiBypassKeys": false,
  "allowFullDetectorBypassApiKeys": false,
  "rejectUnknownApiKeys": true,
  "apiKeys": {},
  "apiBypassHeaderName": "X-SB-Api-Key",
  "signatureOnlyPaths": [],
  "pathOverrides": {},
  "maxSignalCapacity": 10000,
  "signalRetentionMinutes": 5,
  "parallelDetection": true,
  "enableQuorumExit": true,
  "quorumConfidenceThreshold": 0.9,
  "timeoutMs": 30000,
  "learningConfidenceThreshold": 0.85,
  "escalationSalienceThreshold": 0.8
}