{"version":3,"sources":["/home/mkabumattar/work/withrawi/rawi/dist/chunk-47VNWSY7.cjs","../src/core/configs/validators/config.validator.ts"],"names":["ConfigValidator","credentials","errors","warnings","apiKeyValidation","settingsValidation","apiKey","provider","validateApiKey"],"mappings":"AAAA;AACA,wDAAsD,ICUzCA,CAAAA,CAAN,KAAkD,CACvD,mBAAA,CAAoBC,CAAAA,CAAgD,CAClE,IAAMC,CAAAA,CAAmB,CAAC,CAAA,CACpBC,CAAAA,CAAqB,CAAC,CAAA,CAU5B,EAAA,CARKF,CAAAA,CAAY,QAAA,EACfC,CAAAA,CAAO,IAAA,CAAK,sBAAsB,CAAA,CAG/BD,CAAAA,CAAY,KAAA,EACfC,CAAAA,CAAO,IAAA,CAAK,mBAAmB,CAAA,CAG7BD,CAAAA,CAAY,MAAA,CAAQ,CACtB,IAAMG,CAAAA,CAAmB,IAAA,CAAK,cAAA,CAC5BH,CAAAA,CAAY,MAAA,CACZA,CAAAA,CAAY,QACd,CAAA,CACAC,CAAAA,CAAO,IAAA,CAAK,GAAGE,CAAAA,CAAiB,MAAM,CAAA,CACtCD,CAAAA,CAAS,IAAA,CAAK,GAAGC,CAAAA,CAAiB,QAAQ,CAC5C,CAEA,IAAMC,CAAAA,CAAqB,IAAA,CAAK,gBAAA,CAAiBJ,CAAW,CAAA,CAC5D,OAAAC,CAAAA,CAAO,IAAA,CAAK,GAAGG,CAAAA,CAAmB,MAAM,CAAA,CACxCF,CAAAA,CAAS,IAAA,CAAK,GAAGE,CAAAA,CAAmB,QAAQ,CAAA,CAErC,CACL,OAAA,CAASH,CAAAA,CAAO,MAAA,GAAW,CAAA,CAC3B,MAAA,CAAAA,CAAAA,CACA,QAAA,CAAAC,CACF,CACF,CAEA,cAAA,CAAeG,CAAAA,CAAgBC,CAAAA,CAAoC,CACjE,IAAML,CAAAA,CAAmB,CAAC,CAAA,CACpBC,CAAAA,CAAqB,CAAC,CAAA,CAE5B,EAAA,CAAI,CAACG,CAAAA,CAAO,IAAA,CAAK,CAAA,CACf,OAAAJ,CAAAA,CAAO,IAAA,CAAK,yBAAyB,CAAA,CAC9B,CAAC,OAAA,CAAS,CAAA,CAAA,CAAO,MAAA,CAAAA,CAAAA,CAAQ,QAAA,CAAAC,CAAQ,CAAA,CAQ1C,MAAA,CALsBK,iCAAAA,CAAyB,CAAA,EAE7CN,CAAAA,CAAO,IAAA,CAAK,CAAA,qCAAA,EAAwCK,CAAQ,CAAA,CAAA;ADrD8gB","file":"/home/mkabumattar/work/withrawi/rawi/dist/chunk-47VNWSY7.cjs","sourcesContent":[null,"import {\n  type RawiCredentials,\n  validateApiKey as utilValidateApiKey,\n  validateMaxTokens,\n  validateTemperature,\n} from '../../shared/index.js';\nimport type {\n  IConfigValidator,\n  ValidationResult,\n} from '../interfaces/persistence.interface.js';\n\nexport class ConfigValidator implements IConfigValidator {\n  validateCredentials(credentials: RawiCredentials): ValidationResult {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    if (!credentials.provider) {\n      errors.push('Provider is required');\n    }\n\n    if (!credentials.model) {\n      errors.push('Model is required');\n    }\n\n    if (credentials.apiKey) {\n      const apiKeyValidation = this.validateApiKey(\n        credentials.apiKey,\n        credentials.provider,\n      );\n      errors.push(...apiKeyValidation.errors);\n      warnings.push(...apiKeyValidation.warnings);\n    }\n\n    const settingsValidation = this.validateSettings(credentials);\n    errors.push(...settingsValidation.errors);\n    warnings.push(...settingsValidation.warnings);\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n      warnings,\n    };\n  }\n\n  validateApiKey(apiKey: string, provider: string): ValidationResult {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    if (!apiKey.trim()) {\n      errors.push('API key cannot be empty');\n      return {isValid: false, errors, warnings};\n    }\n\n    const isValidFormat = utilValidateApiKey(apiKey);\n    if (!isValidFormat) {\n      errors.push(`Invalid API key format for provider: ${provider}`);\n    }\n\n    switch (provider) {\n      case 'openai':\n        if (!apiKey.startsWith('sk-')) {\n          warnings.push('OpenAI API keys typically start with \"sk-\"');\n        }\n        break;\n      case 'anthropic':\n        if (!apiKey.startsWith('sk-ant-')) {\n          warnings.push('Anthropic API keys typically start with \"sk-ant-\"');\n        }\n        break;\n      case 'google':\n        if (apiKey.length < 30) {\n          warnings.push(\n            'Google API keys are typically longer than 30 characters',\n          );\n        }\n        break;\n    }\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n      warnings,\n    };\n  }\n\n  validateSettings(credentials: RawiCredentials): ValidationResult {\n    const errors: string[] = [];\n    const warnings: string[] = [];\n\n    if (credentials.temperature !== undefined) {\n      if (!validateTemperature(credentials.temperature)) {\n        errors.push('Temperature must be between 0 and 2');\n      }\n    }\n\n    if (credentials.maxTokens !== undefined) {\n      if (!validateMaxTokens(credentials.maxTokens)) {\n        errors.push('Max tokens must be a positive integer');\n      }\n    }\n\n    if (\n      credentials.language &&\n      !['en', 'es', 'fr', 'de', 'it', 'pt', 'ru', 'ja', 'ko', 'zh'].includes(\n        credentials.language,\n      )\n    ) {\n      warnings.push(\n        `Language \"${credentials.language}\" may not be fully supported`,\n      );\n    }\n\n    return {\n      isValid: errors.length === 0,\n      errors,\n      warnings,\n    };\n  }\n}\n"]}