{"repo": "ashleyrabbitt/aiside", "files": {"config/deepseek.php": {"69bc9fee3047629be62f349097b1e4d5b5efcadb": {"t": 1785745764.4162157, "n": 900, "h": "01d87353efb463d7", "c": " env('DEEPSEEK_API_KEY'),\n\n /*\n |--------------------------------------------------------------------------\n | Request Timeout\n |--------------------------------------------------------------------------\n |\n | The timeout may be used to specify the maximum number of seconds to wait\n | for a response. By default, the client will time out after 30 seconds.\n */\n\n 'request_timeout' => env('DEEPSEEK_REQUEST_TIMEOUT', 30),\n];\n"}, "4152bbe6d68c8f6d01c49e2cf339d1f44c0666ab": {"t": 1785756278.8439217, "n": 900, "h": "01d87353efb463d7", "c": " env('DEEPSEEK_API_KEY'),\n\n /*\n |--------------------------------------------------------------------------\n | Request Timeout\n |--------------------------------------------------------------------------\n |\n | The timeout may be used to specify the maximum number of seconds to wait\n | for a response. By default, the client will time out after 30 seconds.\n */\n\n 'request_timeout' => env('DEEPSEEK_REQUEST_TIMEOUT', 30),\n];\n"}}, "app/Http/Controllers/Dashboard/SettingsController.php": {"69bc9fee3047629be62f349097b1e4d5b5efcadb": {"t": 1785746151.540055, "n": 40621, "h": "2a820d33e439ddcc", "c": " Extension::query()\n ->where('slug', 'chat-setting')\n ->where('installed', true)\n ->exists(),\n ]);\n }\n\n public function generalSave(GeneralSettingsRequest $request): JsonResponse\n {\n if (Helper::appIsNotDemo()) {\n $settings = Setting::getCache();\n $settings_two = SettingTwo::getCache();\n\n $metaTitleLocal = $request->metaTitleLocal;\n $metaDescLocal = $request->metaDescLocal;\n\n if ($metaTitleLocal === $settings_two->languages_default) {\n $settings->meta_title = $request->meta_title;\n } else {\n $meta_title = PrivacyTerms::where('type', 'meta_title')->where('lang', $metaTitleLocal)->first();\n if ($meta_title) {\n $meta_title->content = $request->meta_title;\n $meta_title->save();\n } else {\n $new_meta_title = new PrivacyTerms;\n $new_meta_title->type = 'meta_title';\n $new_meta_title->lang = $metaTitleLocal;\n $new_meta_title->content = $request->meta_title;\n $new_meta_title->save();\n }\n }\n\n if ($metaDescLocal === $settings_two->languages_default) {\n $settings->meta_description = $request->meta_description;\n } else {\n $meta_description = PrivacyTerms::where('type', 'meta_desc')->where('lang', $metaDescLocal)->first();\n if ($meta_description) {\n $meta_description->content = $request->meta_description;\n $meta_description->save();\n } else {\n $new_meta_description = new PrivacyTerms;\n $new_meta_description->type = 'meta_desc';\n $new_meta_description->lang = $metaDescLocal;\n $new_meta_description->content = $request->meta_description;\n $new_meta_description->save();\n }\n }\n\n $inputs = [];\n $fields = [\n 'chat_setting_for_customer',\n 'default_ai_engine',\n 'default_aw_image_engine',\n 'photo_studio',\n ];\n foreach ($fields as $field) {\n if ($request->has($field)) {\n $inputs[$field] = $request->$field;\n }\n }\n if (! empty($inputs)) {\n setting($inputs)->save();\n }\n\n $settings->site_name = $request->site_name;\n $settings->site_url = $request->site_url;\n $settings->site_email = $request->site_email;\n $settings->default_country = $request->default_country;\n $settings->default_currency = $request->default_currency;\n $settings->register_active = $request->register_active;\n $settings->login_with_otp = $request->login_with_otp;\n $settings->tour_seen = $request->tour_seen;\n $settings->google_analytics_code = $request->google_analytics_code;\n $settings->meta_keywords = $request->meta_keywords;\n $settings->dashboard_code_before_head = $request->dashboard_code_before_head;\n $settings->dashboard_code_before_body = $request->dashboard_code_before_body;\n $settings->feature_ai_writer = $request->feature_ai_writer;\n $settings->feature_ai_rewriter = $request->feature_ai_rewriter;\n $settings->feature_ai_chat_image = $request->feature_ai_chat_image;\n $settings->feature_ai_image = $request->feature_ai_image;\n $settings_two->feature_ai_video = $request->feature_ai_video;\n $settings->feature_ai_chat = $request->feature_ai_chat;\n $settings->feature_ai_code = $request->feature_ai_code;\n $settings->feature_ai_speech_to_text = $request->feature_ai_speech_to_text;\n $settings->feature_ai_voiceover = $request->feature_ai_voiceover;\n $settings->feature_affilates = $request->feature_affilates;\n $settings->user_api_option = $request->user_api_option;\n $settings->feature_ai_article_wizard = $request->feature_ai_article_wizard;\n $settings->feature_ai_vision = $request->feature_ai_vision;\n $settings->feature_ai_pdf = $request->feature_ai_pdf;\n $settings->feature_ai_youtube = $request->feature_ai_youtube;\n $settings->feature_ai_rss = $request->feature_ai_rss;\n $settings->feature_ai_voice_clone = (bool) $request->feature_ai_voice_clone;\n $settings->team_functionality = $request->team_functionality;\n $settings->feature_ai_advanced_editor = $request->feature_ai_advanced_editor;\n $settings->login_without_confirmation = $request->login_without_confirmation;\n $settings->facebook_active = $request->facebook_active ?? 0;\n $settings->google_active = $request->google_active ?? 0;\n $settings->github_active = $request->github_active ?? 0;\n $settings->mobile_payment_active = $request->mobile_payment_active ?? 0;\n $settings->recaptcha_login = $request->recaptcha_login;\n $settings->recaptcha_register = $request->recaptcha_register;\n $settings->recaptcha_sitekey = $request->recaptcha_sitekey;\n $settings->recaptcha_secretkey = $request->recaptcha_secretkey;\n $settings->mrrobot_name = $request->mrrobot_name;\n $settings->mrrobot_search_words = $request->mrrobot_search_words;\n $settings->save();\n\n setting(\n [\n 'notification_active' => $request->notification_active,\n 'pusher_app_id' => $request->pusher_app_id,\n 'pusher_app_key' => $request->pusher_app_key,\n 'pusher_app_secret' => $request->pusher_app_secret,\n 'pusher_app_cluster' => $request->pusher_app_cluster,\n 'user_prompt_library' => $request->user_prompt_library,\n 'user_ai_image_prompt_library' => $request->user_ai_image_prompt_library,\n 'ai_voice_isolator' => $request->ai_voice_isolator,\n 'user_ai_writer_custom_templates' => $request->user_ai_writer_custom_templates,\n 'select_model_option' => $request->select_model_option,\n 'freeCreditsUponRegistration' => $request->entities,\n 'onetime_commission' => $request->onetime_commission,\n ]\n )->save();\n\n $this->toggleOpenaiTemplateStatus($settings);\n\n $settings_two->daily_limit_enabled = $request->limit;\n $settings_two->allowed_images_count = $request->daily_limit_count;\n $settings_two->openai_default_stream_server = $request->openai_default_stream_server;\n $settings_two->daily_voice_limit_enabled = $request->voice_limit;\n $settings_two->allowed_voice_count = $request->daily_voice_limit_count;\n\n $settings_two->save();\n\n $logo_types = [\n 'logo' => '',\n 'logo_dark' => 'dark',\n 'logo_sticky' => 'sticky',\n 'logo_dashboard' => 'dashboard',\n 'logo_dashboard_dark' => 'dashboard-dark',\n 'logo_collapsed' => 'collapsed',\n 'logo_collapsed_dark' => 'collapsed-dark',\n // retina\n 'logo_2x' => '2x',\n 'logo_dark_2x' => 'dark-2x',\n 'logo_sticky_2x' => 'sticky-2x',\n 'logo_dashboard_2x' => 'dashboard-2x',\n 'logo_dashboard_dark_2x' => 'dashboard-dark-2x',\n 'logo_collapsed_2x' => 'collapsed-2x',\n 'logo_collapsed_dark_2x' => 'collapsed-dark-2x',\n ];\n\n foreach ($logo_types as $logo => $logo_prefix) {\n\n if ($request->hasFile($logo)) {\n $path = 'upload/images/logo/';\n $image = $request->file($logo);\n $image_name = Str::random(4) . '-' . $logo_prefix . '-' . Str::slug($settings->site_name) . '-logo.' . $image->getClientOriginalExtension();\n\n // Resim uzantı kontrolü\n $imageTypes = ['jpg', 'jpeg', 'png', 'svg', 'webp'];\n if (! in_array(Str::lower($image->getClientOriginalExtension()), $imageTypes)) {\n $data = [\n 'errors' => ['The file extension must be jpg, jpeg, png, webp or svg.'],\n ];\n\n return response()->json($data, 419);\n }\n\n $image->move($path, $image_name);\n\n $settings->{$logo . '_path'} = $path . $image_name;\n $settings->{$logo} = $image_name;\n $settings->save();\n }\n\n }\n\n if ($request->hasFile('favicon')) {\n $path = 'upload/images/favicon/';\n $image = $request->file('favicon');\n $image_name = Str::random(4) . '-' . Str::slug($settings->site_name) . '-favicon.' . $image->getClientOriginalExtension();\n\n // Resim uzantı kontrolü\n $imageTypes = ['jpg', 'jpeg', 'png', 'svg', 'webp'];\n if (! in_array(Str::lower($image->getClientOriginalExtension()), $imageTypes)) {\n $data = [\n 'errors' => ['The file extension must be jpg, jpeg, png, webp or svg.'],\n ];\n\n return response()->json($data, 419);\n }\n\n $image->move($path, $image_name);\n\n $settings->favicon_path = $path . $image_name;\n $settings->favicon = $image_name;\n $settings->save();\n }\n\n app(MenuService::class)->regenerate();\n }\n\n return response()->json([], 200);\n }\n\n public function toggleOpenaiTemplateStatus($settings)\n {\n $templates = [\n 'ai_article_wizard_generator' => $settings->feature_ai_article_wizard,\n 'ai_writer' => $settings->feature_ai_writer,\n 'ai_rewriter' => $settings->feature_ai_rewriter,\n 'ai_chat_image' => $settings->feature_ai_chat_image,\n 'ai_image_generator' => $settings->feature_ai_image,\n 'ai_code_generator' => $settings->feature_ai_code,\n 'ai_speech_to_text' => $settings->feature_ai_speech_to_text,\n 'ai_voiceover' => $settings->feature_ai_voiceover,\n 'ai_vision' => $settings->feature_ai_vision,\n 'ai_pdf' => $settings->feature_ai_pdf,\n 'ai_youtube' => $settings->feature_ai_youtube,\n 'ai_rss' => $settings->feature_ai_rss,\n ];\n\n foreach ($templates as $key => $status) {\n OpenAIGenerator::query()->where('slug', $key)->update(['active' => $status]);\n }\n }\n\n public function anthropic(Request $request)\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.anthropic');\n }\n\n public function deepseek(Request $request)\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.deepseek');\n }\n\n public function deepseekSave(Request $request)\n {\n $data = $request->validate([\n 'deepseek_api_secret' => 'required',\n 'deepseek_default_model' => 'required|string',\n 'deepseek_max_output_length' => 'required|string',\n ]);\n\n $data['deepseek_api_secret'] = implode(',', $data['deepseek_api_secret']);\n\n setting($data)->save();\n\n return redirect()->back()->with([\n 'type' => 'success',\n 'message' => __('setting saved successfully.'),\n ]);\n }\n\n public function deepseekTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n $token = ApiHelper::setDeepseekKey();\n\n $url = 'https://api.deepseek.com/models';\n\n $response = Http::withHeaders([\n 'Accept' => 'application/json',\n 'Authorization' => \"Bearer $token\",\n ])->get($url);\n\n // Yanıtı Kontrol Etme\n if ($response->successful()) {\n echo '
' . $token . ' - SUCCESS
';\n } else {\n echo $response->json('error.message') . ' - ' . $token . ' -FAILED
';\n }\n }\n\n public function anthropicTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n $token = ApiHelper::setAnthropicKey();\n\n $request = Http::withHeaders([\n 'x-api-key' => $token,\n 'Content-Type' => 'application/json',\n 'Accept' => 'application/json',\n 'anthropic-version' => '2023-06-01',\n ])->post('https://api.anthropic.com/v1/messages', [\n 'model' => setting('anthropic_default_model'),\n 'max_tokens' => (int) setting('anthropic_max_output_length'),\n 'messages' => [\n [\n 'role' => 'user',\n 'content' => 'Hello, how are you?',\n ],\n ],\n ]);\n\n if ($request->ok()) {\n echo '
' . $token . ' - SUCCESS
';\n } else {\n echo $request->json('error.message') . ' - ' . $token . ' -FAILED
';\n }\n }\n\n public function anthropicSave(Request $request)\n {\n $data = $request->validate([\n 'anthropic_api_secret' => 'required|string',\n 'anthropic_default_model' => 'required|string',\n 'anthropic_max_input_length' => 'required|string',\n 'anthropic_max_output_length' => 'required|string',\n 'anthropic_bedrock_model' => 'string',\n ]);\n\n setting($data)->save();\n\n return response()->json([], 200);\n }\n\n public function gemini(Request $request)\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.gemini');\n }\n\n public function geminiTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n $newhistory = [\n [\n 'role' => 'user',\n 'parts' => [\n [\n 'text' => 'who are u.',\n ],\n ],\n ],\n ];\n\n $randomToken = ApiHelper::setGeminiKey();\n $client = app(\\App\\Domains\\Engine\\Services\\GeminiService::class);\n $response = $client\n ->setHistory($newhistory)\n ->generateContent();\n if ($response->ok()) {\n echo '
' . $randomToken . ' - SUCCESS
';\n } else {\n echo $response->json('error.message') . ' -FAILED
';\n }\n }\n\n public function geminiSave(Request $request)\n {\n $data = $request->validate([\n 'gemini_api_secret' => 'required|string',\n 'gemini_default_model' => 'required|string',\n 'gemini_max_input_length' => 'required|string',\n 'gemini_max_output_length' => 'required|string',\n ]);\n setting($data)->save();\n\n return response()->json([], 200);\n }\n\n public function xAI()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.x-ai');\n }\n\n public function openai()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.openai');\n }\n\n public function stablediffusion()\n {\n return view('panel.admin.settings.stablediffusion');\n }\n\n public function unsplashapi(Request $request)\n {\n return view('panel.admin.settings.unsplashapi');\n }\n\n public function unsplashapiTest()\n {\n $client = new Client;\n $settings = SettingTwo::getCache();\n if ($settings->unsplash_api_key == '') {\n echo 'You must provide ' . EngineEnum::UNSPLASH->label() . ' API Key.';\n\n return;\n }\n\n $apiKey = $settings->unsplash_api_key;\n\n $client = new Client;\n\n try {\n $response = $client->get(\"https://api.unsplash.com/search/photos?query=Google&count=1&client_id=$apiKey\");\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n\n public function unsplashapiSave(Request $request)\n {\n $settings = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->unsplash_api_key = $request->unsplash_api_key;\n $settings->save();\n }\n\n return response()->json([], 200);\n }\n\n public function pexelsapi(Request $request)\n {\n return view('panel.admin.settings.pexels');\n }\n\n public function pexelsapiTest()\n {\n $client = new Client;\n $api = setting('pexels_api_key');\n if ($api == '') {\n echo 'You must provide Pexels API Key.';\n\n return;\n }\n\n $apiKey = $api;\n\n $client = new Client;\n\n try {\n $response = $client->get('https://api.pexels.com/v1/search?query=Google&per_page=1', [\n 'headers' => [\n 'Authorization' => $apiKey,\n ],\n ]);\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n\n public function pexelsapiSave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n setting(['pexels_api_key' => $request->pexels_api_key])->save();\n }\n\n return response()->json([], 200);\n }\n\n public function pixabayapi(Request $request)\n {\n return view('panel.admin.settings.pixabay');\n }\n\n public function pixabayapiTest()\n {\n $client = new Client;\n $api = setting('pixabay_api_key');\n if ($api == '') {\n echo 'You must provide Pixabay API Key.';\n\n return;\n }\n\n $apiKey = $api;\n $client = new Client;\n\n try {\n $response = $client->get(\"https://pixabay.com/api/?key=$apiKey&q=Google\");\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n\n public function pixabayapiSave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n setting(['pixabay_api_key' => $request->pixabay_api_key])->save();\n }\n\n return response()->json([], 200);\n }\n\n public function serperapi(Request $request)\n {\n return view('panel.admin.settings.serperapi');\n }\n\n public function perplexity(Request $request)\n {\n return view('panel.admin.settings.perplexity');\n }\n\n public function serperapiSave(Request $request)\n {\n $settings = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->serper_api_key = $request->serper_api_key;\n $settings->save();\n\n if ($request->hasAny(['serper_seo_tool_improve', 'serper_seo_aw_anlyze', 'seo_ai_tool', 'serper_seo_aw_improve', 'serper_seo_aw_sq', 'serper_seo_aw_keyword', 'serper_seo_blog_title_desc', 'serper_seo_site_meta'])) {\n setting([\n 'serper_seo_aw_sq' => $request->serper_seo_aw_sq,\n 'serper_seo_aw_keyword' => $request->serper_seo_aw_keyword,\n 'serper_seo_blog_title_desc' => $request->serper_seo_blog_title_desc,\n 'serper_seo_site_meta' => $request->serper_seo_site_meta,\n 'serper_seo_aw_anlyze' => $request->serper_seo_aw_anlyze,\n 'serper_seo_aw_improve' => $request->serper_seo_aw_improve,\n 'seo_ai_tool' => $request->seo_ai_tool,\n 'serper_seo_tool_improve' => $request->serper_seo_tool_improve,\n ])->save();\n }\n }\n\n return response()->json([], 200);\n }\n\n public function perplexitySave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n setting([\n 'perplexity_key' => $request->perplexity_key,\n ])->save();\n }\n\n return back()->with(['message' => __('Updated Successfully'), 'type' => 'success']);\n }\n\n public function serperapiTest()\n {\n try {\n $settings = SettingTwo::getCache();\n if ($settings->serper_api_key == '') {\n echo 'You must provide Serper API Key.';\n\n return;\n }\n $client = new Client;\n $response = $client->post('https://google.serper.dev/search', [\n 'headers' => [\n 'X-API-KEY' => $settings->serper_api_key,\n 'Content-Type' => 'application/json',\n ],\n 'json' => [\n 'q' => 'Coffee',\n ],\n ]);\n $responseData = json_decode($response->getBody(), true);\n echo '
' . $settings->serper_api_key . ' - SUCCESS

Example about \"Coffee\":
' . $responseData['organic'][0]['snippet'] . '
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $settings->serper_api_key . ' -FAILED
';\n }\n }\n\n public function xAiTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n $settings = Setting::getCache();\n $apiKeys = ApiHelper::setXAiKey($settings, true);\n foreach ($apiKeys as $apiKey) {\n try {\n $history[] = ['role' => 'system', 'content' => 'Your name is Grok AI and you are a helpful assistant.'];\n $history[] = ['role' => 'user', 'content' => 'What is your name?'];\n $cli = OpenAI::factory()->withBaseUri('https://api.x.ai/v1')\n ->withHttpHeader('Authorization', 'Bearer ' . $apiKey)\n ->withHttpHeader('Content-Type', 'application/json')\n ->withApiKey($apiKey)\n ->make();\n\n $c = $cli->chat()->create(\n [\n 'messages' => $history,\n 'model' => EntityEnum::GROK_2_1212->value,\n 'stream' => false,\n 'temperature' => 0,\n ]\n );\n echo '
' . $c['choices'][0]['message']['content'];\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception|Throwable $e) {\n echo __('Something went wrong. Please check your API key or Credit balance.') . '
' . $apiKey . ' -FAILED
';\n }\n }\n }\n\n public function openaiTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n $settings = Setting::getCache();\n $apiKeys = ApiHelper::setOpenAiKey($settings, true);\n foreach ($apiKeys as $apiKey) {\n\n $client = new Client([\n 'base_uri' => 'https://api.openai.com/v1/',\n 'headers' => [\n 'Authorization' => 'Bearer ' . $apiKey,\n 'Content-Type' => 'application/json',\n ],\n ]);\n\n try {\n\n $response = $client->post('chat/completions', [\n 'json' => [\n 'model' => EntityEnum::GPT_3_5_TURBO->value,\n 'messages' => [['role' => 'user', 'content' => 'Say this is a test!']],\n 'temperature' => 0.7,\n ],\n ]);\n\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n }\n\n public function stablediffusionTest(): void\n {\n $settings = SettingTwo::getCache();\n if ($settings->stable_diffusion_api_key === '') {\n echo 'You must provide Stable Difussion API key.';\n\n return;\n }\n\n $apiKeys = explode(',', $settings->stable_diffusion_api_key);\n\n foreach ($apiKeys as $apiKey) {\n\n $client = new Client([\n 'base_uri' => 'https://api.stability.ai/v2beta/stable-image/generate/',\n 'headers' => [\n 'Content-Type' => 'application/json',\n 'Authorization' => 'Bearer ' . $apiKey,\n 'Accept' => 'application/json',\n ],\n ]);\n $sd3Payload = [\n [\n 'name' => 'prompt',\n 'contents' => 'cat',\n ],\n [\n 'name' => 'file',\n 'contents' => 'no',\n ],\n [\n 'name' => 'output_format',\n 'contents' => 'png',\n ],\n [\n 'name' => 'model',\n 'contents' => 'sd3',\n ],\n ];\n\n try {\n $response = $client->post('sd3', [\n 'headers' => ['accept' => 'application/json'],\n 'multipart' => $sd3Payload,\n ]);\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n if ($e->hasResponse()) {\n try {\n $responseBody = $e->getResponse()->getBody()->getContents();\n $errorData = json_decode($responseBody, true);\n $errorMessage = $errorData['message'] ?? ($errorData['errors'][0] ?? 'Unknown error');\n\n echo $errorMessage . ' - ' . $apiKey . ' -FAILED
';\n } catch (JsonException $jsonException) {\n echo 'Failed to decode error response.' . ' - ' . $apiKey . ' -FAILED
';\n }\n } else {\n echo 'An unexpected error occurred: ' . $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n }\n }\n\n public function xAiSave(Request $request): JsonResponse\n {\n if (Helper::appIsNotDemo()) {\n setting([\n 'xai_api_secret' => $request->xai_api_secret,\n 'xai_default_model' => $request->xai_default_model,\n ])->save();\n }\n\n return response()->json([], 200);\n }\n\n public function openaiSave(Request $request): JsonResponse\n {\n $settings = Setting::getCache();\n $settings_two = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->openai_api_secret = $request->openai_api_secret;\n $settings->openai_default_model = $request->openai_default_model;\n $settings->openai_default_language = $request->openai_default_language;\n $settings->openai_default_tone_of_voice = $request->openai_default_tone_of_voice;\n $settings->openai_default_creativity = $request->openai_default_creativity;\n $settings->openai_max_input_length = $request->openai_max_input_length;\n $settings->openai_max_output_length = $request->openai_max_output_length;\n $settings_two->dalle = $request->dalle_default_model;\n $settings_two->openai_default_stream_server = $request->openai_default_stream_server;\n $settings->save();\n $settings_two->save();\n setting(key: [\n 'hide_creativity_option' => $request->hide_creativity_option,\n 'hide_tone_of_voice_option' => $request->hide_tone_of_voice_option,\n 'hide_output_length_option' => $request->hide_output_length_option,\n 'dalle_hidden' => $request->dalle_hidden,\n 'realtime_voice_chat' => $request->realtime_voice_chat,\n 'openai_file_search' => $request->openai_file_search,\n 'enabled_gpt_image_1'\t\t => $request->enabled_gpt_image_1,\n ])->save();\n\n if (MarketplaceHelper::isRegistered('chatbot')) {\n \\App\\Extensions\\Chatbot\\System\\Models\\Chatbot::query()->update([\n 'ai_model' => $request->openai_default_model,\n ]);\n }\n }\n app(MenuService::class)->regenerate();\n\n return response()->json([], 200);\n }\n\n public function affiliateStatusSave($id, Request $request): JsonResponse\n {\n if (Helper::appIsNotDemo()) {\n $user = User::find($id);\n if ($user) {\n $user->affiliate_status = $request->input('affiliate_status');\n $user->save();\n }\n\n app(MenuService::class)->regenerate();\n }\n\n return response()->json([], 200);\n }\n\n public function stablediffusionSave(Request $request): JsonResponse\n {\n $settings = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->stable_diffusion_api_key = $request->stable_diffusion_api_key;\n $settings->stablediffusion_default_language = $request->stablediffusion_default_language;\n $settings->stablediffusion_default_model = $request->stablediffusion_default_model;\n\n if ($request->has('stablediffusion_bedrock_model')) {\n $settings->stablediffusion_bedrock_model = $request->stablediffusion_bedrock_model;\n }\n\n $settings->save();\n\n setting([\n 'stable_hidden' => $request->stable_hidden,\n ])->save();\n }\n\n return response()->json([], 200);\n }\n\n // thumbnail\n public function thumbnail()\n {\n return view('panel.admin.settings.thumbnail');\n }\n\n // thumbnailSave\n public function thumbnailSave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n setting(['image_thumbnail' => $request->image_thumbnail])->save();\n }\n\n return response()->json([], 200);\n }\n\n // thumbnailPurge\n public function thumbnailPurge()\n {\n if (Helper::appIsNotDemo()) {\n PurgeThumbImages();\n }\n\n return response()->json([], 200);\n }\n\n public function tts()\n {\n return view('panel.admin.settings.tts');\n }\n\n public function aimlapi(): View\n {\n return view('panel.admin.settings.aimlapi');\n }\n\n public function aimlapiSave(Request $request): JsonResponse\n {\n $settings = Setting::getCache();\n\n if (Helper::appIsNotDemo()) {\n $settings->update([\n 'aimlapi_key' => $request->aimlapi_key,\n 'ai_music_model' => $request->ai_music_model,\n ]);\n }\n\n return response()->json([], 200);\n }\n\n public function ttsSave(Request $request)\n {\n $settings = Setting::getCache();\n $settings_two = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->gcs_file = $request->gcs_file;\n $settings->gcs_name = $request->gcs_name;\n\n if ($settings_two->elevenlabs_api_key != $request->elevenlabs_api_key) {\n $settings_two->elevenlabs_api_key = $request->elevenlabs_api_key;\n if (MarketplaceHelper::isRegistered('chatbot-voice')) {\n ExtVoiceChatbot::query()->delete();\n }\n }\n\n $settings_two->feature_tts_google = $request->feature_tts_google;\n $settings_two->feature_tts_openai = $request->feature_tts_openai;\n $settings_two->feature_tts_elevenlabs = $request->feature_tts_elevenlabs;\n\n if ($request->hasAny(['feature_tts_azure', 'azure_api_key', 'azure_region'])) {\n setting([\n 'feature_tts_azure' => $request->get('feature_tts_azure'),\n 'azure_api_key' => $request->get('azure_api_key'),\n 'azure_region' => $request->get('azure_region'),\n ])->save();\n }\n\n if ($request->hasAny(['speechify_api_key', 'feature_tts_speechify'])) {\n setting([\n 'feature_tts_speechify' => $request->get('feature_tts_speechify'),\n 'speechify_api_key' => $request->get('speechify_api_key'),\n ])->save();\n }\n\n $settings->save();\n $settings_two->save();\n }\n\n return response()->json([], 200);\n }\n\n public function payment()\n {\n return view('panel.admin.settings.stripe');\n }\n\n public function paymentSave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n $settings = Setting::getCache();\n $settings->default_currency = $request->default_currency;\n $settings->stripe_active = 1;\n $settings->stripe_key = $request->stripe_key;\n $settings->stripe_secret = $request->stripe_secret;\n $settings->stripe_base_url = $request->stripe_base_url;\n $settings->save();\n }\n\n return response()->json([], 200);\n }\n\n public function privacy()\n {\n return view('panel.admin.settings.privacy');\n }\n\n public function privacySave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n\n $settings_two = SettingTwo::getCache();\n $settings = Setting::getCache();\n\n $termsLocal = $request->termsLocal;\n $privacyLocal = $request->privacyLocal;\n\n if ($termsLocal == $settings_two->languages_default) {\n $settings->terms_content = $request->terms_content;\n } else {\n $terms = PrivacyTerms::where('type', 'terms')->where('lang', $termsLocal)->first();\n if ($terms) {\n $terms->content = $request->terms_content;\n $terms->save();\n } else {\n $newTerms = new PrivacyTerms;\n $newTerms->type = 'terms';\n $newTerms->lang = $termsLocal;\n $newTerms->content = $request->terms_content;\n $newTerms->save();\n }\n }\n\n if ($privacyLocal == $settings_two->languages_default) {\n $settings->privacy_content = $request->privacy_content;\n } else {\n $privacy = PrivacyTerms::where('type', 'privacy')->where('lang', $privacyLocal)->first();\n if ($privacy) {\n $privacy->content = $request->privacy_content;\n $privacy->save();\n } else {\n $newPrivacy = new PrivacyTerms;\n $newPrivacy->type = 'privacy';\n $newPrivacy->lang = $privacyLocal;\n $newPrivacy->content = $request->privacy_content;\n $newPrivacy->save();\n }\n }\n\n $settings->privacy_enable = $request->privacy_enable;\n $settings->privacy_enable_login = $request->privacy_enable_login;\n $settings->save();\n\n }\n\n return response()->json([], 200);\n }\n\n public function getPrivacyTermsContent(Request $request)\n {\n $type = $request->input('type');\n $language = $request->input('lang');\n $settings_two = SettingTwo::getCache();\n\n if ($settings_two->languages_default == $language) {\n\n $settings = Setting::getCache();\n $content = [\n 'type' => $type,\n 'lang' => $language,\n 'content' => $type == 'terms' ? $settings->terms_content : $settings->privacy_content,\n ];\n\n } else {\n $privacy_terms = PrivacyTerms::where('type', $type)->where('lang', $language)->first();\n $content = [\n 'type' => $privacy_terms?->type ?? $type,\n 'lang' => $privacy_terms?->lang,\n 'content' => $privacy_terms?->content,\n ];\n }\n\n return response()->json($content);\n }\n\n public function getMetaContent(Request $request)\n {\n $type = $request->input('type');\n $language = $request->input('lang');\n $settings_two = SettingTwo::getCache();\n\n if ($settings_two->languages_default == $language) {\n\n $settings = Setting::getCache();\n $content = [\n 'type' => $type,\n 'lang' => $language,\n 'content' => $type == 'meta_title' ? $settings->meta_title : $settings->meta_description,\n ];\n\n } else {\n $meta = PrivacyTerms::where('type', $type)->where('lang', $language)->first();\n $content = [\n 'type' => $meta?->type ?? $type,\n 'lang' => $meta?->lang,\n 'content' => $meta?->content,\n ];\n }\n\n return response()->json($content);\n }\n}\n"}, "4152bbe6d68c8f6d01c49e2cf339d1f44c0666ab": {"t": 1785756279.9215212, "n": 40621, "h": "2a820d33e439ddcc", "c": " Extension::query()\n ->where('slug', 'chat-setting')\n ->where('installed', true)\n ->exists(),\n ]);\n }\n\n public function generalSave(GeneralSettingsRequest $request): JsonResponse\n {\n if (Helper::appIsNotDemo()) {\n $settings = Setting::getCache();\n $settings_two = SettingTwo::getCache();\n\n $metaTitleLocal = $request->metaTitleLocal;\n $metaDescLocal = $request->metaDescLocal;\n\n if ($metaTitleLocal === $settings_two->languages_default) {\n $settings->meta_title = $request->meta_title;\n } else {\n $meta_title = PrivacyTerms::where('type', 'meta_title')->where('lang', $metaTitleLocal)->first();\n if ($meta_title) {\n $meta_title->content = $request->meta_title;\n $meta_title->save();\n } else {\n $new_meta_title = new PrivacyTerms;\n $new_meta_title->type = 'meta_title';\n $new_meta_title->lang = $metaTitleLocal;\n $new_meta_title->content = $request->meta_title;\n $new_meta_title->save();\n }\n }\n\n if ($metaDescLocal === $settings_two->languages_default) {\n $settings->meta_description = $request->meta_description;\n } else {\n $meta_description = PrivacyTerms::where('type', 'meta_desc')->where('lang', $metaDescLocal)->first();\n if ($meta_description) {\n $meta_description->content = $request->meta_description;\n $meta_description->save();\n } else {\n $new_meta_description = new PrivacyTerms;\n $new_meta_description->type = 'meta_desc';\n $new_meta_description->lang = $metaDescLocal;\n $new_meta_description->content = $request->meta_description;\n $new_meta_description->save();\n }\n }\n\n $inputs = [];\n $fields = [\n 'chat_setting_for_customer',\n 'default_ai_engine',\n 'default_aw_image_engine',\n 'photo_studio',\n ];\n foreach ($fields as $field) {\n if ($request->has($field)) {\n $inputs[$field] = $request->$field;\n }\n }\n if (! empty($inputs)) {\n setting($inputs)->save();\n }\n\n $settings->site_name = $request->site_name;\n $settings->site_url = $request->site_url;\n $settings->site_email = $request->site_email;\n $settings->default_country = $request->default_country;\n $settings->default_currency = $request->default_currency;\n $settings->register_active = $request->register_active;\n $settings->login_with_otp = $request->login_with_otp;\n $settings->tour_seen = $request->tour_seen;\n $settings->google_analytics_code = $request->google_analytics_code;\n $settings->meta_keywords = $request->meta_keywords;\n $settings->dashboard_code_before_head = $request->dashboard_code_before_head;\n $settings->dashboard_code_before_body = $request->dashboard_code_before_body;\n $settings->feature_ai_writer = $request->feature_ai_writer;\n $settings->feature_ai_rewriter = $request->feature_ai_rewriter;\n $settings->feature_ai_chat_image = $request->feature_ai_chat_image;\n $settings->feature_ai_image = $request->feature_ai_image;\n $settings_two->feature_ai_video = $request->feature_ai_video;\n $settings->feature_ai_chat = $request->feature_ai_chat;\n $settings->feature_ai_code = $request->feature_ai_code;\n $settings->feature_ai_speech_to_text = $request->feature_ai_speech_to_text;\n $settings->feature_ai_voiceover = $request->feature_ai_voiceover;\n $settings->feature_affilates = $request->feature_affilates;\n $settings->user_api_option = $request->user_api_option;\n $settings->feature_ai_article_wizard = $request->feature_ai_article_wizard;\n $settings->feature_ai_vision = $request->feature_ai_vision;\n $settings->feature_ai_pdf = $request->feature_ai_pdf;\n $settings->feature_ai_youtube = $request->feature_ai_youtube;\n $settings->feature_ai_rss = $request->feature_ai_rss;\n $settings->feature_ai_voice_clone = (bool) $request->feature_ai_voice_clone;\n $settings->team_functionality = $request->team_functionality;\n $settings->feature_ai_advanced_editor = $request->feature_ai_advanced_editor;\n $settings->login_without_confirmation = $request->login_without_confirmation;\n $settings->facebook_active = $request->facebook_active ?? 0;\n $settings->google_active = $request->google_active ?? 0;\n $settings->github_active = $request->github_active ?? 0;\n $settings->mobile_payment_active = $request->mobile_payment_active ?? 0;\n $settings->recaptcha_login = $request->recaptcha_login;\n $settings->recaptcha_register = $request->recaptcha_register;\n $settings->recaptcha_sitekey = $request->recaptcha_sitekey;\n $settings->recaptcha_secretkey = $request->recaptcha_secretkey;\n $settings->mrrobot_name = $request->mrrobot_name;\n $settings->mrrobot_search_words = $request->mrrobot_search_words;\n $settings->save();\n\n setting(\n [\n 'notification_active' => $request->notification_active,\n 'pusher_app_id' => $request->pusher_app_id,\n 'pusher_app_key' => $request->pusher_app_key,\n 'pusher_app_secret' => $request->pusher_app_secret,\n 'pusher_app_cluster' => $request->pusher_app_cluster,\n 'user_prompt_library' => $request->user_prompt_library,\n 'user_ai_image_prompt_library' => $request->user_ai_image_prompt_library,\n 'ai_voice_isolator' => $request->ai_voice_isolator,\n 'user_ai_writer_custom_templates' => $request->user_ai_writer_custom_templates,\n 'select_model_option' => $request->select_model_option,\n 'freeCreditsUponRegistration' => $request->entities,\n 'onetime_commission' => $request->onetime_commission,\n ]\n )->save();\n\n $this->toggleOpenaiTemplateStatus($settings);\n\n $settings_two->daily_limit_enabled = $request->limit;\n $settings_two->allowed_images_count = $request->daily_limit_count;\n $settings_two->openai_default_stream_server = $request->openai_default_stream_server;\n $settings_two->daily_voice_limit_enabled = $request->voice_limit;\n $settings_two->allowed_voice_count = $request->daily_voice_limit_count;\n\n $settings_two->save();\n\n $logo_types = [\n 'logo' => '',\n 'logo_dark' => 'dark',\n 'logo_sticky' => 'sticky',\n 'logo_dashboard' => 'dashboard',\n 'logo_dashboard_dark' => 'dashboard-dark',\n 'logo_collapsed' => 'collapsed',\n 'logo_collapsed_dark' => 'collapsed-dark',\n // retina\n 'logo_2x' => '2x',\n 'logo_dark_2x' => 'dark-2x',\n 'logo_sticky_2x' => 'sticky-2x',\n 'logo_dashboard_2x' => 'dashboard-2x',\n 'logo_dashboard_dark_2x' => 'dashboard-dark-2x',\n 'logo_collapsed_2x' => 'collapsed-2x',\n 'logo_collapsed_dark_2x' => 'collapsed-dark-2x',\n ];\n\n foreach ($logo_types as $logo => $logo_prefix) {\n\n if ($request->hasFile($logo)) {\n $path = 'upload/images/logo/';\n $image = $request->file($logo);\n $image_name = Str::random(4) . '-' . $logo_prefix . '-' . Str::slug($settings->site_name) . '-logo.' . $image->getClientOriginalExtension();\n\n // Resim uzantı kontrolü\n $imageTypes = ['jpg', 'jpeg', 'png', 'svg', 'webp'];\n if (! in_array(Str::lower($image->getClientOriginalExtension()), $imageTypes)) {\n $data = [\n 'errors' => ['The file extension must be jpg, jpeg, png, webp or svg.'],\n ];\n\n return response()->json($data, 419);\n }\n\n $image->move($path, $image_name);\n\n $settings->{$logo . '_path'} = $path . $image_name;\n $settings->{$logo} = $image_name;\n $settings->save();\n }\n\n }\n\n if ($request->hasFile('favicon')) {\n $path = 'upload/images/favicon/';\n $image = $request->file('favicon');\n $image_name = Str::random(4) . '-' . Str::slug($settings->site_name) . '-favicon.' . $image->getClientOriginalExtension();\n\n // Resim uzantı kontrolü\n $imageTypes = ['jpg', 'jpeg', 'png', 'svg', 'webp'];\n if (! in_array(Str::lower($image->getClientOriginalExtension()), $imageTypes)) {\n $data = [\n 'errors' => ['The file extension must be jpg, jpeg, png, webp or svg.'],\n ];\n\n return response()->json($data, 419);\n }\n\n $image->move($path, $image_name);\n\n $settings->favicon_path = $path . $image_name;\n $settings->favicon = $image_name;\n $settings->save();\n }\n\n app(MenuService::class)->regenerate();\n }\n\n return response()->json([], 200);\n }\n\n public function toggleOpenaiTemplateStatus($settings)\n {\n $templates = [\n 'ai_article_wizard_generator' => $settings->feature_ai_article_wizard,\n 'ai_writer' => $settings->feature_ai_writer,\n 'ai_rewriter' => $settings->feature_ai_rewriter,\n 'ai_chat_image' => $settings->feature_ai_chat_image,\n 'ai_image_generator' => $settings->feature_ai_image,\n 'ai_code_generator' => $settings->feature_ai_code,\n 'ai_speech_to_text' => $settings->feature_ai_speech_to_text,\n 'ai_voiceover' => $settings->feature_ai_voiceover,\n 'ai_vision' => $settings->feature_ai_vision,\n 'ai_pdf' => $settings->feature_ai_pdf,\n 'ai_youtube' => $settings->feature_ai_youtube,\n 'ai_rss' => $settings->feature_ai_rss,\n ];\n\n foreach ($templates as $key => $status) {\n OpenAIGenerator::query()->where('slug', $key)->update(['active' => $status]);\n }\n }\n\n public function anthropic(Request $request)\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.anthropic');\n }\n\n public function deepseek(Request $request)\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.deepseek');\n }\n\n public function deepseekSave(Request $request)\n {\n $data = $request->validate([\n 'deepseek_api_secret' => 'required',\n 'deepseek_default_model' => 'required|string',\n 'deepseek_max_output_length' => 'required|string',\n ]);\n\n $data['deepseek_api_secret'] = implode(',', $data['deepseek_api_secret']);\n\n setting($data)->save();\n\n return redirect()->back()->with([\n 'type' => 'success',\n 'message' => __('setting saved successfully.'),\n ]);\n }\n\n public function deepseekTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n $token = ApiHelper::setDeepseekKey();\n\n $url = 'https://api.deepseek.com/models';\n\n $response = Http::withHeaders([\n 'Accept' => 'application/json',\n 'Authorization' => \"Bearer $token\",\n ])->get($url);\n\n // Yanıtı Kontrol Etme\n if ($response->successful()) {\n echo '
' . $token . ' - SUCCESS
';\n } else {\n echo $response->json('error.message') . ' - ' . $token . ' -FAILED
';\n }\n }\n\n public function anthropicTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n $token = ApiHelper::setAnthropicKey();\n\n $request = Http::withHeaders([\n 'x-api-key' => $token,\n 'Content-Type' => 'application/json',\n 'Accept' => 'application/json',\n 'anthropic-version' => '2023-06-01',\n ])->post('https://api.anthropic.com/v1/messages', [\n 'model' => setting('anthropic_default_model'),\n 'max_tokens' => (int) setting('anthropic_max_output_length'),\n 'messages' => [\n [\n 'role' => 'user',\n 'content' => 'Hello, how are you?',\n ],\n ],\n ]);\n\n if ($request->ok()) {\n echo '
' . $token . ' - SUCCESS
';\n } else {\n echo $request->json('error.message') . ' - ' . $token . ' -FAILED
';\n }\n }\n\n public function anthropicSave(Request $request)\n {\n $data = $request->validate([\n 'anthropic_api_secret' => 'required|string',\n 'anthropic_default_model' => 'required|string',\n 'anthropic_max_input_length' => 'required|string',\n 'anthropic_max_output_length' => 'required|string',\n 'anthropic_bedrock_model' => 'string',\n ]);\n\n setting($data)->save();\n\n return response()->json([], 200);\n }\n\n public function gemini(Request $request)\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.gemini');\n }\n\n public function geminiTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n $newhistory = [\n [\n 'role' => 'user',\n 'parts' => [\n [\n 'text' => 'who are u.',\n ],\n ],\n ],\n ];\n\n $randomToken = ApiHelper::setGeminiKey();\n $client = app(\\App\\Domains\\Engine\\Services\\GeminiService::class);\n $response = $client\n ->setHistory($newhistory)\n ->generateContent();\n if ($response->ok()) {\n echo '
' . $randomToken . ' - SUCCESS
';\n } else {\n echo $response->json('error.message') . ' -FAILED
';\n }\n }\n\n public function geminiSave(Request $request)\n {\n $data = $request->validate([\n 'gemini_api_secret' => 'required|string',\n 'gemini_default_model' => 'required|string',\n 'gemini_max_input_length' => 'required|string',\n 'gemini_max_output_length' => 'required|string',\n ]);\n setting($data)->save();\n\n return response()->json([], 200);\n }\n\n public function xAI()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.x-ai');\n }\n\n public function openai()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n\n return view('panel.admin.settings.openai');\n }\n\n public function stablediffusion()\n {\n return view('panel.admin.settings.stablediffusion');\n }\n\n public function unsplashapi(Request $request)\n {\n return view('panel.admin.settings.unsplashapi');\n }\n\n public function unsplashapiTest()\n {\n $client = new Client;\n $settings = SettingTwo::getCache();\n if ($settings->unsplash_api_key == '') {\n echo 'You must provide ' . EngineEnum::UNSPLASH->label() . ' API Key.';\n\n return;\n }\n\n $apiKey = $settings->unsplash_api_key;\n\n $client = new Client;\n\n try {\n $response = $client->get(\"https://api.unsplash.com/search/photos?query=Google&count=1&client_id=$apiKey\");\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n\n public function unsplashapiSave(Request $request)\n {\n $settings = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->unsplash_api_key = $request->unsplash_api_key;\n $settings->save();\n }\n\n return response()->json([], 200);\n }\n\n public function pexelsapi(Request $request)\n {\n return view('panel.admin.settings.pexels');\n }\n\n public function pexelsapiTest()\n {\n $client = new Client;\n $api = setting('pexels_api_key');\n if ($api == '') {\n echo 'You must provide Pexels API Key.';\n\n return;\n }\n\n $apiKey = $api;\n\n $client = new Client;\n\n try {\n $response = $client->get('https://api.pexels.com/v1/search?query=Google&per_page=1', [\n 'headers' => [\n 'Authorization' => $apiKey,\n ],\n ]);\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n\n public function pexelsapiSave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n setting(['pexels_api_key' => $request->pexels_api_key])->save();\n }\n\n return response()->json([], 200);\n }\n\n public function pixabayapi(Request $request)\n {\n return view('panel.admin.settings.pixabay');\n }\n\n public function pixabayapiTest()\n {\n $client = new Client;\n $api = setting('pixabay_api_key');\n if ($api == '') {\n echo 'You must provide Pixabay API Key.';\n\n return;\n }\n\n $apiKey = $api;\n $client = new Client;\n\n try {\n $response = $client->get(\"https://pixabay.com/api/?key=$apiKey&q=Google\");\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n\n public function pixabayapiSave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n setting(['pixabay_api_key' => $request->pixabay_api_key])->save();\n }\n\n return response()->json([], 200);\n }\n\n public function serperapi(Request $request)\n {\n return view('panel.admin.settings.serperapi');\n }\n\n public function perplexity(Request $request)\n {\n return view('panel.admin.settings.perplexity');\n }\n\n public function serperapiSave(Request $request)\n {\n $settings = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->serper_api_key = $request->serper_api_key;\n $settings->save();\n\n if ($request->hasAny(['serper_seo_tool_improve', 'serper_seo_aw_anlyze', 'seo_ai_tool', 'serper_seo_aw_improve', 'serper_seo_aw_sq', 'serper_seo_aw_keyword', 'serper_seo_blog_title_desc', 'serper_seo_site_meta'])) {\n setting([\n 'serper_seo_aw_sq' => $request->serper_seo_aw_sq,\n 'serper_seo_aw_keyword' => $request->serper_seo_aw_keyword,\n 'serper_seo_blog_title_desc' => $request->serper_seo_blog_title_desc,\n 'serper_seo_site_meta' => $request->serper_seo_site_meta,\n 'serper_seo_aw_anlyze' => $request->serper_seo_aw_anlyze,\n 'serper_seo_aw_improve' => $request->serper_seo_aw_improve,\n 'seo_ai_tool' => $request->seo_ai_tool,\n 'serper_seo_tool_improve' => $request->serper_seo_tool_improve,\n ])->save();\n }\n }\n\n return response()->json([], 200);\n }\n\n public function perplexitySave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n setting([\n 'perplexity_key' => $request->perplexity_key,\n ])->save();\n }\n\n return back()->with(['message' => __('Updated Successfully'), 'type' => 'success']);\n }\n\n public function serperapiTest()\n {\n try {\n $settings = SettingTwo::getCache();\n if ($settings->serper_api_key == '') {\n echo 'You must provide Serper API Key.';\n\n return;\n }\n $client = new Client;\n $response = $client->post('https://google.serper.dev/search', [\n 'headers' => [\n 'X-API-KEY' => $settings->serper_api_key,\n 'Content-Type' => 'application/json',\n ],\n 'json' => [\n 'q' => 'Coffee',\n ],\n ]);\n $responseData = json_decode($response->getBody(), true);\n echo '
' . $settings->serper_api_key . ' - SUCCESS

Example about \"Coffee\":
' . $responseData['organic'][0]['snippet'] . '
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $settings->serper_api_key . ' -FAILED
';\n }\n }\n\n public function xAiTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n $settings = Setting::getCache();\n $apiKeys = ApiHelper::setXAiKey($settings, true);\n foreach ($apiKeys as $apiKey) {\n try {\n $history[] = ['role' => 'system', 'content' => 'Your name is Grok AI and you are a helpful assistant.'];\n $history[] = ['role' => 'user', 'content' => 'What is your name?'];\n $cli = OpenAI::factory()->withBaseUri('https://api.x.ai/v1')\n ->withHttpHeader('Authorization', 'Bearer ' . $apiKey)\n ->withHttpHeader('Content-Type', 'application/json')\n ->withApiKey($apiKey)\n ->make();\n\n $c = $cli->chat()->create(\n [\n 'messages' => $history,\n 'model' => EntityEnum::GROK_2_1212->value,\n 'stream' => false,\n 'temperature' => 0,\n ]\n );\n echo '
' . $c['choices'][0]['message']['content'];\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception|Throwable $e) {\n echo __('Something went wrong. Please check your API key or Credit balance.') . '
' . $apiKey . ' -FAILED
';\n }\n }\n }\n\n public function openaiTest()\n {\n if (Helper::appIsDemo()) {\n return to_route('dashboard.user.index')->with([\n 'status' => 'error',\n 'message' => trans('This feature is disabled in demo mode.'),\n ]);\n }\n $settings = Setting::getCache();\n $apiKeys = ApiHelper::setOpenAiKey($settings, true);\n foreach ($apiKeys as $apiKey) {\n\n $client = new Client([\n 'base_uri' => 'https://api.openai.com/v1/',\n 'headers' => [\n 'Authorization' => 'Bearer ' . $apiKey,\n 'Content-Type' => 'application/json',\n ],\n ]);\n\n try {\n\n $response = $client->post('chat/completions', [\n 'json' => [\n 'model' => EntityEnum::GPT_3_5_TURBO->value,\n 'messages' => [['role' => 'user', 'content' => 'Say this is a test!']],\n 'temperature' => 0.7,\n ],\n ]);\n\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n echo $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n }\n\n public function stablediffusionTest(): void\n {\n $settings = SettingTwo::getCache();\n if ($settings->stable_diffusion_api_key === '') {\n echo 'You must provide Stable Difussion API key.';\n\n return;\n }\n\n $apiKeys = explode(',', $settings->stable_diffusion_api_key);\n\n foreach ($apiKeys as $apiKey) {\n\n $client = new Client([\n 'base_uri' => 'https://api.stability.ai/v2beta/stable-image/generate/',\n 'headers' => [\n 'Content-Type' => 'application/json',\n 'Authorization' => 'Bearer ' . $apiKey,\n 'Accept' => 'application/json',\n ],\n ]);\n $sd3Payload = [\n [\n 'name' => 'prompt',\n 'contents' => 'cat',\n ],\n [\n 'name' => 'file',\n 'contents' => 'no',\n ],\n [\n 'name' => 'output_format',\n 'contents' => 'png',\n ],\n [\n 'name' => 'model',\n 'contents' => 'sd3',\n ],\n ];\n\n try {\n $response = $client->post('sd3', [\n 'headers' => ['accept' => 'application/json'],\n 'multipart' => $sd3Payload,\n ]);\n echo '
' . $apiKey . ' - SUCCESS
';\n } catch (Exception $e) {\n if ($e->hasResponse()) {\n try {\n $responseBody = $e->getResponse()->getBody()->getContents();\n $errorData = json_decode($responseBody, true);\n $errorMessage = $errorData['message'] ?? ($errorData['errors'][0] ?? 'Unknown error');\n\n echo $errorMessage . ' - ' . $apiKey . ' -FAILED
';\n } catch (JsonException $jsonException) {\n echo 'Failed to decode error response.' . ' - ' . $apiKey . ' -FAILED
';\n }\n } else {\n echo 'An unexpected error occurred: ' . $e->getMessage() . ' - ' . $apiKey . ' -FAILED
';\n }\n }\n }\n }\n\n public function xAiSave(Request $request): JsonResponse\n {\n if (Helper::appIsNotDemo()) {\n setting([\n 'xai_api_secret' => $request->xai_api_secret,\n 'xai_default_model' => $request->xai_default_model,\n ])->save();\n }\n\n return response()->json([], 200);\n }\n\n public function openaiSave(Request $request): JsonResponse\n {\n $settings = Setting::getCache();\n $settings_two = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->openai_api_secret = $request->openai_api_secret;\n $settings->openai_default_model = $request->openai_default_model;\n $settings->openai_default_language = $request->openai_default_language;\n $settings->openai_default_tone_of_voice = $request->openai_default_tone_of_voice;\n $settings->openai_default_creativity = $request->openai_default_creativity;\n $settings->openai_max_input_length = $request->openai_max_input_length;\n $settings->openai_max_output_length = $request->openai_max_output_length;\n $settings_two->dalle = $request->dalle_default_model;\n $settings_two->openai_default_stream_server = $request->openai_default_stream_server;\n $settings->save();\n $settings_two->save();\n setting(key: [\n 'hide_creativity_option' => $request->hide_creativity_option,\n 'hide_tone_of_voice_option' => $request->hide_tone_of_voice_option,\n 'hide_output_length_option' => $request->hide_output_length_option,\n 'dalle_hidden' => $request->dalle_hidden,\n 'realtime_voice_chat' => $request->realtime_voice_chat,\n 'openai_file_search' => $request->openai_file_search,\n 'enabled_gpt_image_1'\t\t => $request->enabled_gpt_image_1,\n ])->save();\n\n if (MarketplaceHelper::isRegistered('chatbot')) {\n \\App\\Extensions\\Chatbot\\System\\Models\\Chatbot::query()->update([\n 'ai_model' => $request->openai_default_model,\n ]);\n }\n }\n app(MenuService::class)->regenerate();\n\n return response()->json([], 200);\n }\n\n public function affiliateStatusSave($id, Request $request): JsonResponse\n {\n if (Helper::appIsNotDemo()) {\n $user = User::find($id);\n if ($user) {\n $user->affiliate_status = $request->input('affiliate_status');\n $user->save();\n }\n\n app(MenuService::class)->regenerate();\n }\n\n return response()->json([], 200);\n }\n\n public function stablediffusionSave(Request $request): JsonResponse\n {\n $settings = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->stable_diffusion_api_key = $request->stable_diffusion_api_key;\n $settings->stablediffusion_default_language = $request->stablediffusion_default_language;\n $settings->stablediffusion_default_model = $request->stablediffusion_default_model;\n\n if ($request->has('stablediffusion_bedrock_model')) {\n $settings->stablediffusion_bedrock_model = $request->stablediffusion_bedrock_model;\n }\n\n $settings->save();\n\n setting([\n 'stable_hidden' => $request->stable_hidden,\n ])->save();\n }\n\n return response()->json([], 200);\n }\n\n // thumbnail\n public function thumbnail()\n {\n return view('panel.admin.settings.thumbnail');\n }\n\n // thumbnailSave\n public function thumbnailSave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n setting(['image_thumbnail' => $request->image_thumbnail])->save();\n }\n\n return response()->json([], 200);\n }\n\n // thumbnailPurge\n public function thumbnailPurge()\n {\n if (Helper::appIsNotDemo()) {\n PurgeThumbImages();\n }\n\n return response()->json([], 200);\n }\n\n public function tts()\n {\n return view('panel.admin.settings.tts');\n }\n\n public function aimlapi(): View\n {\n return view('panel.admin.settings.aimlapi');\n }\n\n public function aimlapiSave(Request $request): JsonResponse\n {\n $settings = Setting::getCache();\n\n if (Helper::appIsNotDemo()) {\n $settings->update([\n 'aimlapi_key' => $request->aimlapi_key,\n 'ai_music_model' => $request->ai_music_model,\n ]);\n }\n\n return response()->json([], 200);\n }\n\n public function ttsSave(Request $request)\n {\n $settings = Setting::getCache();\n $settings_two = SettingTwo::getCache();\n if (Helper::appIsNotDemo()) {\n $settings->gcs_file = $request->gcs_file;\n $settings->gcs_name = $request->gcs_name;\n\n if ($settings_two->elevenlabs_api_key != $request->elevenlabs_api_key) {\n $settings_two->elevenlabs_api_key = $request->elevenlabs_api_key;\n if (MarketplaceHelper::isRegistered('chatbot-voice')) {\n ExtVoiceChatbot::query()->delete();\n }\n }\n\n $settings_two->feature_tts_google = $request->feature_tts_google;\n $settings_two->feature_tts_openai = $request->feature_tts_openai;\n $settings_two->feature_tts_elevenlabs = $request->feature_tts_elevenlabs;\n\n if ($request->hasAny(['feature_tts_azure', 'azure_api_key', 'azure_region'])) {\n setting([\n 'feature_tts_azure' => $request->get('feature_tts_azure'),\n 'azure_api_key' => $request->get('azure_api_key'),\n 'azure_region' => $request->get('azure_region'),\n ])->save();\n }\n\n if ($request->hasAny(['speechify_api_key', 'feature_tts_speechify'])) {\n setting([\n 'feature_tts_speechify' => $request->get('feature_tts_speechify'),\n 'speechify_api_key' => $request->get('speechify_api_key'),\n ])->save();\n }\n\n $settings->save();\n $settings_two->save();\n }\n\n return response()->json([], 200);\n }\n\n public function payment()\n {\n return view('panel.admin.settings.stripe');\n }\n\n public function paymentSave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n $settings = Setting::getCache();\n $settings->default_currency = $request->default_currency;\n $settings->stripe_active = 1;\n $settings->stripe_key = $request->stripe_key;\n $settings->stripe_secret = $request->stripe_secret;\n $settings->stripe_base_url = $request->stripe_base_url;\n $settings->save();\n }\n\n return response()->json([], 200);\n }\n\n public function privacy()\n {\n return view('panel.admin.settings.privacy');\n }\n\n public function privacySave(Request $request)\n {\n if (Helper::appIsNotDemo()) {\n\n $settings_two = SettingTwo::getCache();\n $settings = Setting::getCache();\n\n $termsLocal = $request->termsLocal;\n $privacyLocal = $request->privacyLocal;\n\n if ($termsLocal == $settings_two->languages_default) {\n $settings->terms_content = $request->terms_content;\n } else {\n $terms = PrivacyTerms::where('type', 'terms')->where('lang', $termsLocal)->first();\n if ($terms) {\n $terms->content = $request->terms_content;\n $terms->save();\n } else {\n $newTerms = new PrivacyTerms;\n $newTerms->type = 'terms';\n $newTerms->lang = $termsLocal;\n $newTerms->content = $request->terms_content;\n $newTerms->save();\n }\n }\n\n if ($privacyLocal == $settings_two->languages_default) {\n $settings->privacy_content = $request->privacy_content;\n } else {\n $privacy = PrivacyTerms::where('type', 'privacy')->where('lang', $privacyLocal)->first();\n if ($privacy) {\n $privacy->content = $request->privacy_content;\n $privacy->save();\n } else {\n $newPrivacy = new PrivacyTerms;\n $newPrivacy->type = 'privacy';\n $newPrivacy->lang = $privacyLocal;\n $newPrivacy->content = $request->privacy_content;\n $newPrivacy->save();\n }\n }\n\n $settings->privacy_enable = $request->privacy_enable;\n $settings->privacy_enable_login = $request->privacy_enable_login;\n $settings->save();\n\n }\n\n return response()->json([], 200);\n }\n\n public function getPrivacyTermsContent(Request $request)\n {\n $type = $request->input('type');\n $language = $request->input('lang');\n $settings_two = SettingTwo::getCache();\n\n if ($settings_two->languages_default == $language) {\n\n $settings = Setting::getCache();\n $content = [\n 'type' => $type,\n 'lang' => $language,\n 'content' => $type == 'terms' ? $settings->terms_content : $settings->privacy_content,\n ];\n\n } else {\n $privacy_terms = PrivacyTerms::where('type', $type)->where('lang', $language)->first();\n $content = [\n 'type' => $privacy_terms?->type ?? $type,\n 'lang' => $privacy_terms?->lang,\n 'content' => $privacy_terms?->content,\n ];\n }\n\n return response()->json($content);\n }\n\n public function getMetaContent(Request $request)\n {\n $type = $request->input('type');\n $language = $request->input('lang');\n $settings_two = SettingTwo::getCache();\n\n if ($settings_two->languages_default == $language) {\n\n $settings = Setting::getCache();\n $content = [\n 'type' => $type,\n 'lang' => $language,\n 'content' => $type == 'meta_title' ? $settings->meta_title : $settings->meta_description,\n ];\n\n } else {\n $meta = PrivacyTerms::where('type', $type)->where('lang', $language)->first();\n $content = [\n 'type' => $meta?->type ?? $type,\n 'lang' => $meta?->lang,\n 'content' => $meta?->content,\n ];\n }\n\n return response()->json($content);\n }\n}\n"}}}}