rawi
Version:
Rawi (راوي) is the developer-friendly AI CLI that brings the power of 11 major AI providers directly to your terminal. With seamless shell integration, persistent conversations, and 200+ specialized prompt templates, Rawi transforms your command line into
1 lines • 4.72 kB
Source Map (JSON)
{"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"]}