Spaces:
Running
Running
File size: 2,466 Bytes
3d50167 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | // ===== KIMI SECURITY & VALIDATION CONFIGURATION =====
window.KIMI_SECURITY_CONFIG = {
// Input validation limits
MAX_MESSAGE_LENGTH: 2000,
MAX_API_KEY_LENGTH: 200,
MIN_API_KEY_LENGTH: 10,
// Security settings
API_KEY_PATTERNS: [
/^sk-or-v1-[a-zA-Z0-9]{16,}$/, // OpenRouter pattern (relaxed length)
/^sk-[a-zA-Z0-9_\-]{16,}$/, // OpenAI and similar (relaxed)
/^[a-zA-Z0-9_\-]{16,}$/ // Generic API key fallback
],
// Cache settings
CACHE_MAX_AGE: 300000, // 5 minutes
CACHE_MAX_SIZE: 100,
// Performance settings
DEBOUNCE_DELAY: 300,
BATCH_DELAY: 800,
THROTTLE_LIMIT: 1000,
// Error messages
ERRORS: {
INVALID_INPUT: "Invalid input provided",
MESSAGE_TOO_LONG: "Message too long. Please keep it under {max} characters.",
INVALID_API_KEY: "Invalid API key format",
NETWORK_ERROR: "Network error. Please check your connection.",
SYSTEM_ERROR: "System error occurred. Please try again."
}
};
// Validation utilities using the configuration
window.KIMI_VALIDATORS = {
validateMessage: message => {
if (!message || typeof message !== "string") return { valid: false, error: "INVALID_INPUT" };
if (message.length > window.KIMI_SECURITY_CONFIG.MAX_MESSAGE_LENGTH) {
return {
valid: false,
error: "MESSAGE_TOO_LONG",
params: { max: window.KIMI_SECURITY_CONFIG.MAX_MESSAGE_LENGTH }
};
}
return { valid: true };
},
validateApiKey: key => {
if (!key || typeof key !== "string") return false;
if (key.length < window.KIMI_SECURITY_CONFIG.MIN_API_KEY_LENGTH) return false;
if (key.length > window.KIMI_SECURITY_CONFIG.MAX_API_KEY_LENGTH) return false;
return window.KIMI_SECURITY_CONFIG.API_KEY_PATTERNS.some(pattern => pattern.test(key));
},
validateSliderValue: (value, type) => {
// Use centralized config from KIMI_CONFIG
if (window.KIMI_CONFIG && window.KIMI_CONFIG.validate) {
return window.KIMI_CONFIG.validate(value, type);
}
// Fallback if config not available
const num = parseFloat(value);
if (isNaN(num)) return { valid: false, value: 0 };
return { valid: true, value: num };
}
};
window.KIMI_SECURITY_INITIALIZED = true;
|