()
| 179 | // ============================================================================ |
| 180 | |
| 181 | async function getSettings() { |
| 182 | const result = await chrome.storage.sync.get([ |
| 183 | 'detectionMode', |
| 184 | 'requireDebugIndicators', |
| 185 | 'detectStatusChanges', |
| 186 | 'detectHeaderChanges', |
| 187 | 'filterDynamicContent', |
| 188 | 'similarityThreshold', |
| 189 | 'minLengthDiff', |
| 190 | 'checkInterval', |
| 191 | 'dynamicPatterns', |
| 192 | 'baseDelay', |
| 193 | 'maxConcurrent', |
| 194 | 'whitelist' |
| 195 | ]); |
| 196 | |
| 197 | return { |
| 198 | detectionMode: result.detectionMode || 'smart', |
| 199 | requireDebugIndicators: result.requireDebugIndicators !== false, |
| 200 | detectStatusChanges: result.detectStatusChanges !== false, |
| 201 | detectHeaderChanges: result.detectHeaderChanges !== false, |
| 202 | filterDynamicContent: result.filterDynamicContent !== false, |
| 203 | similarityThreshold: result.similarityThreshold || 0.90, |
| 204 | minLengthDiff: result.minLengthDiff || 200, |
| 205 | checkInterval: (result.checkInterval || 480) * 60 * 1000, |
| 206 | dynamicPatterns: result.dynamicPatterns || [], |
| 207 | baseDelay: result.baseDelay || 300, |
| 208 | maxConcurrent: parseInt(result.maxConcurrent) || 3, |
| 209 | whitelist: result.whitelist || [] |
| 210 | }; |
| 211 | } |
| 212 | |
| 213 | // ============================================================================ |
| 214 | // RATE LIMITING |
no outgoing calls
no test coverage detected