commit 8ce210f27c280a7929692a45e5cb25512b02e16a Author: lizandrogd <77708265+lizandrogd@users.noreply.github.com> Date: Wed Jul 26 08:28:13 2023 -0500 Initial commit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1671c9b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/.env b/.env new file mode 100644 index 0000000..4638f5d --- /dev/null +++ b/.env @@ -0,0 +1,75 @@ +APP_NAME=SirPremium +APP_ENV=production +APP_KEY=base64:lDWaixdZ+e6cPnMwBTNYLWoy+GbsRKN/hYxyYf3wQA8= +APP_DEBUG=true +APP_URL=https://app.sirpremium.com.co + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=31.220.16.2 +DB_PORT=3306 +DB_DATABASE=u111286300_sir +DB_USERNAME=u111286300_sir +DB_PASSWORD=Colombia2022* + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database +SESSION_DRIVER=file +SESSION_LIFETIME=525600 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=smtp.hostinger.com +MAIL_PORT=465 +MAIL_USERNAME=info@sirpremium.com.co +MAIL_PASSWORD=Colombia2022* +MAIL_ENCRYPTION=ssl +MAIL_FROM_ADDRESS=info@sirpremium.com.co +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_HOST= +PUSHER_PORT=443 +PUSHER_SCHEME=https +PUSHER_APP_CLUSTER=mt1 + +USER_LABSMOBILE=admin@jaguarws.ga +PASS_LABSMOBILE=9u3xxXhHt8maeiOexg07pFKI0rpYazI0 + + +VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +VITE_PUSHER_HOST="${PUSHER_HOST}" +VITE_PUSHER_PORT="${PUSHER_PORT}" +VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" +VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +TWILIO_SID=ACa764630e4a9c9f5d3c7688cea20d7d38 +TWILIO_TOKEN=dbd33fb1a36875064bcf55ba314110dd +TWILIO_FROM=+14793912883 + + +MP_PUBLIC_KEY=APP_USR-1c491d45-356b-4ea3-8caa-3462d6a7c2fe +MP_ACCESS_TOKEN=APP_USR-7353579040069171-102716-58fdd1f52a604a1febd18a638227f603-260361439 + +NEQUI_CLIENT_ID=5ml5b35ijjk13f4q99utnsm97e +NEQUI_CLIENT_SECRET=1b3703aq0o6t1rrfti13q7uf7f42glik3gsf81s0d783shblmt8l +NEQUI_API_KEY=aHLdWJTpuM9YYnV9ruq4V6bH5esa8wUN69E1qmrM +NEQUI_ENDPOINT=https://oauth.sandbox.nequi.com/oauth2/token?grant_type=client_credentials diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..0ef514c --- /dev/null +++ b/.env.example @@ -0,0 +1,61 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_HOST= +PUSHER_PORT=443 +PUSHER_SCHEME=https +PUSHER_APP_CLUSTER=mt1 + +VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +VITE_PUSHER_HOST="${PUSHER_HOST}" +VITE_PUSHER_PORT="${PUSHER_PORT}" +VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" +VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +MP_PUBLIC_KEY= +MP_ACCESS_TOKEN= diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7dbbf41 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2612ff4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +#/node_modules +#/public/build +#/public/hot +#/public/storage +#/storage/*.key +#/vendor +#.env +#.env.backup +#.phpunit.result.cache +#Homestead.json +#Homestead.yaml +#auth.json +#npm-debug.log +#yarn-error.log +#/.idea +#/.vscode diff --git a/README.md b/README.md new file mode 100644 index 0000000..bf0ddd9 --- /dev/null +++ b/README.md @@ -0,0 +1,66 @@ +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[Many](https://www.many.co.uk)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[OP.GG](https://op.gg)** +- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** +- **[Lendio](https://lendio.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..3b739cf --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,144 @@ +exec('nohup php /home/u111286300/domains/sirpremium.com.co/public_html/app/artisan queue:work --sleep=3 --tries=3 > /dev/null 2>&1 &')->everyMinute(); + + $schedule->call(function () { + $fechaHoy = Carbon::now(); + $fechaManana = $fechaHoy->copy()->addDay(); // Obtenemos la fecha de mañana sumando un día a la fecha actual + + $consulta_historial = Historiale::whereDate('fecha_final', $fechaManana)->with('cliente')->get(); + + + foreach ($consulta_historial as $item) { + + $user = User::find($item->cliente->id); + + if (!empty($item->promocion_id)) { + + $nombre= $item->promocion->nombre; + } + if (!empty($item->tarifa_id)) { + $nombre = $item->tarifa->servicio->nombre . '-' . $item->tarifa->pantallas . 'P'; + } + + $notificacion = [ + //'valor' => $value['precio'], + 'fecha_final' => $item->fecha_final, + 'cliente' => $item->cliente->name, + 'servicio' => $nombre, + 'tipo' => 'vencimiento', + 'vendedor' =>$item->vendedor->name, + + ]; + + Notification::sendNow($user, new Vencimiento($notificacion)); + + //$fecha=Carbon::parse($item->fecha_final)->format('d/m/Y'); + + //$message = 'Su '.$nombre.', Vence Hoy, '.$fecha.'. Renueva ahora!!' ; + //$recipients= '+57'.$item->cliente->celular; + + //$auth_basic = base64_encode('admin@jaguarws.ga:9u3xxXhHt8maeiOexg07pFKI0rpYazI0'); + + //$curl = curl_init(); + + //curl_setopt_array($curl, array( + //CURLOPT_URL => "https://api.labsmobile.com/json/send", + //CURLOPT_RETURNTRANSFER => true, + //CURLOPT_ENCODING => "", + //CURLOPT_MAXREDIRS => 10, + //CURLOPT_TIMEOUT => 30, + //CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + //CURLOPT_CUSTOMREQUEST => "POST", + //CURLOPT_POSTFIELDS => '{"message":"'.$message.'", "tpoa":"Sender","recipient":[{"msisdn":"'.$recipients.'"}]}', + //CURLOPT_HTTPHEADER => array( + // "Authorization: Basic ".$auth_basic, + // "Cache-Control: no-cache", + // "Content-Type: application/json" + // ), + //)); + + // $response = curl_exec($curl); + // $err = curl_error($curl); +// + //curl_close($curl); + //return $response; + // if ($err) { + // + + //} else { + // + //} + + + } + + $fechaHoy1 = Carbon::now(); + $fechaHoy1 = Carbon::parse($fechaHoy1)->subDay(1); + + $consulta_historial1= Historiale::whereDate('fecha_final','<',$fechaHoy1)->with('cliente','cuentas')->get(); + foreach ($consulta_historial1 as $item1) { + + foreach($item1->cuentas->unique() as $item2){ + //dd($item2); + $logs = new log; + $logs->historial_id = $item1->id; + $logs->cuenta_id = $item2->id; + $logs->save(); + } + //$eliminar_cuentas = Historial_cuenta::where('historial_id',$item1->id)->truncate(); + //dd('termine'); + + } + + })->dailyAt(Configuracione::orderby('id','desc')->first()->hora); + + + } + + + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..82a37e4 --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,50 @@ +, \Psr\Log\LogLevel::*> + */ + protected $levels = [ + // + ]; + + /** + * A list of the exception types that are not reported. + * + * @var array> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed to the session on validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php new file mode 100644 index 0000000..09abe87 --- /dev/null +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -0,0 +1,54 @@ +authenticate(); + + $request->session()->regenerate(); + + return redirect()->intended(RouteServiceProvider::HOME); + } + + /** + * Destroy an authenticated session. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse + */ + public function destroy(Request $request) + { + Auth::guard('web')->logout(); + + $request->session()->invalidate(); + + $request->session()->regenerateToken(); + + return redirect('/'); + } +} diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php new file mode 100644 index 0000000..1175010 --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmablePasswordController.php @@ -0,0 +1,44 @@ +validate([ + 'email' => $request->user()->email, + 'password' => $request->password, + ])) { + throw ValidationException::withMessages([ + 'password' => __('auth.password'), + ]); + } + + $request->session()->put('auth.password_confirmed_at', time()); + + return redirect()->intended(RouteServiceProvider::HOME); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php new file mode 100644 index 0000000..3362dca --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php @@ -0,0 +1,27 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(RouteServiceProvider::HOME); + } + + $request->user()->sendEmailVerificationNotification(); + + return back()->with('status', 'verification-link-sent'); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php new file mode 100644 index 0000000..e247f95 --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationPromptController.php @@ -0,0 +1,23 @@ +user()->hasVerifiedEmail() + ? redirect()->intended(RouteServiceProvider::HOME) + : view('auth.verify-email'); + } +} diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php new file mode 100644 index 0000000..1df8e21 --- /dev/null +++ b/app/Http/Controllers/Auth/NewPasswordController.php @@ -0,0 +1,65 @@ + $request]); + } + + /** + * Handle an incoming new password request. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse + * + * @throws \Illuminate\Validation\ValidationException + */ + public function store(Request $request) + { + $request->validate([ + 'token' => ['required'], + 'email' => ['required', 'email'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function ($user) use ($request) { + $user->forceFill([ + 'password' => Hash::make($request->password), + 'remember_token' => Str::random(60), + ])->save(); + + event(new PasswordReset($user)); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + return $status == Password::PASSWORD_RESET + ? redirect()->route('login')->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php new file mode 100644 index 0000000..667ab94 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordResetLinkController.php @@ -0,0 +1,47 @@ +validate([ + 'email' => ['required', 'email'], + ]); + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $status = Password::sendResetLink( + $request->only('email') + ); + + return $status == Password::RESET_LINK_SENT + ? back()->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php new file mode 100644 index 0000000..487fedb --- /dev/null +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -0,0 +1,54 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), + ]); + + event(new Registered($user)); + + Auth::login($user); + + return redirect(RouteServiceProvider::HOME); + } +} diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php new file mode 100644 index 0000000..6baa9aa --- /dev/null +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -0,0 +1,30 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(RouteServiceProvider::HOME.'?verified=1'); + } + + if ($request->user()->markEmailAsVerified()) { + event(new Verified($request->user())); + } + + return redirect()->intended(RouteServiceProvider::HOME.'?verified=1'); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + $consulta_promociones, + ]); + } + + public function showclientes(){ + return view('menu/clientes'); + } + public function showservicios(){ + return view('menu/servicios'); + } + public function showtop(){ + return view('menu/top'); + } + public function showreportes(){ + return view('menu/reportes'); + } + public function showperfil(){ + return view('menu/perfil'); + } + public function showconfiguracion(){ + return view('menu/configuracion'); + } + public function showplanes(){ + return view('menu/planes'); + } + + public function showusuarios(){ + return view('menu/usuarios'); + } + + public function showadmin(){ + return view('menu/admin'); + } + + public function showrecarga(){ + return view('menu/recarga'); + } + + public function showcomprar(){ + return view('menu/comprar'); + } + + public function showLogRecargas(){ + return view('menu/logs_recargas'); + } + + public function showroles(){ + return view('menu/roles'); + } + + + + public function pay($estado){ + return view('menu/order',[ + 'estado' => $estado, + ]); + } + + + + public function showcredenciales(Request $request){ + + $credencial = Crypt::decryptString($request->id); + $consulta_historiales = Historiale::where('id',$credencial)->with('cuentas')->first(); + $msj = Configuracione::orderby('id','desc')->select('msj_compra','msj_wp','clave_1','clave_2','clave_3','clave_4','clave_5','clave_6','iptv')->first(); + + return view('menu/credenciales',[ + 'consulta' =>$consulta_historiales, + 'msj' => $msj, + ]); + } + + + public function order( Request $request ){ + + $payment_id= $request->get('payment_id'); + $response = Http::get("https://api.mercadopago.com/v1/payments/$payment_id" . "?access_token=APP_USR-7353579040069171-102716-58fdd1f52a604a1febd18a638227f603-260361439"); + $response = json_decode($response); + + $status = $response->status; + if ($status == 'approved') { + + $metodo_pago = $response->payment_method_id; + $referencia = $response->external_reference; + $consulta = recarga::where('reference',$referencia)->where('status',$status)->exists(); + if ($consulta == false){ + $update_recargas = recarga::where('reference',$referencia)->update(['status' => $status,'payment_method_id'=> $metodo_pago]); + $recarga = recarga::where('reference',$referencia)->with('usuario')->first(); + $usuario= $recarga->usuario; + + $saldo = $usuario->saldo; + $saldo_anterior = $saldo->valor; + $rol = $usuario->rol->nombre; + $monto = $recarga->valor_recarga; + + if (!empty($saldo_anterior)) { + + $valor= (float)$saldo_anterior + (float)$monto ; + $nuevo_saldo = $saldo->update(['valor'=>$valor]); + + }else{ + $nuevo_saldo = $saldo->update(['valor'=>$monto]); + } + + } + $estado= 'aprobado'; + + }elseif($status == 'pending'){ + + + $metodo_pago = $response->payment_method_id; + $referencia = $response->external_reference; + $update_recargas = recarga::where('reference',$referencia)->update(['status' => $status,'payment_method_id'=> $metodo_pago]); + $usuario = recarga::where('reference',$referencia)->with('usuario')->first()->usuario; + + $estado= 'pendiente'; + }else{ + + + $metodo_pago = $response->payment_method_id; + $referencia = $response->external_reference; + $update_recargas = recarga::where('reference',$referencia)->update(['status' => $status,'payment_method_id'=> $metodo_pago]); + $usuario = recarga::where('reference',$referencia)->with('usuario')->first()->usuario; + + $estado ='rechazado'; + }; + + + return redirect()->route('pay',$estado); + + + } + + + public function showwebhooks(Request $request){ + + } + + public function recargas(){ + return view('menu/recargas'); + } + + public function showutilidad(){ + return view('menu/utilidades'); + } + + public function showwompi($monto){ + return view('menu/wompi',[ + 'monto' => $monto, + ]); + } + + + public function showoferta(){ + return view('portadaservicio'); + } + + + public function showsingle(){ + return view('menu/single'); + } + + + public function showpromo(){ + return view('menu/promo'); + } + + + public function showlogs(){ + return view('menu/logs'); + } + + + public function showpromociones(){ + return view('menu/promociones'); + } + + public function showimport(){ + return view('menu/importar'); + } + + public function showcategoria(){ + return view('menu/categoria'); + } + + public function showcategorias(){ + return view('menu/ver'); + } + + public function showservicio(){ + return view('menu/servicio'); + } + public function compras( Request $request ){ + + $payment_id= $request->get('payment_id'); + $response = Http::get("https://api.mercadopago.com/v1/payments/$payment_id" . "?access_token=APP_USR-7353579040069171-102716-58fdd1f52a604a1febd18a638227f603-260361439"); + $response = json_decode($response); + + + $status = $response->status; + if ($status == 'approved') { + + foreach($response->additional_info->items as $item){ + $consulta = Historiale::where('id', $item->id)->first(); + $tarifa_id=$consulta->tarifa_id; + } + $date = Carbon::now()->subDay(30); + $fecha= $date->format('Y-m-d'); + + //SERVICIO// + if (!empty($consulta->tarifa_id)) { + + $pantallas = Tarifas::where('id', $tarifa_id)->with('servicio')->first(); + $servicio_id= $pantallas->servicio_id; + $pantalla_servicio = $pantallas->servicio->pantallas; + $pantalla_servicio_completa = $pantallas->servicio->completa; + + + + $pantallas= $pantallas ->pantallas ?? null; + $cantidad_tarjetaPlan = $consulta->cantidad; + + $cantidad_solicitada = (int)$cantidad_tarjetaPlan*(int)$pantallas; + //dd($cantidad_tarjetaPlan); + if((int)$pantalla_servicio_completa >= (int)$cantidad_solicitada ){ + $suma = $pantalla_servicio-$cantidad_solicitada; + + $cuenta = Cuentas::where('servicio_id',$servicio_id)->whereDate('inicio','>=',$fecha)->Orderby('created_at', 'ASC')->withCount('historiales')->where('estado','activo')->having('historiales_count', '<=', $suma)->first(); + }elseif((int)$pantalla_servicio_completa == (int)$cantidad_solicitada){ + $this->fecha_final_1 = $today = Carbon::now()->addDays($pantallas->dias-15); + $this->fecha_final_2 = $today = Carbon::now()->addDays($pantallas->dias+15); + //completas + $cuenta = Cuentas::where('servicio_id',$this->servicio_id)->whereDate('inicio','>=',$this->fecha)->whereDate('vencimiento','>=',$this->fecha_final_1)->whereDate('vencimiento','<=',$this->fecha_final_2)->Orderby('created_at', 'ASC')->withCount('historiales')->where('estado','pendiente')->having('historiales_count', '==', 0)->first(); + }else{ + $cuenta=null; + } + + + if (!empty($cuenta) ) { + + $perfil = $cuenta->historiales_count; + for ($n=1; $n <= $cantidad_solicitada ; $n++) { + + $historial_cuenta = new Historial_cuenta(); + $historial_cuenta->cuenta_id = $cuenta->id; + $historial_cuenta->historial_id = $item->id; + $historial_cuenta->perfil = (int)$perfil + (int)$n; + $historial_cuenta->save(); + //dd($historial_cuenta->id); + } + + if (($n-1) == $cantidad_solicitada) { + + $consulta->update(['estado'=>'activo']); + $this->cred($consulta); + $encryptado = Crypt::encryptString($consulta->id); + //dd('llegue'); + return redirect('/credenciales?id='.$encryptado); + + }else{ + + return 'Error en la asignacion de cuentas, comuniquese con soporte!'; + + } + + + }else{ + //dd($cuenta); + $suma2= $pantalla_servicio - $pantallas; + + + for ($h=0; $h < (int)$cantidad_tarjetaPlan ; $h++) { + //dd($n); + $cuenta = Cuentas::where('servicio_id',$servicio_id)->whereDate('inicio','>=',$fecha)->Orderby('created_at', 'ASC')->with('historiales')->withCount('historiales')->where('estado','activo')->having('historiales_count', '<=', (int)$suma2)->first(); + //dd($cuenta); + if (!empty($cuenta)) { + $perfil = $cuenta->historiales_count; + for ($y=0; $y < (int)$pantallas ; $y++) { + //dd($pantallas); + $historial_cuenta = new Historial_cuenta; + $historial_cuenta->cuenta_id = $cuenta->id; + $historial_cuenta->historial_id = $item->id; + $historial_cuenta->perfil = (int)$perfil + (int)$y+1; + $historial_cuenta->save(); + + } + + }else{ + return 'No hay cuentas disponibles, comuniquese con soporte!'; + } + } + + + $consulta->update(['estado'=>'activo']); + $this->cred($consulta); + $encryptado = Crypt::encryptString($consulta->id); + return redirect('/credenciales?id='.$encryptado); + + + } + + + + + } + + //PROMOCION + if (!empty($consulta->promocion_id)){ + + for ($p = 0; $p < (int)$consulta->cantidad; $p++) { + //dd($this->cantidad_comprarPromo); + foreach ($consulta->promocion->tarifas as $tarifa) { + + $pantallas_tarifa = $tarifa->pantallas; + $servicio_id = $tarifa->servicio_id; + $pantalla_servicio = $tarifa->servicio->pantallas; + $pantalla_servicio_completa = $tarifa->servicio->completa; + + $faltante = $pantalla_servicio - $pantallas_tarifa; + if ($pantalla_servicio_completa == $pantallas_tarifa) { + $this->fecha_final_1 = $today = Carbon::now()->addDays($tarifa->dias-15); + $this->fecha_final_2 = $today = Carbon::now()->addDays($tarifa->dias+15); + $cuenta = Cuentas::where('servicio_id',$servicio_id)->whereDate('inicio','>=',$fecha)->whereDate('vencimiento','>=',$this->fecha_final_1)->whereDate('vencimiento','<=',$this->fecha_final_2)->Orderby('created_at', 'ASC')->with('historiales')->withCount('historiales')->where('estado','pendiente')->having('historiales_count', '==', 0)->first(); + }else{ + $cuenta = Cuentas::where('servicio_id', $servicio_id)->whereDate('inicio','>=',$fecha)->Orderby('created_at', 'ASC')->with('historiales')->withCount('historiales')->where('estado', 'activo')->having('historiales_count', '<=', (int)$faltante)->first(); + } + //dd($tarifa); + + + if (!empty($cuenta)) { + $perfil = $cuenta->historiales_count; + for ($y = 0; $y < (int)$pantallas_tarifa; $y++) { + + $historial_cuenta = new Historial_cuenta(); + $historial_cuenta->cuenta_id = $cuenta->id; + $historial_cuenta->historial_id = $item->id; + $historial_cuenta->perfil = (int)$perfil + (int)$y+1; + $historial_cuenta->save(); + } + + + } else { + + return 'No hay cuentas disponibles, comuniquese con soporte!'; + } + } + } + + if (!empty($y)) { + + $consulta->update(['estado'=>'activo']); + $this->cred($consulta); + $encryptado = Crypt::encryptString($consulta->id); + //dd('llegue'); + return redirect('/credenciales?id='.$encryptado); + + }else{ + return 'No hay cuentas disponibles, comuniquese con soporte!'; + } + + } + + + } + + + +} + +//wompi + +public function wompi_pagos(Request $request){ + + $response = Http::get("https://sandbox.wompi.co/v1/transactions/136099-1677473887-65588"); + $response = json_decode($response); + //dd($response); + +} + +public function wompi_hook(Request $request){ + //return json_encode('hola'); + + if (!empty($request)) { + + + + foreach($request->data as $item ){ + //return $item; + $status = $item['status']; + $user_id = $item['reference']; + $monto = substr($item['amount_in_cents'], 0, -2); + $metodo_pago = $item['payment_method_type']; + + + } + + $update_recargas = recarga::where('reference',$referencia)->update(['status' => $status,'payment_method_id'=> $metodo_pago]); + if ($status == 'APPROVED') { + + $usuario = recarga::where('reference',$referencia)->with('usuario')->first()->usuario; + $saldo = $usuario->saldo; + $saldo_anterior = $saldo->valor; + $rol = $usuario->rol->nombre; + //return $rol; + $monto_adicional = 0; + if ($rol == "super" || $rol == "administrador" || $rol == "distribuidor") { + $monto_adicional = 500; + } + + + if (!empty($saldo_anterior)) { + + $valor= (float)$saldo_anterior + (float)$monto - (float)$monto_adicional; + $nuevo_saldo = $saldo->update(['valor'=>$valor]); + + // return $nuevo_saldo; + + } + } + } + + + +} + +public function cred($consulta){ + + + $encryptado = Crypt::encryptString($consulta->id); + + $enlace = '/credenciales?id='.$encryptado; + + $user=User::find($consulta->cliente); + if (!empty($consulta->promocion_id)){ { + + $shortURLObject = ShortURL::destinationUrl('https://app.sirpremium.com.co'.$enlace)->make(); + $shortURL = $shortURLObject->default_short_url; + $message = $consulta->promocion->nombre.'. Ver credenciales: '.$shortURL ; + $recipients= '+57'.$consulta->cliente->celular; + + $this->sendMessage($message, $recipients); + + $notificacion = [ + 'enlace' => $enlace, + 'fecha_final' => $consulta->fecha_final, + 'cliente' => $consulta->cliente->name, + 'servicio' => $consulta->promocion->nombre, + 'tipo' => 'compra', + 'vendedor' => Role::where('nombre','super')->first()->usuarios->first()->name, + + ]; + } + + if (!empty($consulta->tarifa_id)){ + + $shortURLObject = ShortURL::destinationUrl('https://app.sirpremium.com.co'.$enlace)->make(); + $shortURL = $shortURLObject->default_short_url; + $message = $consulta->tarifa->servicio->nombre.'-'.$consulta->tarifa->pantallas. 'P. Ver credenciales: '.$shortURL ; + $recipients= '+57'.$consulta->cliente->celular; + + $this->sendMessage($message, $recipients); + + + $notificacion = [ + 'enlace' => $enlace, + 'fecha_final' => $consulta->fecha_final, + 'cliente' => $consulta->cliente->name, + 'servicio' => $consulta->tarifa->servicio->nombre.'-'.$consulta->tarifa->pantallas. 'pantallas', + 'tipo' => 'compra', + 'vendedor' => Role::where('nombre','super')->first()->usuarios->first()->name, + + ]; + } + + + Notification::send($user, new compra($notificacion)); + + +} + +} + +public function sendMessage($message, $recipients) +{ + + + $auth_basic = base64_encode(getenv("USER_LABSMOBILE").':'.getenv("PASS_LABSMOBILE")); + + $curl = curl_init(); + + curl_setopt_array($curl, array( + CURLOPT_URL => "https://api.labsmobile.com/json/send", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "POST", + CURLOPT_POSTFIELDS => '{"message":"'.$message.'", "tpoa":"Sender","recipient":[{"msisdn":"'.$recipients.'"}]}', + CURLOPT_HTTPHEADER => array( + "Authorization: Basic ".$auth_basic, + "Cache-Control: no-cache", + "Content-Type: application/json" + ), + )); + + $response = curl_exec($curl); + $err = curl_error($curl); + + curl_close($curl); + + if ($err) { + + + + } else { + + } +} +public function showmp(Request $request){ + + Log::info('MercadoPago webhook received', $request->all()); + + // Aquí puedes agregar la lógica para manejar las notificaciones de MercadoPago + $data = json_decode($request->getContent(), true); + $paymentId = $data['data']['id']; + + $response = Http::get("https://api.mercadopago.com/v1/payments/$paymentId" . "?access_token=APP_USR-7353579040069171-102716-58fdd1f52a604a1febd18a638227f603-260361439"); + //return $response; + $response = json_decode($response); + $status = $response->status; + + if ($status == 'approved') { + $metodo_pago = $response->payment_method_id; + $referencia = $response->external_reference; + $consulta = recarga::where('reference',$referencia)->where('status',$status)->exists(); + if ($consulta == false){ + $update_recargas = recarga::where('reference',$referencia)->update(['status' => $status,'payment_method_id'=> $metodo_pago]); + $recarga = recarga::where('reference',$referencia)->with('usuario')->first(); + $usuario= $recarga->usuario; + + $saldo = $usuario->saldo; + $saldo_anterior = $saldo->valor; + $monto = $recarga->valor_recarga; + + $valor= (float)$saldo_anterior + (float)$monto ; + $nuevo_saldo = $saldo->update(['valor'=>$valor]); + + + } + } + + + + return response()->json(['status' => 'ok']); + + +} + +public function pruebas (){ + $fechaHoy = Carbon::now()->format('Y-m-d'); + +$consulta_historial = Historiale::whereDate('fecha_final', $fechaHoy)->with('cliente')->get(); + + foreach ($consulta_historial as $item) { + + $user = User::find($item->cliente->id); + + if (!empty($item->promocion_id)) { + + $nombre= $item->promocion->nombre; + } + if (!empty($item->tarifa_id)) { + $nombre = $item->tarifa->servicio->nombre . '-' . $item->tarifa->pantallas . 'P'; + } + + $notificacion = [ + //'valor' => $value['precio'], + 'fecha_final' => $item->fecha_final, + 'cliente' => $item->cliente->name, + 'servicio' => $nombre, + 'tipo' => 'vencimiento', + 'vendedor' =>$item->vendedor->name, + + ]; + + Notification::sendNow($user, new Vencimiento($notificacion)); + + // $fecha=Carbon::parse($item->fecha_final)->format('d/m/Y'); + + //$message = 'Su '.$nombre.', Vence Hoy, '.$fecha.'. Renueva ahora!!' ; + //$recipients= '+57'.$item->cliente->celular; + + //$auth_basic = base64_encode('admin@jaguarws.ga:9u3xxXhHt8maeiOexg07pFKI0rpYazI0'); + + //$curl = curl_init(); + + //curl_setopt_array($curl, array( + //CURLOPT_URL => "https://api.labsmobile.com/json/send", + //CURLOPT_RETURNTRANSFER => true, + //CURLOPT_ENCODING => "", + //CURLOPT_MAXREDIRS => 10, + //CURLOPT_TIMEOUT => 30, + //CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + //CURLOPT_CUSTOMREQUEST => "POST", + //CURLOPT_POSTFIELDS => '{"message":"'.$message.'", "tpoa":"Sender","recipient":[{"msisdn":"'.$recipients.'"}]}', + //CURLOPT_HTTPHEADER => array( + // "Authorization: Basic ".$auth_basic, + // "Cache-Control: no-cache", + // "Content-Type: application/json" + //), + //)); + + //$response = curl_exec($curl); + //$err = curl_error($curl); + + //curl_close($curl); + //return $response; + //if ($err) { + + + //} else { + + //} + + + } + + $fechaHoy1 = Carbon::now(); + $fechaHoy1 = Carbon::parse($fechaHoy1)->subDay(1); + + $consulta_historial1= Historiale::whereDate('fecha_final','<',$fechaHoy1)->with('cliente','cuentas')->get(); + foreach ($consulta_historial1 as $item1) { + + foreach($item1->cuentas->unique() as $item2){ + //dd($item2); + $logs = new log; + $logs->historial_id = $item1->id; + $logs->cuenta_id = $item2->id; + $logs->save(); + } + //$eliminar_cuentas = Historial_cuenta::where('historial_id',$item1->id)->truncate(); + //dd('termine'); + + } +} +} \ No newline at end of file diff --git a/app/Http/Controllers/TwilioSMSController.php b/app/Http/Controllers/TwilioSMSController.php new file mode 100644 index 0000000..c6ebe49 --- /dev/null +++ b/app/Http/Controllers/TwilioSMSController.php @@ -0,0 +1,217 @@ + 'application/x-www-form-urlencoded', + 'Accept' => 'application/json', + 'Authorization' => $authorization + ); + $request = Requests::post($endpoint, $headers); + if ( + isset($request->status_code) && $request->status_code == 200 + && isset($request->body) && !empty($request->body) + ) { + $response = json_decode($request->body); + + $tokenExpiresAt = new DateTime(); + $tokenExpiresAt->add(new DateInterval('PT' . $response->expires_in . 'S')); + $token = $response->access_token; + $tokenType = $response->token_type; + } else { + throw new Exception('Unable to connect to Nequi, please check the information sent.'); + } + }catch(Exception $e){ + throw $e; + } + + + // pago + + $headers1 = array( + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + 'Authorization' => $token, + 'x-api-key' => $api_key + ); + + $options = array( + 'timeout' => 30 + + ); + $endpoint1 = 'https://api.sandbox.nequi.com' . $RestEndpoint; + + $body1 = json_encode(array( + 'RequestMessage' => array( + 'RequestHeader' => array( + 'Channel' => 'PNP04-C001', + 'RequestDate' => '2020-01-14T10:26:12.654Z', + 'MessageID' => '1234567890', + 'ClientID' => '12345', + 'Destination' => array( + 'ServiceName' => 'PaymentsService', + 'ServiceOperation' => 'unregisteredPayment', + 'ServiceRegion' => 'C001', + 'ServiceVersion' => '1.2.0' + ) + ), + 'RequestBody' => array( + 'any' => array( + 'unregisteredPaymentRQ' => array( + 'phoneNumber'=> '3193590918', + 'code' => 'NIT_1', + 'value' => '1000', + 'reference1' => 'Referencia numero 1', + 'reference2' => 'Referencia numero 2', + 'reference3' => 'Referencia numero 3' + ) + ) + ) + ) +)); + +$request1 = Requests::post($endpoint1, $headers1, $body1, $options); + + +if ( + isset($request1->status_code) && $request1->status_code == 200 + && isset($request1->body) && !empty($request1->body) +) { + dd($request1); + + try { + $response1 = json_decode($request->body); + + $status = $response1->ResponseMessage->ResponseHeader->Status; + $statusCode = isset($status) ? $status->StatusCode : ''; + $statusDesc = isset($status) ? $status->StatusDesc : ''; + + if ($statusCode == Constan::NEQUI_STATUS_CODE_SUCCESS) { + + $payment = $response1->ResponseMessage->ResponseBody->any->unregisteredPaymentRS; + $trnId = isset($payment) ? trim($payment->transactionId) : ''; + } else { + throw new Exception('Error ' . $statusCode . ' = ' . $statusDesc); + } + } catch (Exception $e) { + throw $e; + } +} else { + throw new Exception('Unable to connect to Nequi, please check the information sent.'); +} + + + // $auth_basic = base64_encode("5ml5b35ijjk13f4q99utnsm97e:1b3703aq0o6t1rrfti13q7uf7f42glik3gsf81s0d783shblmt8l"); + + // $curl = curl_init(); + + // curl_setopt_array($curl, array( + // CURLOPT_URL => "https://oauth.sandbox.nequi.com/oauth2/token?grant_type=client_credentials", + // CURLOPT_RETURNTRANSFER => true, + // CURLOPT_ENCODING => "", + // CURLOPT_MAXREDIRS => 10, + // CURLOPT_TIMEOUT => 30, + // CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + // CURLOPT_CUSTOMREQUEST => "POST", + // //CURLOPT_POSTFIELDS => '{"message":"Text of the SMS message", "tpoa":"Sender","recipient":[{"msisdn":"573168950803"},{"msisdn":"573022548060"}]}', + // CURLOPT_HTTPHEADER => array( + // "Authorization: Basic ".$auth_basic, + // "Cache-Control: no-cache", + // "Content-Type: application/x-www-form-urlencoded" + // ), + // )); + + // $response = curl_exec($curl); + // $err = curl_error($curl); + + // curl_close($curl); + + // if ($err) { + // echo "cURL Error #:" . $err; + // } else { + // echo $response; + // $AccessToken=json_decode($response)->access_token; + // //dd($AccessToken); + + // $receiverNumber = "RECEIVER_NUMBER"; + // $message = "All About Laravel"; + + // try { + + // $auth_basic = base64_encode(getenv("USER_LABSMOBILE").':'.getenv("PASS_LABSMOBILE")); + + // $curl = curl_init(); + + // curl_setopt_array($curl, array( + // CURLOPT_URL => "https://api.labsmobile.com/json/send", + // CURLOPT_RETURNTRANSFER => true, + // CURLOPT_ENCODING => "", + // CURLOPT_MAXREDIRS => 10, + // CURLOPT_TIMEOUT => 30, + // CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + // CURLOPT_CUSTOMREQUEST => "POST", + // CURLOPT_POSTFIELDS => '{"message":"Text of the SMS message", "tpoa":"Sender","recipient":[{"msisdn":"573168950803"},{"msisdn":"573022548060"}]}', + // CURLOPT_HTTPHEADER => array( + // "Authorization: Basic ".$auth_basic, + // "Cache-Control: no-cache", + // "Content-Type: application/json" + // ), + // )); + + // $response = curl_exec($curl); + // $err = curl_error($curl); + + // curl_close($curl); + + // if ($err) { + // echo "cURL Error #:" . $err; + // } else { + // echo $response; + // } + + //$account_sid = getenv("TWILIO_SID"); + //$auth_token = getenv("TWILIO_TOKEN"); + //$twilio_number = getenv("TWILIO_FROM"); + + //$client = new Client($account_sid, $auth_token); + //$client->messages->create('+573168950803', [ + // 'from' => $twilio_number, + // 'body' => $message]); + + //dd('SMS Sent Successfully.'); + + // } catch (Exception $e) { + // dd("Error: ". $e->getMessage()); + // } + } +} \ No newline at end of file diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..68b2a1d --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,70 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Illuminate\Http\Middleware\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \App\Http\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'solo_usuario_administrador' => SoloUsuarioAdministrador::class, + + ]; +} diff --git a/app/Http/Livewire/Import.php b/app/Http/Livewire/Import.php new file mode 100644 index 0000000..8a2aa25 --- /dev/null +++ b/app/Http/Livewire/Import.php @@ -0,0 +1,29 @@ +photo); + $this->photo=null; + $this->importado = 'true'; + // aquí se puede procesar los datos obtenidos + } +} diff --git a/app/Http/Livewire/LogsRecargas.php b/app/Http/Livewire/LogsRecargas.php new file mode 100644 index 0000000..2a42df0 --- /dev/null +++ b/app/Http/Livewire/LogsRecargas.php @@ -0,0 +1,42 @@ +aprobado)) { + $consulta_historial->where('status', 'approved'); + } + + if (!empty($this->buscar)) { + $consulta_historial->whereHas('usuario', function ($query) { + $query->where('email', 'like', '%' . $this->buscar . '%'); + }); + } + + // Limitar resultados a un máximo de 200 + $resultados = $consulta_historial->take(200)->paginate(30); + + // Restablecer la paginación después de limitar los resultados + $resultados->setCollection($resultados->getCollection()->values()); + + + + + return view('livewire.logs-recargas',[ + 'historial_recargas' => $resultados + ]); + + } +} diff --git a/app/Http/Livewire/Portada.php b/app/Http/Livewire/Portada.php new file mode 100644 index 0000000..c1fb5d0 --- /dev/null +++ b/app/Http/Livewire/Portada.php @@ -0,0 +1,19 @@ + 'required', + 'celular_comprarPromo' => 'required', + 'email_comprarPromo' => 'required', + 'cantidad_comprarPromo' => 'required', + ]; + + public function render() + { + $date = Carbon::now()->subDay(8); + $this->fecha= $date->format('Y-m-d'); + + $this->fechaActual = Carbon::now(); + $this->fechaActual = Carbon::parse($this->fechaActual); + + $this->fechaHoy = Carbon::now(); + $this->fechaHoy = $this->fechaHoy->format('d/m/Y'); + + $consulta_promociones = Promociones::with('tarifas')->where('visible', 'true'); + if (!is_null($this->categoria_id)) { + $consulta_promociones = $consulta_promociones->where('categoria_id', 'LIKE', '%' . $this->categoria_id . '%'); + } + //dd($consulta_promociones->get()); + $consulta_promociones = $consulta_promociones->get(); + + return view('livewire.portada-servicio',[ + 'promociones' => $consulta_promociones, + 'categorias' => Categoria::get(), + 'tarifas' => Tarifas::with('servicio')->get(), + ]); + } + + public function verPromocion($id) + { + $consulta_verpromocion = Promociones::with('tarifas')->where('id', $id)->first(); + + $this->consulta = $consulta_verpromocion; + $this->precioAntes = $consulta_verpromocion->tarifas->first()->valor; + + $this->precioAhora = $consulta_verpromocion->precio; + $this->imagen = $consulta_verpromocion->img_publicidad; + $this->fechaLimite = $consulta_verpromocion->fecha_limite; + $this->nombrePromo = $consulta_verpromocion->nombre; + $this->dias = $consulta_verpromocion->dias; + $this->descripcionPromo = $consulta_verpromocion->descripcion; + $this->fechaFinal = $this->fechaActual->addDay($this->dias); + + $this->verPromo = true; + } + + public function comprarPromo($id) + { + $consulta_verpromocion = Promociones::with('tarifas')->where('id', $id)->first(); + + $this->consulta = $consulta_verpromocion; + $this->precioAntes = $consulta_verpromocion->tarifas->first()->valor; + + $this->precioAhora = $consulta_verpromocion->precio; + $this->imagen = $consulta_verpromocion->img_publicidad; + $this->fechaLimite = $consulta_verpromocion->fecha_limite; + $this->nombrePromo = $consulta_verpromocion->nombre; + $this->dias = $consulta_verpromocion->dias; + $this->descripcionPromo = $consulta_verpromocion->descripcion; + $this->fechaFinal = $this->fechaActual->addDay($this->dias); + + + $this->modalComprarPromo = true; + } + + + + + /* ---------------- Btn Comprar ---------------- */ + + + public function pagar() + { + + $this->validate(); + + + $usuario_existe = User::firstWhere('email', $this->email_comprarPromo)->id ?? null; + + if (is_null($usuario_existe)) { + $usuario = new User; + $usuario->name = $this->nombre_tarjetaPlan; + $usuario->email = $this->email_tarjetaPlan; + $usuario->password = '123'; + $usuario->celular = $this->celular_tarjetaPlan; + $usuario->save(); + + $usuario_id = $usuario->id; + } else { + + $usuario_id = $usuario_existe; + } + if (empty(Auth::user())) { + $historial = new Historiale(); + $historial->fecha_inicio = $this->fechaHoy; + $historial->fecha_final = $this->fechaFinal; + $historial->valor = $this->precioAhora *$this->cantidad_comprarPromo; + $historial->tipo_pago = 'manual'; + $historial->estado = 'pendiente'; + $historial->vendedor_id = Role::where('nombre','super')->first()->usuarios->first()->id; + $historial->promocion_id = $this->consulta->id; + $historial->cliente_id = $usuario_id; + $historial->cantidad = $this->cantidad_comprarPromo; + $historial->save(); + + }else{ + $historial = new Historiale(); + $historial->fecha_inicio = $this->fechaHoy; + $historial->fecha_final = $this->fechaFinal; + $historial->valor = $this->precioAhora *$this->cantidad_comprarPromo; + $historial->tipo_pago = 'manual'; + $historial->estado = 'pendiente'; + $historial->vendedor_id = Auth::user()->id; + $historial->promocion_id = $this->consulta->id; + $historial->cliente_id = $usuario_id; + $historial->cantidad = $this->cantidad_comprarPromo; + $historial->save(); + } + + return redirect('/comprar?monto='.$historial->valor.'&id='.$historial->id); + + + } + + + + + public function limpiarInputPromocion() + { + $this->nombre_promocion = ''; + $this->descripcion_promocion = ''; + $this->valor_promocion = ''; + $this->estado_promocion = null; + $this->fecha_limite_promocion = null; + $this->categoria_id_promocion = null; + $this->newCategoria = false; + $this->newPromocion = false; + + $this->list = null; + } +} diff --git a/app/Http/Livewire/ShowAdmin.php b/app/Http/Livewire/ShowAdmin.php new file mode 100644 index 0000000..286cbcd --- /dev/null +++ b/app/Http/Livewire/ShowAdmin.php @@ -0,0 +1,16 @@ +'required', + 'nombre' => 'required', + + ]; + + public function render() + { + + $consulta_categoria = Categoria::get(); + + return view('livewire.show-categoria',[ + 'categorias' => $consulta_categoria, + ]); + } + + public function create() + { + $this->validate(); + + if (!empty($this->photo)) { + + $nombre=Str::random(10); + + $img = img::make($this->photo)->orientate()->resize(1000, null, function($constraint){ + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + + $location = "photos/".$nombre.".webp"; + Storage::disk('local')->put($location, $img); + $url_foto = $location; + } else { + $url_foto = ''; + } + + + $guardar_categoria = new Categoria; + $guardar_categoria->nombre = $this->nombre; + $guardar_categoria->imagen = $url_foto; + $guardar_categoria->descripcion = $this->descripcion; + $guardar_categoria->save(); + + $this->alert('success', 'Categoria creada correctamente!', [ + 'position' => 'top' + ]); + + $this->nuevaCategoria=false; + } + + public function editar($id) + { + + $consulta_categorias = Categoria::FindOrFail($id); + + $this->categoria_id = $consulta_categorias->id; + $this->nombre = $consulta_categorias->nombre; + $this->descripcion = $consulta_categorias->descripcion; + $this->img = $consulta_categorias->imagen; + } + public function update() + { + + if (!empty($this->photo)) { + + $nombre=Str::random(10); + + $img = img::make($this->photo)->orientate()->resize(1000, null, function($constraint){ + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + + $location = "photos/".$nombre.".webp"; + Storage::disk('local')->put($location, $img); + $url_foto = $location; + } else { + $url_foto = $this->img; + } + + + Categoria::where('id', $this->categoria_id)->update([ + 'nombre' => $this->nombre, + 'descripcion' => $this->descripcion, + 'imagen' => $url_foto + ]); + + $this->alert('success', 'Categoria actualizada correctamente!', [ + 'position' => 'top' + ]); + $this->limpiarInputCategoria(); + $this->editarCategoria=false; + } + + + public function delete($id) + { + Categoria::where('id',$id)->delete(); + + $this->alert('success', 'Categoria eliminada correctamente!', [ + 'position' => 'top' + ]); + } + + + public function limpiarInputCategoria() + { + $this->photo = null; + $this->nombre = ''; + $this->descripcion = ''; + } + +} diff --git a/app/Http/Livewire/ShowClientes.php b/app/Http/Livewire/ShowClientes.php new file mode 100644 index 0000000..c06c602 --- /dev/null +++ b/app/Http/Livewire/ShowClientes.php @@ -0,0 +1,278 @@ +fechaActual = date('d/m/Y'); + $fechaVencimiento = Carbon::now()->subDay(30); + + $consulta_clientes = Historiale::where('vendedor_id', Auth()->user()->id)->whereDate('fecha_final','>', $fechaVencimiento); + + $this->configuracion = User::where('id',Auth::user()->id)->whereDate('updated_at','!=', $fechaHoy)->first(); + + if($this->configuracion){ + $this->vencidosHoy = true; + $this->vencidHoy= $consulta_clientes->whereDate('fecha_final', $fechaHoy)->get(); + $this->configuracion = User::where('id',Auth::user()->id)->update(['visto' => true]); + } + $this->msj = Configuracione::orderby('id','desc')->select('msj_compra','msj_wp','clave_1','clave_2','clave_3','clave_4','clave_5','clave_6','iptv')->first(); + if (!empty($this->buscar)) { + $consulta_clientes = $consulta_clientes->where(function ($query) { + $query->whereHas('cuentas', function ($subQuery) { + $subQuery->where('correo', 'LIKE', '%' . $this->buscar . '%'); + })->orWhereHas('cliente', function ($subQuery) { + $subQuery->where('email', 'LIKE', '%' . $this->buscar . '%'); + }); + }); + } + + if ($this->venceHoy) { + + $fecha5 = Carbon::parse($fechaHoy)->subDay(5); + $consulta_clientes = $consulta_clientes->whereDate('fecha_final', '<=', $fechaHoy) + ->whereDate('fecha_final', '>=', $fecha5); + } + + $consulta_clientes = $consulta_clientes->with('tarifa', 'promocion', 'cliente') + ->orderBy('id', 'DESC') + ->paginate(15); + + + + // dd($consulta_clientes); + + return view('livewire.show-clientes', [ + 'clientes' => $consulta_clientes + ]); + } + + public function verCliente($id) + { + $this->consulta_historial = Historiale::with('promocion', 'tarifa', 'cliente','cuentas')->where('id', $id)->first(); + // dd($this->consulta_historial ); + + $this->verCliente = true; + } + + + + public function enviarNotificacion($id) + { + $consulta_historial = Historiale::where('id', $id)->with('tarifa', 'cliente')->first(); + $user = User::find($consulta_historial->cliente); + + $notificacion = [ + //'valor' => $value['precio'], + 'fecha_final' => $consulta_historial->fecha_final, + 'cliente' => $consulta_historial->cliente->name, + 'servicio' => $consulta_historial->tarifa->servicio->nombre . '-' . $consulta_historial->tarifa->pantallas . 'pantallas', + 'tipo' => 'vencimiento', + 'vendedor' => auth()->user()->username, + + ]; + + Notification::send($user, new Vencimiento($notificacion)); + + $this->alert('success', 'Notificación enviada', [ + 'position' => 'top' + ]); + } + + public function enviarNotificacionPromo($id) + { + + $consulta_historial = Historiale::where('id', $id)->with('promocion', 'cliente')->first(); + $user = User::find($consulta_historial->cliente); + + + $nombre = $consulta_historial->promocion->nombre; + $descripcion = $consulta_historial->promocion->descripcion; + + + $notificacion = [ + //'valor' => $value['precio'], + 'fecha_final' => $consulta_historial->fecha_final, + 'cliente' => $consulta_historial->cliente->name, + 'servicio' => 'PROMO ' . $nombre . '-' . $descripcion, + 'tipo' => 'vencimiento', + 'vendedor' => auth()->user()->username, + + ]; + + Notification::send($user, new Vencimiento($notificacion)); + + $this->alert('success', 'Notificación enviada', [ + 'position' => 'top' + ]); + } + + public function notSMSpromo($id){ + $consulta_historial = Historiale::where('id', $id)->with('promocion', 'cliente')->first(); + $user = User::find($consulta_historial->cliente); + + $nombre = $consulta_historial->promocion->nombre; + $fecha=Carbon::parse($consulta_historial->fecha_final)->format('Y/m/d'); + $fecha_humana= Carbon::parse($consulta_historial->fecha_final)->diffForHumans(); + //dd($fecha_humana); + //$descripcion = $consulta_historial->promocion->descripcion; + + $message = 'Su '.$nombre.', Vence '.$fecha_humana.', '.$fecha.'. Renueva ahora!!' ; + $recipients= '+57'.$consulta_historial->cliente->celular; + + $this->sendMessage($message, $recipients); + + + } + + public function notSMS($id){ + $consulta_historial = Historiale::where('id', $id)->with('tarifa', 'cliente')->first(); + $user = User::find($consulta_historial->cliente); + + $nombre = $consulta_historial->tarifa->servicio->nombre . '-' . $consulta_historial->tarifa->pantallas . 'P'; + $fecha=Carbon::parse($consulta_historial->fecha_final)->format('Y/m/d'); + $fecha_humana= Carbon::parse($consulta_historial->fecha_final)->diffForHumans(); + + + $message = 'Su '.$nombre.', Vence '.$fecha_humana.', '.$fecha.'. Renueva ahora!!' ; + $recipients= '+57'.$consulta_historial->cliente->celular; + + $this->sendMessage($message, $recipients); + + + } + + public function sendMessage($message, $recipients) + { + // try { + // $account_sid = getenv("TWILIO_SID"); + // $auth_token = getenv("TWILIO_TOKEN"); + // $twilio_number = getenv("TWILIO_FROM"); + + // $client = new Client($account_sid, $auth_token); + + // $client->messages->create($recipients, + // ['from' => $twilio_number, 'body' => $message] ); + + // $this->alert('success', 'Notificación enviada por SMS! ', [ + // 'position' => 'top' + // ]); + + // }catch(Exception $e){ + // $this->alert('warning', 'Error enviando SMS!'.$e->getMessage(), [ + // 'position' => 'top' + // ]); + + // } + $auth_basic = base64_encode('admin@jaguarws.ga:9u3xxXhHt8maeiOexg07pFKI0rpYazI0'); + //dd(getenv('USER_LABSMOBILE')); + $curl = curl_init(); + + + curl_setopt_array($curl, array( + CURLOPT_URL => "https://api.labsmobile.com/json/send", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "POST", + CURLOPT_POSTFIELDS => '{"message":"'.$message.'","nofilter":"1, "tpoa":"Sender","recipient":[{"msisdn":"'.$recipients.'"}]}', + CURLOPT_HTTPHEADER => array( + "Authorization: Basic ".$auth_basic, + "Cache-Control: no-cache", + "Content-Type: application/json" + ), + )); + + $response = curl_exec($curl); + $err = curl_error($curl); + + curl_close($curl); + + if ($err) { + + $this->alert('warning', 'Error enviando SMS!'.$err, [ + 'position' => 'top' + ]); + + } else { + //dd($response); + if (!empty(json_decode($response)->subid)) { + $this->alert('success', 'Notificación enviada por SMS! '.json_decode($response)->subid, [ + 'position' => 'top' + ]); + }else{ + $this->alert('warning', 'Servicio de SMS en mantenimiento!'.json_decode($response)->code, [ + 'position' => 'top' + ]); + } + + + } + + + } + public function cerrar(){ + + $this->configuracion = User::where('id',Auth::user()->id)->update(['visto' => true]); + + //dd($this->configuracion); + $this->visto=true; + + $this->vencidosHoy = false; + + + } + + public function renovar(){ + + } + + +} diff --git a/app/Http/Livewire/ShowConfiguracion.php b/app/Http/Livewire/ShowConfiguracion.php new file mode 100644 index 0000000..88575ac --- /dev/null +++ b/app/Http/Livewire/ShowConfiguracion.php @@ -0,0 +1,451 @@ +orderby('id','desc'); + $consulta_configuracion= Configuracione::with('usuario')->orderby('id','desc')->first(); + $this->consulta_configuracion = $consulta_configuracion; + //dd($consulta_configuraciones); + if (empty($this->nombre) && empty($this->slogan) && empty($this->color_boton) ) { + + $this->nombre = $consulta_configuracion->nombre; + $this->slogan = $consulta_configuracion->slogan; + $this->color_boton = $consulta_configuracion->color_boton; + $this->url_logo = $consulta_configuracion->url_logo; + $this->color_barra = $consulta_configuracion->color_barra; + $this->color_menu = $consulta_configuracion->color_menu; + + //top + $this->top_1 = $consulta_configuracion->top_1; + $this->top_2 = $consulta_configuracion->top_2; + $this->top_3 = $consulta_configuracion->top_3; + $this->top_4 = $consulta_configuracion->top_4; + $this->top_5 = $consulta_configuracion->top_5; + $this->top_6 = $consulta_configuracion->top_6; + $this->top_7 = $consulta_configuracion->top_7; + $this->top_8 = $consulta_configuracion->top_8; + $this->top_9 = $consulta_configuracion->top_9; + $this->top_10 = $consulta_configuracion->top_10; + + $this->premio_1 = $consulta_configuracion->premio_1; + $this->premio_2 = $consulta_configuracion->premio_2; + $this->premio_3 = $consulta_configuracion->premio_3; + $this->premio_4 = $consulta_configuracion->premio_4; + $this->premio_5 = $consulta_configuracion->premio_5; + $this->premio_6 = $consulta_configuracion->premio_6; + $this->premio_7 = $consulta_configuracion->premio_7; + $this->premio_8 = $consulta_configuracion->premio_8; + $this->premio_9 = $consulta_configuracion->premio_9; + $this->premio_10 = $consulta_configuracion->premio_10; + + $this->img_top = $consulta_configuracion->img_top; + $this->mensaje_top = $consulta_configuracion->mensaje_top; + + //msj + + $this->mensaje_msj_compra= $consulta_configuracion->msj_compra; + $this->mensaje_msj_wp= $consulta_configuracion->msj_wp; + + $this->clave_1 = $consulta_configuracion->clave_1; + $this->clave_2 = $consulta_configuracion->clave_2; + $this->clave_3 = $consulta_configuracion->clave_3; + $this->clave_4 = $consulta_configuracion->clave_4; + $this->clave_5 = $consulta_configuracion->clave_5; + $this->clave_6 = $consulta_configuracion->clave_6; + + $this->iptv = $consulta_configuracion->iptv; + $this->notificacion = $consulta_configuracion->hora; + + + } + + + + return view('livewire.show-configuracion',[ + 'sliders' => slider::get(), + ]); + } + + public function guardarclaves(){ + $claves=$this->consulta_configuracion->update([ + 'clave_1' => $this->clave_1, + 'clave_2' => $this->clave_2, + 'clave_3' => $this->clave_3, + 'clave_4' => $this->clave_4, + 'clave_5' => $this->clave_5, + 'clave_6' => $this->clave_6, + ]); + + if ($claves) { + + $this->alert('success', 'claves actualizado', [ + 'position' => 'top' + ]); + + } + } + + public function guardar(){ + + if (!empty($this->photo)) { + $nombre=Str::random(10); + + $img = img::make($this->photo)->orientate()->resize(1000, null, function($constraint){ + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + + $location = "photos/".$nombre.".webp"; + + Storage::disk('local')->put($location, $img); + + $url_logo = $location; + }else{ + $url_logo = $this->url_logo ; + } + + $configuracion=$this->consulta_configuracion->update([ + 'nombre' => $this->nombre, + 'slogan' => $this->slogan, + 'color_boton' => $this->color_boton, + 'url_logo' => $url_logo, + 'color_barra' => $this->color_barra, + 'color_menu'=> $this->color_menu, + 'usermodifico_id'=>Auth::user()->id, + + ]); + if ($configuracion) { + + $this->alert('success', 'Configuración actualizada', [ + 'position' => 'top' + ]); + + } + + + } + + public function guardarSlider(){ + + if (!empty($this->slider)) { + + $nombre=Str::random(12); + + $img = img::make($this->slider)->orientate()->resize(1000, null, function($constraint){ + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + + $location = "photos/".$nombre.".webp"; + + Storage::disk('local')->put($location, $img); + + $url_slider = $location; + }else{ + $url_slider = '' ; + } + + $guardar = new slider; + $guardar->slider = $url_slider; + $guardar->save(); + + $this->slider = ''; + } + + public function cancelarSlider() + { + $this->slider = ''; + } + + public function deleteSlider($id) + { + $this->delete_slider = $id; + $this->alert('warning', '¿Eliminar slider?', [ + 'position' => 'center', + 'timer' => '10000', + 'toast' => false, + 'text' => 'Esta seguro', + 'showConfirmButton' => true, + 'onConfirmed' => 'confirmed', + 'showDenyButton' => false, + 'onDenied' => '', + 'showCancelButton' => true, + 'onDismissed' => '', + 'cancelButtonText' => 'Salir', + 'confirmButtonText' => 'Si', + ]); + } + + public function getListeners() + { + return [ + 'confirmed' + ]; + } + + public function confirmed(){ + slider::where('id',$this->delete_slider)->delete(); + + $this->alert('success', 'Imagen eliminada correctamente!', [ + 'position' => 'top' + ]); + } + + public function guardarTop(){ + + if (!empty($this->photo_top)) { + $nombre=Str::random(10); + $img = img::make($this->photo_top)->orientate()->resize(1000, null, function($constraint){ + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + $location = "photos/".$nombre.".webp"; + Storage::disk('local')->put($location, $img); + $photo_top = $location; + + }else{ + $photo_top = $this->img_top ; + } + + if (!empty($this->imgP1)) { + $imgP1=$this->imgP1->store('photos'); + }else{ + $imgP1 = $this->top_1 ; + } + + if (!empty($this->imgP2)) { + $imgP2=$this->imgP2->store('photos'); + }else{ + $imgP2 = $this->top_2 ; + } + + if (!empty($this->imgP3)) { + $imgP3=$this->imgP3->store('photos'); + }else{ + $imgP3 = $this->top_3 ; + } + if (!empty($this->imgP4)) { + $imgP4=$this->imgP4->store('photos'); + }else{ + $imgP4 = $this->top_4 ; + } + + if (!empty($this->imgP5)) { + $imgP5=$this->imgP5->store('photos'); + }else{ + $imgP5 = $this->top_5 ; + } + + if (!empty($this->imgP6)) { + $imgP6=$this->imgP6->store('photos'); + }else{ + $imgP6 = $this->top_6 ; + } + + if (!empty($this->imgP7)) { + $imgP7=$this->imgP7->store('photos'); + }else{ + $imgP7 = $this->top_7 ; + } + + if (!empty($this->imgP8)) { + $imgP8=$this->imgP8->store('photos'); + }else{ + $imgP8 = $this->top_8 ; + } + + if (!empty($this->imgP9)) { + $imgP9=$this->imgP9->store('photos'); + }else{ + $imgP9 = $this->top_9 ; + } + + if (!empty($this->imgP10)) { + $imgP10=$this->imgP10->store('photos'); + }else{ + $imgP10 = $this->top_10 ; + } + + $top = $this->consulta_configuracion->update([ + + 'top_1' => $imgP1, + 'top_2' => $imgP2, + 'top_3' => $imgP3, + 'top_4' => $imgP4, + 'top_5' => $imgP5, + 'top_6' => $imgP6, + 'top_7' => $imgP7, + 'top_8' => $imgP8, + 'top_9' => $imgP9, + 'top_10' => $imgP10, + + 'img_top' => $photo_top, + 'mensaje_top' => $this->mensaje_top, + 'premio_1' => $this->premio_1, + 'premio_2' => $this->premio_2, + 'premio_3' => $this->premio_3, + 'premio_4' => $this->premio_4, + 'premio_5' => $this->premio_5, + 'premio_6' => $this->premio_6, + 'premio_7' => $this->premio_7, + 'premio_8' => $this->premio_8, + 'premio_9' => $this->premio_9, + 'premio_10' => $this->premio_10, + + + ]); + + if($top){ + $this->alert('success', 'Top distribuidores actualizado', [ + 'position' => 'top' + ]); + } + + } + + public function guardarMsjCompra(){ + $msj = $this->consulta_configuracion->update([ + 'msj_compra' => $this->mensaje_msj_compra, + 'msj_wp' => $this->mensaje_msj_wp, + ]); + + if ($msj) { + + $this->alert('success', 'Mensaje actualizado', [ + 'position' => 'top' + ]); + + } + } + + public function guardariptv(){ + // dd($this->iptv); + $iptv = $this->consulta_configuracion->update([ + 'iptv' => $this->iptv, + ]); + + if ($iptv) { + + $this->alert('success', 'iptv actualizado', [ + 'position' => 'top' + ]); + + } + } + + public function eliminarC(){ + //$eliminar_cuentas = Cuentas::truncate(); + $this->alert('warning', 'Funcion deshabilitada ', [ + 'position' => 'top' + ]); + + } + public function eliminarR(){ + // $eliminar_cuentas = Historial_cuenta::truncate(); + $this->alert('warning', 'Funcion deshabilitada ', [ + 'position' => 'top' + ]); + } + public function eliminarH(){ + //$desasociar_cuentas = Historiale::truncate(); + $this->alert('warning', 'Funcion deshabilitada ', [ + 'position' => 'top' + ]); + } + + public function guardarnot(){ + $notificacion = $this->consulta_configuracion->update([ + 'hora' => $this->notificacion, + ]); + $this->alert('success', 'La hora de notificación ha sido actualizada.', [ + 'position' => 'top' + ]); + } + + public function eliminarCache(){ + Artisan::call('cache:clear'); + Artisan::call('config:clear'); + Artisan::call('view:clear'); + Artisan::call('route:cache'); + + + $this->alert('success', 'Cache removido correctamente', [ + 'position' => 'top' + ]); + } + +} diff --git a/app/Http/Livewire/ShowIndex.php b/app/Http/Livewire/ShowIndex.php new file mode 100644 index 0000000..df69383 --- /dev/null +++ b/app/Http/Livewire/ShowIndex.php @@ -0,0 +1,32 @@ +limit(4)->get(); + + $this->rol_id = Role::where('nombre','cliente')->value('id'); + + $planes = Servicio::where('estado','activo')->withMax(['tarifas' => function ($query) { + $query->where('rol_id', $this->rol_id); + }],'valor')->withMin(['tarifas' => function ($query) { + $query->where('rol_id', $this->rol_id); + }],'valor')->get(); + + return view('livewire.show-index',[ + 'planes' => $planes, + 'promociones' => $promociones, + ]); + } +} diff --git a/app/Http/Livewire/ShowIndexCategoria.php b/app/Http/Livewire/ShowIndexCategoria.php new file mode 100644 index 0000000..59579ca --- /dev/null +++ b/app/Http/Livewire/ShowIndexCategoria.php @@ -0,0 +1,22 @@ + $consulta_categoria + ]); + } +} diff --git a/app/Http/Livewire/ShowIndexPromo.php b/app/Http/Livewire/ShowIndexPromo.php new file mode 100644 index 0000000..0d176d9 --- /dev/null +++ b/app/Http/Livewire/ShowIndexPromo.php @@ -0,0 +1,106 @@ + 'required', + 'celular_comprarPromo' => 'required', + 'email_comprarPromo' => 'required', + 'cantidad_comprarPromo' => 'required', + ]; + public function render(Request $request) + { + if (empty($this->promo_id)) { + $this->promo_id = $request->promo; + } + + $consulta_promo = Promociones::find($this->promo_id); + $this->consulta= $consulta_promo; + + $promociones= Promociones::where('visible','true')->get(); + $fechaActual = Carbon::now(); + $this->fechaHoy = $fechaActual; + //dd($consulta_promo); + $this->fechaFinal = $fechaActual->addDay($consulta_promo->dias); + + + + return view('livewire.show-index-promo',[ + 'promo' => $consulta_promo, + 'promociones'=>$promociones + ]); + } + + public function comprar() + { + + $this->validate(); + + + $usuario_existe = User::firstWhere('email', $this->email_comprarPromo)->id ?? null; + + if (is_null($usuario_existe)) { + $usuario = new User; + $usuario->name = $this->nombre_tarjetaPlan; + $usuario->email = $this->email_tarjetaPlan; + $usuario->password = '123'; + $usuario->celular = $this->celular_tarjetaPlan; + $usuario->save(); + + $usuario_id = $usuario->id; + } else { + + $usuario_id = $usuario_existe; + } + if (empty(Auth::user())) { + $historial = new Historiale(); + $historial->fecha_inicio = $this->fechaHoy; + $historial->fecha_final = $this->fechaFinal; + $historial->valor = $this->consulta->precio *$this->cantidad_comprarPromo; + $historial->tipo_pago = 'manual'; + $historial->estado = 'pendiente'; + $historial->vendedor_id = Role::where('nombre','super')->first()->usuarios->first()->id; + $historial->promocion_id = $this->consulta->id; + $historial->cliente_id = $usuario_id; + $historial->cantidad = $this->cantidad_comprarPromo; + $historial->save(); + }else{ + $historial = new Historiale; + $historial->fecha_inicio = $this->fechaHoy; + $historial->fecha_final = $this->fechaFinal; + $historial->valor = $this->consulta->precio *$this->cantidad_comprarPromo ; + $historial->tipo_pago = 'manual'; + $historial->estado = 'pendiente'; + $historial->vendedor_id = Auth::user()->id; + $historial->promocion_id = $this->consulta->id; + $historial->cliente_id = $usuario_id; + $historial->cantidad = $this->cantidad_comprarPromo; + $historial->save(); + } + + return redirect('/comprar?monto='.$historial->valor.'&id='.$historial->id); + + } +} diff --git a/app/Http/Livewire/ShowIndexServicio.php b/app/Http/Livewire/ShowIndexServicio.php new file mode 100644 index 0000000..7e78efc --- /dev/null +++ b/app/Http/Livewire/ShowIndexServicio.php @@ -0,0 +1,153 @@ + 'required', + 'cantidad_tarjetaPlan' => 'required', + 'email_tarjetaPlan' => 'required', + 'celular_tarjetaPlan' => 'required', + ]; + + public function render(Request $request) + { + if (empty($this->servicio_id)) { + $this->servicio_id = $request->servicio; + } + $this->total = (int) $this->valor * (int)$this->cantidad_tarjetaPlan; + $this->fechaHoy = Carbon::now(); + $this->fechaHoy = $this->fechaHoy->format('d/m/Y'); + + $fechaActual = Carbon::now(); + $this->fechaActual = Carbon::parse($this->fechaActual); + + $date = $fechaActual ->subDay(8); + $this->fecha= $date->format('Y-m-d'); + + if (!empty($this->tarifa_id)) { + + $this->fecha_final_1 = $today = Carbon::now()->addDays($tarifas->dias-15); + $this->fecha_final_2 = $today = Carbon::now()->addDays($tarifas->dias+15); + + $tarifas = Tarifas::with('servicio')->where('id', $this->tarifa_id)->first(); + + $cuentas_creadas = Cuentas::whereDate('inicio','>=',$this->fecha)->where('servicio_id',$this->servicio_id)->where('estado','activo')->get(); + $cuentas_tomadas = Historial_cuenta::whereIn('cuenta_id', $cuentas_creadas->pluck('id'))->count(); + + + $cuentas_completas = Cuentas::whereDate('inicio','>=',$this->fecha)->whereDate('vencimiento','>=',$this->fecha_final_1)->whereDate('vencimiento','<=',$this->fecha_final_2)->where('servicio_id',$tarifas->servicio->id)->where('estado','pendiente')->get(); + $cuentas_completas_tomadas = Historial_cuenta::whereIn('cuenta_id', $cuentas_completas->pluck('id')) + ->count(); + + $this->fechaFinal = $this->fechaActual->addDay($tarifas->dias); + $this->fechaFinal = $this->fechaFinal->format('d/m/Y'); + if ($tarifas->pantallas == $tarifas->servicio->completa) { + $this->disponibles = (($cuentas_completas->count()*$tarifas->servicio->completa) - $cuentas_completas_tomadas)/ $tarifas->pantallas; + }else{ + $this->disponibles = (($cuentas_creadas->count()*$tarifas->servicio->pantallas) - $cuentas_tomadas)/ $tarifas->pantallas; + } + + $this->valor= $tarifas->valor; + } + + + $this->rol_id = Role::where('nombre','cliente')->value('id'); + + + $planes = Servicio::where('estado','activo')->withMax(['tarifas' => function ($query) { + $query->where('rol_id', $this->rol_id); + }],'valor')->withMin(['tarifas' => function ($query) { + $query->where('rol_id', $this->rol_id); + }],'valor')->with(['tarifas' => function ($query) { + $query->where('rol_id', $this->rol_id); + }])->get(); + + foreach ($planes as $plan ) { + if($plan->id == $this->servicio_id){ + $servicio = $plan; + } + + } + return view('livewire.show-index-servicio',[ + 'servicio' =>$servicio, + 'planes' =>$planes + ]); + } + + + +/* ---------------- Btn Comprar ---------------- */ +public function comprar() +{ + $this->validate(); + + $total_valor = (int) $this->valor * (int)$this->cantidad_tarjetaPlan; + + $usuario_existe = User::firstWhere('email', $this->email_tarjetaPlan)->id ?? null; + + if (is_null($usuario_existe)) { + $usuario = new User; + $usuario->name = $this->nombre_tarjetaPlan; + $usuario->email = $this->email_tarjetaPlan; + $usuario->password = '123'; + $usuario->celular = $this->celular_tarjetaPlan; + $usuario->save(); + + $usuario_id = $usuario->id; + }else{ + + $usuario_id = $usuario_existe; + + } + + $historial = new Historiale; + $historial->fecha_inicio = $this->fechaActual; + $historial->fecha_final = $this->fechaFinal; + $historial->valor = $total_valor ; + $historial->tipo_pago = 'manual'; + $historial->estado = 'pendiente'; + if (empty(Auth::user())) { // SI esta logueado o no + $historial->vendedor_id = Role::where('nombre','super')->first()->usuarios->first()->id; + }else{ + $historial->vendedor_id = Auth::user()->id; + } + $historial->tarifa_id = $this->tarifa_id; + $historial->cliente_id = $usuario_id; + $historial->cantidad = $this->cantidad_tarjetaPlan; + $historial->save(); + + + return redirect('/comprar?monto='.$historial->valor.'&id='.$historial->id); +} + + +} diff --git a/app/Http/Livewire/ShowInicio.php b/app/Http/Livewire/ShowInicio.php new file mode 100644 index 0000000..8b08173 --- /dev/null +++ b/app/Http/Livewire/ShowInicio.php @@ -0,0 +1,24 @@ + $consulta_promociones, + ]); + } +} diff --git a/app/Http/Livewire/ShowLogs.php b/app/Http/Livewire/ShowLogs.php new file mode 100644 index 0000000..0417b9b --- /dev/null +++ b/app/Http/Livewire/ShowLogs.php @@ -0,0 +1,36 @@ +subDay(30); + //dd($fechaVencimiento); + $consulta_historial = Historiale::with('promocion', 'tarifa', 'vendedor','cuentas','cuentas_obsoletas')->whereDate('fecha_final','>', $fechaVencimiento)->orderBy('id', 'DESC') + ->when(!empty($this->buscar), function ($query) { + $query->whereHas('cuentas', function ($subquery) { + $subquery->where('correo', 'LIKE', '%' . $this->buscar . '%'); + })->orWhereHas('vendedor', function ($subquery) { + $subquery->where('email', 'LIKE', '%' . $this->buscar . '%'); + }); + }); + // Limitar resultados a un máximo de 200 + $resultados= $consulta_historial->take(200)->paginate(20); + + // Restablecer la paginación después de limitar los resultados + $resultados->setCollection($resultados->getCollection()->values()); + + + //dd($consulta_historial); + return view('livewire.show-logs',['logs'=>$resultados]); + } +} diff --git a/app/Http/Livewire/ShowOrder.php b/app/Http/Livewire/ShowOrder.php new file mode 100644 index 0000000..0868cb2 --- /dev/null +++ b/app/Http/Livewire/ShowOrder.php @@ -0,0 +1,25 @@ +nombre)) { + + $consulta_perfil = User::with('rol')->where('id', Auth()->user()->id)->first(); + + $this->nombre = $consulta_perfil->name; + $this->email = $consulta_perfil->email; + $this->celular = $consulta_perfil->celular; + $this->cedula = $consulta_perfil->cedula; + $this->rol = $consulta_perfil->rol->nombre; + $this->url_imagen_d = $consulta_perfil->img_perfil; + } + + return view('livewire.show-perfil'); + } + + public function update() + { + if ($this->url_imagen) { + $this->url = $this->url_imagen->store('photos'); + } else { + $this->url = null; + } + + if (!empty($this->nombre) && !empty($this->email) && !empty($this->celular) && !empty($this->cedula)) { + + User::where('id', Auth()->user()->id)->update([ + 'name' => $this->nombre, + 'email' => $this->email, + 'celular' => $this->celular, + 'cedula' => $this->cedula, + 'img_perfil' => $this->url + ]); + + $this->alert('success', 'La informacion se actualizo correctamente!', [ + 'position' => 'top' + ]); + } else { + $this->alert('warning', 'Llene todos los campos!', [ + 'position' => 'top' + ]); + } + } + + public function cambiar_password() + { + $this->modalPassword = true; + } + + public function confirmar() + { + + $validatedData = $this->validate([ + 'newPassword' => 'required' + ]); + + User::where('id', Auth()->user()->id)->update([ + 'password' => Hash::make($this->newPassword), + ]); + + $this->alert('success', 'Contraseña actualizada correctamente!', [ + 'position' => 'top' + ]); + + $this->limpiarContra(); + } + + public function limpiarContra() + { + $this->newPassword = ''; + $this->modalPassword = false; + } + +} diff --git a/app/Http/Livewire/ShowPlanes.php b/app/Http/Livewire/ShowPlanes.php new file mode 100644 index 0000000..a518638 --- /dev/null +++ b/app/Http/Livewire/ShowPlanes.php @@ -0,0 +1,543 @@ +fechaActual = date('Y-m-d'); + + $consulta_tarifas = Tarifas::take(1); + + if(empty($this->fecha_inicial)){ + $this->fecha_inicial=Carbon::now()->format('Y-m-d'); + $this->fecha_final=Carbon::now()->addDay(30)->format('Y-m-d'); + } + if ($this->servicio_modTarifas) { + $this->tarifas = Tarifas::with('rol') + ->where('servicio_id', $this->servicio_modTarifas) + ->where('estado', 'activo') + ->get(); + + } + + // Empezamos definiendo la consulta básica + $consulta_cuentas = Cuentas::where('correo', 'LIKE', '%'.$this->buscar.'%') + ->withCount('historiales') + ->with('historiales') + ->orderBy('id','DESC'); + + $consulta_cuentas = $consulta_cuentas->when(!empty($this->servicios_id), function ($query) { + return $query->where('servicio_id', $this->servicios_id); + }) + ->when(!empty($this->completa), function ($query) { + return $query->where('estado', 'pendiente'); + }) + ->when(!empty($this->pantallas), function ($query) { + return $query->where('estado', 'activo'); + }) + ->when(!empty($this->activoHoy), function ($query) { + $fechaHoy = Carbon::now()->subDay(1); + return $query->whereDate('vencimiento', '>', $fechaHoy); + }) + ->when($this->venceHoy, function ($query) { + $fechaHoy = Carbon::now()->addDay(1); + return $query->whereDate('vencimiento', '<', $fechaHoy); + }) + ->when($this->libres, function ($query) { + return $query->whereDoesntHave('historiales'); + }); + + if (!empty($this->repetidas)) { + $consulta_cuentas = $consulta_cuentas->whereIn('correo', function ($subquery) { + $subquery->select('correo') + ->from('cuentas') + ->groupBy('correo') + ->havingRaw('COUNT(*) > 1'); + }); + } + + + $consulta_cuentas = $consulta_cuentas->paginate(30); + + if ( $this->searchTerm) { + $this->usuarios = User::where('email', 'LIKE', '%' . $this->searchTerm . '%')->get(); + if ($this->selectedOption) { + $this->searchTerm = $this->selectedOption; + } + }else{ + $this->selectedOption = null; + } + + + return view('livewire.show-planes', [ + + 'cuentas' => $consulta_cuentas, + 'servicios' => Servicio::where('estado','activo')->get(), + 'roles' => Role::get() + ]); + } + + //modal Ver + public function ver($id, $nom) + { + $this->id_cuentaVer = $id; + $this->consulta_verUsuarios = Cuentas::with('historiales','servicio')->where('id', $id)->first(); + //dd($this->consulta_verUsuarios); + $this->nombre_servicios = $nom; + } + public function openRenovar() + { + $this->renovar = true; + + $id = $this->id_cuentaVer; + + $renovarCuenta = Cuentas::findOrFail($id); + $this->usuario_renovar = $renovarCuenta->correo; + $this->password_renovar = $renovarCuenta->password; + $this->fecha_inicial_renovar = $renovarCuenta->inicio; + $this->fecha_final_renovar = $renovarCuenta->vencimiento; + $this->estado = $renovarCuenta->estado; + } + public function saveRenovar() + { + $id = $this->id_cuentaVer; + + + Cuentas::where('id', $id)->update([ + 'correo' => $this->usuario_renovar, + 'password' => $this->password_renovar, + 'inicio' => date('Y-m-d', strtotime(strval($this->fecha_inicial_renovar))), + 'vencimiento' => date('Y-m-d', strtotime(strval($this->fecha_final_renovar))), + 'estado' => $this->estado, + ]); + + $this->alert('success', 'Cuenta renovada correctamente!', [ + 'position' => 'top' + ]); + + $this->renovar = false; + } + + /* ------------- CREAR ------------- */ + public function createNewCuenta() + { + $this->validate([ + 'servicio_newCuenta' => 'required', + 'usuario_newCuenta' => 'required', + 'password_newCuenta' => 'required', + 'fecha_inicial' => 'required', + 'fecha_final' => 'required', + 'estado' => 'required', + ]); + + + if($consulta_cuenta = Cuentas::where('correo',$this->usuario_newCuenta)->exists()){ + $this->alert('warning', 'La cuenta ya existe', [ + 'position' => 'top' + ]); + }else{ + $cuenta = new Cuentas; + $cuenta->servicio_id = $this->servicio_newCuenta; + $cuenta->correo = $this->usuario_newCuenta; + $cuenta->password = $this->password_newCuenta; + $cuenta->inicio = date('Y-m-d', strtotime(strval($this->fecha_inicial))); + $cuenta->vencimiento = date('Y-m-d', strtotime(strval($this->fecha_final))); + $cuenta->estado = $this->estado; + $cuenta->save(); + + $this->alert('success', 'Cuenta creada correctamente!', [ + 'position' => 'top' + ]); + + $this->limpiarInputNewCuenta(); + + $this->newCuenta = false; + } + + + } + public function createServicio() + { + $url_foto = $this->photo->store('photos'); + $url_foto_inicio = $this->photo_inicio->store('photos'); + + $servicio = new Servicio; + $servicio->nombre = $this->nombre_servicio; + $servicio->descripcion = $this->descripcion_servicio; + $servicio->estado = $this->estado_servicio; + $servicio->color_fondo = $this->color_servicio; + $servicio->pantallas = '6'; + $servicio->img = $url_foto; + $servicio->img_inicio = $url_foto_inicio; + $servicio->save(); + + $this->alert('success', 'Servicio creado correctamente!', [ + 'position' => 'top' + ]); + + $this->serviciosModal = false; + } + public function verObservacion($id) + { + $verObservacion = Historiale::findOrFail($id); + + $this->id_observacion = $id; + $this->observaciones = $verObservacion->observaciones; + } + public function update() + { + Historiale::where('id', $this->id_observacion)->update(['observaciones' => $this->observaciones,]); + + $this->alert('success', 'Observacion añadida correctamente!', [ + 'position' => 'top' + ]); + + $this->observacionesm = false; + } + + public function verObservacion1($id) + { + $verObservacion = Cuentas::findOrFail($id); + + $this->id_observacion1 = $id; + + $this->observaciones1 = $verObservacion->observaciones; + } + public function update_observaciones1() + { + Cuentas::where('id', $this->id_observacion1)->update(['observaciones' => $this->observaciones1,]); + + $this->alert('success', 'Observacion añadida correctamente!', [ + 'position' => 'top' + ]); + + $this->observacionesm1 = false; + } + + public function delete_cuenta($id) + { + $this->delete_cuenta = $id; + $this->alert('warning', '¿Eliminar cuenta?', [ + 'position' => 'center', + 'timer' => '10000', + 'toast' => false, + 'text' => 'Esta seguro', + 'showConfirmButton' => true, + 'onConfirmed' => 'confirmed', + 'showDenyButton' => false, + 'onDenied' => '', + 'showCancelButton' => true, + 'onDismissed' => '', + 'cancelButtonText' => 'Salir', + 'confirmButtonText' => 'Si', + ]); + } + + public function getListeners() + { + return [ + 'confirmed' + ]; + } + + public function confirmed() + { + Cuentas::where('id', $this->delete_cuenta)->delete(); + + $this->alert('success', 'Cuenta eliminada correctamente!', [ + 'position' => 'top' + ]); + } + + /* ------------- ACTUALIZAR ------------- */ + public function updateTarifas() + { + $consulta_existe = Tarifas::where('pantallas', $this->pantallas_modTarifas) + ->where('servicio_id', $this->servicio_modTarifas) + ->where('rol_id', $this->roles_modTarifas) + ->where('dias', $this->diasTarifa) + ->exists(); + + if ($consulta_existe) { + $this->alert('warning', '¡Esta tarifa ya existe!', [ + 'position' => 'top' + ]); + } elseif (empty($this->servicio_modTarifas)) { + $this->alert('warning', '¡Seleccione un servicio!', [ + 'position' => 'top' + ]); + } elseif (empty($this->precio_modTarifas)) { + $this->alert('warning', '¡Coloque un precio!', [ + 'position' => 'top' + ]); + } else { + $tarifa = new Tarifas; + $tarifa->pantallas = $this->pantallas_modTarifas; + $tarifa->dias = $this->diasTarifa; + $tarifa->valor = $this->precio_modTarifas; + $tarifa->estado = $this->estadoTarifa ? 'activo' : 'inactivo'; + $tarifa->servicio_id = $this->servicio_modTarifas; + $tarifa->rol_id = $this->roles_modTarifas; + $tarifa->save(); + + $this->alert('success', '¡Tarifas actualizadas correctamente!', [ + 'position' => 'top' + ]); + } + + + } + + + /* ------------- ELIMINAR ------------- */ + + public function eliminarModTarifa($id) + { + Tarifas::where('id',$id)->delete(); + + $this->alert('success', 'Tarifas eliminada correctamente!', [ + 'position' => 'top' + ]); + } + + /* ------------- LIMPIAR CAMPOS ------------- */ + public function limpiarInputObservaciones() + { + $this->observaciones = ''; + } + public function limpiarInputObservaciones1() + { + $this->observaciones1 = ''; + $this->observacionesm1 = false; + } + public function limpiarInputNewCuenta() + { + $this->servicio_newCuenta = null; + $this->usuario_newCuenta = ''; + $this->password_newCuenta = ''; + $this->fecha_inicial = null; + $this->fecha_final = null; + + $this->newCuenta = false; + } + public function limpiarInputServiciosModal() + { + $this->nombre_servicio = ''; + $this->descripcion_servicio = ''; + $this->estado_servicio = null; + $this->color_servicio = null; + } + + public function eliminarCuentas(){ + + $consulta_cuentas = Cuentas::whereIn('id',$this->delete_1)->delete(); + + } + + public function openAdd(){ + + $this->addUser = true; + + + } + public function saveUser(){ + + $this->validate([ + 'tarifa' => 'required', + + ]); + + + $tarifa = json_decode($this->tarifa, true); + //dd($this->tarifa['dias']); + $usuario_existe = User::firstWhere('email', $this->searchTerm)->id ?? null; + $usuario_id = $usuario_existe; + + if (is_null($usuario_existe)) { + $rol_id=Role::where('nombre','cliente')->value('id'); + $usuario = new User; + $usuario->name = 'AssignedUser'; + $usuario->email = $this->searchTerm; + $usuario->password = '123456'; + $usuario->celular = '+57'; + $usuario->rol_id = $rol_id; + $usuario->save(); + + $usuario_id = $usuario->id; + } + + + $historial = new Historiale; + $historial->fecha_inicio = Carbon::now(); + $historial->fecha_final = Carbon::now()->addDay($tarifa['dias']); + $historial->valor = '0'; + $historial->tipo_pago = 'manual'; + $historial->estado = 'activo'; + $historial->vendedor_id = Auth()->user()->id; + $historial->tarifa_id = $tarifa['id']; + $historial->cliente_id = $usuario_id; + $historial->cantidad = $tarifa['pantallas']; + $historial->save(); + + $consultaHC = Historial_cuenta::where('cuenta_id',$this->consulta_verUsuarios->id)->where('perfil',$this->perfil)->exists(); + + if (!$consultaHC) { + $historial_cuenta = new Historial_cuenta; + $historial_cuenta->cuenta_id = $this->consulta_verUsuarios->id; + $historial_cuenta->historial_id = $historial->id; + $historial_cuenta->perfil = $this->perfil; + $historial_cuenta->save(); + + $this->alert('success', 'Usuario añadido correctamente!', [ + 'position' => 'top' + ]); + + $this->addUser = false; + $this->consulta_verUsuarios = Cuentas::with('historiales','servicio')->where('id', $this->id_cuentaVer)->first(); + + }else{ + $historial->delete(); + $this->alert('warning', 'El perfil ya se encuentra en uso!', [ + 'position' => 'top' + ]); + } + + } + + public function editar($tarifa){ + //dd($tarifa); + $this->editarTarifaRol=true; + $this->informacionTarifaRol = $tarifa; + + $this->roles_modTarifas = $tarifa['rol_id']; + $this->pantallas_modTarifas = $tarifa['pantallas']; + $this->precio_modTarifas = $tarifa['valor']; + $this->diasTarifa = $tarifa['dias']; + $this->estadoTarifa = $tarifa['estado']; + $this->servicio_modTarifas = $tarifa['servicio_id']; + } + + public function actualizarTarifaRol($id){ + //dd($id); + $validateData = $this->validate([ + 'roles_modTarifas'=> 'required', + 'pantallas_modTarifas' => 'required', + 'precio_modTarifas'=> 'required', + 'diasTarifa' => 'required', + 'estadoTarifa'=> 'required' + ]); + $consulta = Tarifas::find($id)->update([ + 'pantallas' => $this->pantallas_modTarifas, + 'dias' => $this->diasTarifa, + 'valor'=> $this->precio_modTarifas, + 'estado'=> $this->estadoTarifa, + 'rol_id' => $this->roles_modTarifas, + 'servicio_id' => $this->servicio_modTarifas + + ]); + $this->alert('success', 'Tarifa actualizada correctamente!', [ + 'position' => 'top' + ]); + + $this->editarTarifaRol = false; + + } +} diff --git a/app/Http/Livewire/ShowPromociones.php b/app/Http/Livewire/ShowPromociones.php new file mode 100644 index 0000000..39fc5ca --- /dev/null +++ b/app/Http/Livewire/ShowPromociones.php @@ -0,0 +1,674 @@ + 'required', + 'celular_comprarPromo' => 'required', + 'email_comprarPromo' => 'required', + 'cantidad_comprarPromo' => 'required', + ]; + + public function render() + { + $date = Carbon::now()->subDay(30); + $this->fecha= $date->format('Y-m-d'); + + $this->fechaActual = Carbon::now(); + $this->fechaActual = Carbon::parse($this->fechaActual); + $this->fechaHoy = Carbon::now(); + $this->msj = Configuracione::orderby('id','desc')->select('msj_compra','msj_wp','clave_1','clave_2','clave_3','clave_4','clave_5','clave_6','iptv')->first(); + + //$this->fechaHoy = $this->fechaHoy->format('d/m/Y'); + + if (empty($this->nombre_comprarPromo) && empty($this->email_comprarPromo)) { + $usuario_actual = Auth::user(); + $this-> nombre_comprarPromo = $usuario_actual->name; + $this-> email_comprarPromo = $usuario_actual->email; + $this-> celular_comprarPromo = $usuario_actual->celular; + //dd($this-> nombre_tarjetaPlan); + } + + + return view('livewire.show-promociones', [ + + 'categorias' => Categoria::get(), + 'tarifas' => Tarifas::with('servicio')->get(), + ]); + } + + public function verPromocion($id) + { + $consulta_verpromocion = Promociones::with('tarifas')->where('id', $id)->with([ + 'usuario_promos' => function ($query) { + $query->where('usuario_id', Auth::user()->id); + }, + 'tarifaPromo' => function ($query) { + $query->where('rol_id', Auth::user()->rol->id); + } + ])->first(); + //dd($consulta_verpromocion); + //$cuentas_creadas = Cuentas::whereDate('inicio','>=',$this->fecha)->where('servicio_id',$tarifas->servicio->id)->where('estado','!=','inactivo')->where('estado','!=','delete')->get(); + + $this->consulta = $consulta_verpromocion; + // $this->precioAntes = $consulta_verpromocion->tarifas->first()->valor; + if (!empty($precio= $consulta_verpromocion->usuario_promos->first())) { + $this->precioAhora = $precio->precio; + }else if(!empty($precio= $consulta_verpromocion->tarifaPromo->first())){ + $this->precioAhora = $precio->precio; + }else{ + $this->precioAhora = $consulta_verpromocion->precio; + } + + $this->imagen = $consulta_verpromocion->img_publicidad; + $this->fechaLimite = $consulta_verpromocion->fecha_limite; + $this->nombrePromo = $consulta_verpromocion->nombre; + $this->dias = $consulta_verpromocion->dias; + $this->descripcionPromo = $consulta_verpromocion->descripcion; + $this->fechaFinal = $this->fechaActual->addDay($this->dias); + $this->mensaje_servicio = $consulta_verpromocion->mensaje; + + $this->verPromo = true; + } + + public function comprarPromo($id) + { + $consulta_verpromocion = Promociones::with('tarifas')->where('id', $id)->first(); + + $this->consulta = $consulta_verpromocion; + //$this->precioAntes = $consulta_verpromocion->tarifas->first()->valor; + + $this->precioAhora = $consulta_verpromocion->precio; + $this->imagen = $consulta_verpromocion->img_publicidad; + $this->fechaLimite = $consulta_verpromocion->fecha_limite; + $this->nombrePromo = $consulta_verpromocion->nombre; + $this->dias = $consulta_verpromocion->dias; + + $this->descripcionPromo = $consulta_verpromocion->descripcion; + $this->fechaFinal = $this->fechaActual->addDay($this->dias); + $this->mensaje_servicio = $consulta_verpromocion->mensaje; + + + $this->modalComprarPromo = true; + } + + /* ---------------- Btn Comprar ---------------- */ + + + public function pagar() + { + + $this->validate(); + + $usuario_existe = User::firstWhere('email', $this->email_comprarPromo)->id ?? null; + + if (is_null($usuario_existe)) { + $usuario = new User; + $usuario->name = $this->nombre_comprarPromo; + $usuario->email = $this->email_comprarPromo; + $usuario->password = '123'; + $usuario->celular = $this->celular_comprarPromo; + $usuario->save(); + + $usuario_id = $usuario->id; + } else { + + $usuario_id = $usuario_existe; + } + + $historial = new Historiale(); + $historial->fecha_inicio = $this->fechaHoy; + $historial->fecha_final = $this->fechaFinal; + $historial->valor = $this->precioAhora *$this->cantidad_comprarPromo; + $historial->tipo_pago = 'manual'; + $historial->estado = 'pendiente'; + $historial->vendedor_id = Auth()->user()->id; + $historial->promocion_id = $this->consulta->id; + $historial->cliente_id = $usuario_id; + $historial->cantidad = $this->cantidad_comprarPromo; + $historial->nombre_cliente = $this->nombre_comprarPromo; + $historial->save(); + + for ($p = 0; $p < (int)$this->cantidad_comprarPromo; $p++) { + //dd($this->cantidad_comprarPromo); + $n=[]; + $r=0; + foreach ($this->consulta->tarifas as $tarifa) { + $r=$r+$tarifa->pantallas; + //dd($this->consulta->tarifas->count()); + $pantallas_tarifa = $tarifa->pantallas; + $servicio_id = $tarifa->servicio_id; + $pantalla_servicio = $tarifa->servicio->pantallas; + $pantalla_servicio_completa = $tarifa->servicio->completa; + + $faltante = $pantalla_servicio - $pantallas_tarifa; + + //dd($tarifa); + if ($pantalla_servicio_completa == $pantallas_tarifa) { + + $this->fecha_final_1 = $today = Carbon::now()->addDays($tarifa->dias-20); + $this->fecha_final_2 = $today = Carbon::now()->addDays($tarifa->dias+20); + + $cuenta = Cuentas::where('servicio_id',$servicio_id)->whereDate('inicio','>=',$this->fecha)->whereDate('vencimiento','>=',$this->fecha_final_1) + ->whereDate('vencimiento','<=',$this->fecha_final_2) + ->Orderby('created_at', 'ASC')->with('historiales')->withCount('historiales')->where('estado','pendiente')->having('historiales_count', '==', 0)->first(); + }else{ + $cuenta = Cuentas::where('servicio_id', $servicio_id)->whereDate('inicio','>=',$this->fecha)->Orderby('created_at', 'ASC')->with('historiales')->withCount('historiales')->where('estado', 'activo')->having('historiales_count', '<=', (int)$faltante)->first(); + } + + if (!is_null($cuenta)) { + $perfil = $cuenta->historiales_count; + for ($y = 0; $y < (int)$pantallas_tarifa; $y++) { + + $historial_cuenta = new Historial_cuenta(); + $historial_cuenta->cuenta_id = $cuenta->id; + $historial_cuenta->historial_id = $historial->id; + $historial_cuenta->perfil = (int)$perfil + (int)$y+1; + $historial_cuenta->save(); + if (!empty($historial_cuenta->id)) { + array_push($n,$historial_cuenta->id); + } + + } + + } else { + + $this->alert('warning', 'No hay cuentas disponibles de '.$tarifa->servicio->nombre, [ + 'position' => 'top' + ]); + } + $cuenta=null; + } + } + //dump($r, count($n)); + if ($r == count($n) ) { + + $descuento = Saldo::where('usuario_id', Auth::user()->id)->first(); + $saldo_anterior = $descuento->valor; + $nuevo_saldo = $saldo_anterior - ($this->precioAhora *$this->cantidad_comprarPromo); + $cobro = $descuento->update(['valor' => $nuevo_saldo]); + //dd($cobro); + if ($cobro) { + $historial->update(['estado' => 'activo']); + $this->modalComprarPromo = false; + $this->credenciales($historial); + + } else { + + $eliminar = Historial_cuenta::whereIn('id',$n)->delete(); + //dd($eliminar); + + $this->alert('warning', 'Error en el cobro, comuniquese con soporte!', [ + 'position' => 'top' + ]); + } + + $n=null; + }else{ + + $eliminar = Historial_cuenta::whereIn('id',$n)->delete(); + //dump($eliminar); + + $this->alert('warning', 'No hay promociones disponibles, comuniquese con soporte!', [ + 'position' => 'top' + ]); + $n=null; + } + + + } + + public function credenciales($historial) + { + + $this->cuentas = $historial; + + $this->credenciales = true; + + $encryptado = Crypt::encryptString($historial->id); + $enlace = '/credenciales?id=' . $encryptado; + + $user =$historial->cliente; + + $notificacion = [ + 'enlace' => $enlace, + 'fecha_final' => $historial->fecha_final, + 'cliente' => $historial->cliente->name, + 'servicio' => $historial->promocion->nombre, + 'tipo' => 'compra', + 'vendedor' => auth()->user()->username, + + ]; + + Notification::send($user, new compra($notificacion)); + $this->alert('success', 'Credenciales enviadas a su email!', [ + 'position' => 'top' + ]); + + $shortURLObject = ShortURL::destinationUrl('https://app.sirpremium.com.co'.$enlace)->make(); + $shortURL = $shortURLObject->default_short_url; + $message = $historial->promocion->nombre.'. Ver credenciales: '.$shortURL ; + $recipients= '+57'.$this->celular_comprarPromo; + + $this->sendMessage($message, $recipients); + + $this->cantidad_comprarPromo = 1; + } + + public function sendMessage($message, $recipients) +{ + + + $auth_basic = base64_encode('admin@jaguarws.ga:9u3xxXhHt8maeiOexg07pFKI0rpYazI0'); + + $curl = curl_init(); + + curl_setopt_array($curl, array( + CURLOPT_URL => "https://api.labsmobile.com/json/send", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "POST", + CURLOPT_POSTFIELDS => '{"message":"'.$message.'", "tpoa":"Sender","recipient":[{"msisdn":"'.$recipients.'"}]}', + CURLOPT_HTTPHEADER => array( + "Authorization: Basic ".$auth_basic, + "Cache-Control: no-cache", + "Content-Type: application/json" + ), + )); + + $response = curl_exec($curl); + $err = curl_error($curl); + + curl_close($curl); + + if ($err) { + + $this->alert('warning', 'Error enviando SMS!'.$err, [ + 'position' => 'top' + ]); + + } else { + + if (!empty(json_decode($response)->subid)) { + $this->alert('success', 'Credenciales enviadas por Email y SMS! '.json_decode($response)->subid, [ + 'position' => 'top' + ]); + }else{ + $this->alert('success', 'Credenciales enviadas por Email! '.json_decode($response)->code, [ + 'position' => 'top' + ]); + } + + } +} + + + + public function create_newCategoria() + { + if (!empty($this->categoria_photo)) { + $url_foto = $this->categoria_photo->store('photos'); + }else{ + $url_foto = ''; + } + + $categoria = new Categoria; + $categoria->nombre = $this->nombre_categoria; + $categoria->descripcion = $this->descripcion_categoria; + $categoria->imagen = $url_foto; + $categoria->save(); + + $this->newCategoria = false; + } + + public function add_tarifa() + { + $consulta= Tarifas::find($this->tarifa_id_promocion); + $promocion_tarifa = new Promocion_tarifa; + $promocion_tarifa->tarifa_id = $this->tarifa_id_promocion; + $promocion_tarifa->nombre = $consulta->servicio->nombre; + $promocion_tarifa->cantidad = $consulta->pantallas; + $promocion_tarifa->dias = $consulta->dias; + + if (is_null($this->list)) { + + $this->list = collect(); + } + + $this->list->add($promocion_tarifa); + } + + public function del_item($id) + { + $this->list->pull($id); + } + + public function guardar() + { + $this->validate([ + 'nombre_promocion' => 'required', + 'descripcion_promocion' => 'required', + 'valor_promocion' => 'required', + 'estado_promocion' => 'required', + 'fecha_limite_promocion' => 'required', + 'categoria_id_promocion' => 'required', + 'photo' => 'required', + 'list'=>'required', + ]); + + + if (!empty($this->photo)) { + + $nombre=Str::random(10); + + $img = img::make($this->photo)->orientate()->resize(1000, null, function($constraint){ + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + + $location = "photos/".$nombre.".webp"; + Storage::disk('local')->put($location, $img); + $url_foto = $location; + } else { + $url_foto = null; + } + + $nueva_promocion = new Promociones; + $nueva_promocion->nombre = $this->nombre_promocion; + $nueva_promocion->descripcion = $this->descripcion_promocion; + $nueva_promocion->precio = $this->valor_promocion; + $nueva_promocion->visible = $this->estado_promocion; + $nueva_promocion->fecha_limite = $this->fecha_limite_promocion; + $nueva_promocion->categoria_id = $this->categoria_id_promocion; + $nueva_promocion->img_publicidad = $url_foto; + $nueva_promocion->dias = 30; + $nueva_promocion->mensaje = $this->mensaje_servicio; + $nueva_promocion->save(); + + + foreach ($this->list as $item) { + $guardar_promotarifa = new Promocion_tarifa; + $guardar_promotarifa->promocion_id = $nueva_promocion->id; + $guardar_promotarifa->tarifa_id = $item['tarifa_id']; //falta + $guardar_promotarifa->save(); + } + + $this->newPromocion = false; + + $this->alert('success', 'Promocion creada correctamente!', [ + 'position' => 'top' + ]); + + $this->limpiarInputPromocion(); + } + + + + public function eliminar($id) + { + $this->eliminar_id = $id; + $this->alert('warning', '¿Eliminar promocion?', [ + 'position' => 'center', + 'timer' => '10000', + 'toast' => false, + 'text' => 'Esta seguro', + 'showConfirmButton' => true, + 'onConfirmed' => 'confirmed', + 'showDenyButton' => false, + 'onDenied' => '', + 'showCancelButton' => true, + 'onDismissed' => '', + 'cancelButtonText' => 'Salir', + 'confirmButtonText' => 'Si', + ]); + } + + public function getListeners() + { + return [ + 'confirmed' + ]; + } + + public function confirmed() + { + $consulta_promociones = Promociones::findOrFail($this->eliminar_id); + $nombre = $consulta_promociones->nombre; + + Promociones::where('id', $this->eliminar_id)->update([ + 'nombre' => $nombre . '-Delete', + 'visible' => 'false', + ]); + } + + + + /* ---------------- Editar Promocion ---------------- */ + + public function editarPromo($id) + { + $promocion = Promociones::where('id', $id)->first(); + + // $this->imagen_editarPromo= $promocion->img_publicidad; + $this->editar_promo_id = $promocion->id; + $this->valor_editarPromo = $promocion->precio; + $this->fecha_editarPromo = $promocion->fecha_limite; + $this->nombre_editarPromo = $promocion->nombre; + $this->descripcion_editarPromo = $promocion->descripcion; + $this->estado_editarPromo = $promocion->visible; + $this->categoria_id_editarPromo = $promocion->categoria_id; + $this->img_ver = $promocion->img_publicidad; + $this->mensaje_servicio = $promocion->mensaje; + + + $consultas = Promocion_tarifa::selectRaw('promocion_tarifas.id as id, servicios.nombre as nombre, tarifas.pantallas as pantallas ') + ->join('tarifas', 'tarifas.id', '=', 'promocion_tarifas.tarifa_id') + ->join('servicios', 'servicios.id', '=', 'tarifas.servicio_id') + ->where('promocion_tarifas.promocion_id',$this->editar_promo_id) + ->get(); + + $this->list2 = collect(); + + foreach ($consultas as $consulta) { + $promocionTarifa = new Promocion_tarifa; + + $promocionTarifa->tarifa_id = $this->tarifa_id_promocion; + $promocionTarifa->nombre = $consulta->nombre ; + $promocionTarifa->cantidad = $consulta->pantallas; + $promocionTarifa->identificador = $consulta->id; + $promocionTarifa->dias = $consulta->dias; + + $this->list2->add($promocionTarifa); + } + + + + $this->editarPromo = true; + } + public function editarPromoUpdate() + { + + if (!empty($this->photo)) { + $nombre=Str::random(10); + $img = img::make($this->photo)->orientate()->resize(1000, null, function($constraint){ + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + $location = "photos/".$nombre.".webp"; + Storage::disk('local')->put($location, $img); + $url_foto = $location; + } else { + $url_foto = $this->img_ver; + } + + + Promociones::where('id', $this->editar_promo_id)->update([ + 'precio' => $this->valor_editarPromo, + 'fecha_limite' => $this->fecha_editarPromo, + 'visible' => $this->estado_editarPromo, + 'categoria_id' => $this->categoria_id_editarPromo, + 'nombre' => $this->nombre_editarPromo, + 'descripcion' => $this->descripcion_editarPromo, + 'img_publicidad' => $url_foto, + 'mensaje' => $this->mensaje_servicio, + ]); + + $this->editarPromo = false; + + $this->list2 = null; + $this->limpiarInputPromocion(); + } + public function add_tarifa_list2() + { + $add = new Promocion_tarifa; + $add->promocion_id = $this->editar_promo_id; + $add->tarifa_id = $this->tarifa_id_promocion; + $add->save(); + + $consultas = Promocion_tarifa::selectRaw('promocion_tarifas.id as id, servicios.nombre as nombre, tarifas.pantallas as pantallas ') + ->join('tarifas', 'tarifas.id', '=', 'promocion_tarifas.tarifa_id') + ->join('servicios', 'servicios.id', '=', 'tarifas.servicio_id') + ->where('promocion_tarifas.promocion_id',$this->editar_promo_id) + ->get(); + + $this->list2 = collect(); + + foreach ($consultas as $consulta) { + $promocionTarifa = new Promocion_tarifa; + + $promocionTarifa->tarifa_id = $this->tarifa_id_promocion; + $promocionTarifa->nombre = $consulta->nombre ; + $promocionTarifa->cantidad = $consulta->pantallas; + $promocionTarifa->identificador = $consulta->id; + + $this->list2->add($promocionTarifa); + } + + + } + public function del_item_list2($id,$n) + { + Promocion_tarifa::where('id',$id)->delete(); + + $this->list2->pull($n); + + $this->alert('success', 'Tarifa de usuario eliminada correctamente!', [ + 'position' => 'top' + ]); + } + + public function limpiarInputPromocion() + { + $this->nombre_promocion = ''; + $this->descripcion_promocion = ''; + $this->valor_promocion = ''; + $this->estado_promocion = null; + $this->fecha_limite_promocion = null; + $this->categoria_id_promocion = null; + $this->newCategoria = false; + $this->newPromocion = false; + $this->photo = null; + $this->mensaje_servicio=null; + + $this->list = null; + } +} diff --git a/app/Http/Livewire/ShowRecarga.php b/app/Http/Livewire/ShowRecarga.php new file mode 100644 index 0000000..226e88b --- /dev/null +++ b/app/Http/Livewire/ShowRecarga.php @@ -0,0 +1,199 @@ +fechaActual = date('d/m/Y'); + if (auth()->user()->rol->nombre == "super" || auth()->user()->rol->nombre == "administrador" || auth()->user()->rol->nombre == "distribuidor") { + $this->cobrar = true; + $this->monto = "500"; + } + $consulta_historial = recarga::where('usuario_id',Auth::user()->id)->orderBy('id','DESC')->limit(20)->get(); + + $consulta_saldo = User::where('id',Auth::user()->id)->with('saldo')->first(); + + return view('livewire.show-recarga',[ + 'user' => $consulta_saldo, + 'historial_recargas' => $consulta_historial + ]); + } + + + public function pagar(){ + + //auth2.0 + $client_id='5ml5b35ijjk13f4q99utnsm97e'; + $client_secret='1b3703aq0o6t1rrfti13q7uf7f42glik3gsf81s0d783shblmt8l'; + $api_key='aHLdWJTpuM9YYnV9ruq4V6bH5esa8wUN69E1qmrM'; + $endpoint="https://oauth.sandbox.nequi.com/oauth2/token?grant_type=client_credentials"; + $date= Carbon::now()->format('Y-m-d\TH:i:s.z\Z'); + //dd($date); + + //dd($this->numero_nequi); + //push + $RestEndpoint = '/payments/v2/-services-paymentservice-unregisteredpayment'; + + try{ + $authorization = 'Basic ' . base64_encode($client_id . ':' . $client_secret); + $headers = array( + 'Content-Type' => 'application/x-www-form-urlencoded', + 'Accept' => 'application/json', + 'Authorization' => $authorization + ); + + //Solicitud + $request = Requests::post($endpoint, $headers); + + + if (isset($request->status_code) && $request->status_code == 200 && isset($request->body) && !empty($request->body)) + { + $response = json_decode($request->body); + + $tokenExpiresAt = new DateTime(); + $tokenExpiresAt->add(new DateInterval('PT' . $response->expires_in . 'S')); + $token = $response->access_token; + $tokenType = $response->token_type; + } else { + + throw new Exception('Unable to connect to Nequi, please check the information sent.'); + } + }catch(Exception $e){ + throw $e; + } + + + // pago + $headers1 = array( + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + 'Authorization' => $token, + 'x-api-key' => $api_key + ); + + $options1 = array( + 'timeout' => 30 + + ); + $endpoint1 = 'https://api.sandbox.nequi.com' . $RestEndpoint; + + $body1 = json_encode(array( + 'RequestMessage' => array( + 'RequestHeader' => array( + 'Channel' => 'PNP04-C001', + 'RequestDate' => $date, + 'MessageID' => '1234567890', + 'ClientID' => $client_id, + 'Destination' => array( + 'ServiceName' => 'PaymentsService', + 'ServiceOperation' => 'unregisteredPayment', + 'ServiceRegion' => 'C001', + 'ServiceVersion' => '1.2.0' + ) + ), + 'RequestBody' => array( + 'any' => array( + 'unregisteredPaymentRQ' => array( + 'phoneNumber'=> $this->numero_nequi, + 'code' => 'NIT_1', + 'value' => $this->valor_recarga, + 'reference1' => 'Recarga SirPremium', + + ) + ) + ) + ) +)); + +$request1 = Requests::post($endpoint1, $headers1, $body1, $options1); + + +if (isset($request1->status_code) && $request1->status_code == 200 && isset($request1->body) && !empty($request1->body) +) { + + + try { + $response1 = json_decode($request1->body); + //dd($response1 = json_decode($request1->body)); + $status = $response1->ResponseMessage->ResponseHeader->Status; + $statusCode = isset($status) ? $status->StatusCode : ''; + $statusDesc = isset($status) ? $status->StatusDesc : ''; + + if ($statusCode == 0) { + + $this->alert('success', 'Solicitud de pago enviada', [ + 'position' => 'top' + ]); + + $payment = $response1->ResponseMessage->ResponseBody->any->unregisteredPaymentRS; + $trnId = isset($payment) ? trim($payment->transactionId) : ''; + + if ( !empty($trnId)) { + + $recarga = new recarga; + $recarga-> payment_type_id= ''; + $recarga-> payment_method_id= ''; + $recarga-> status= $statusCode; + $recarga-> usuario_id= Auth::user()->id; + $recarga-> saldo_id= Auth::user()->saldo->id; + $recarga-> monto= $this->valor_recarga; + $recarga->save(); + + $consulta_saldo = Saldo::where('usuario_id',Auth::user()->id)->first(); + $nuevo_saldo = $consulta_saldo->valor + $this->valor_recarga ; + $consulta_saldo->update(['valor'=> $nuevo_saldo]); + $this->alert('success', 'Saldo actualizado', [ + 'position' => 'top' + ]); + + $this->nequi = false; + } + $this->alert('success', $trnId, [ + 'position' => 'top' + ]); + + } else { + $this->alert('warning', $statusCode . ' = ' . $statusDesc, [ + 'position' => 'top' + ]); + + } + } catch (Exception $e) { + throw $e; + } +} else { + + $this->alert('wanrning','Unable to connect to Nequi, please check the information sent', [ + 'position' => 'top' + ]); + +} + + } + +} diff --git a/app/Http/Livewire/ShowRecargas.php b/app/Http/Livewire/ShowRecargas.php new file mode 100644 index 0000000..4706fa0 --- /dev/null +++ b/app/Http/Livewire/ShowRecargas.php @@ -0,0 +1,37 @@ +referencia)){ + $this->referencia = Str::random(20); + + $this->monto = (((($request->recharge)*0.03) + '700' )* 0.19)+ ((($request->recharge)*0.03) + '700' ) + $request->recharge; + + $recargas = new recarga; + $recargas->monto = $this->monto; + $recargas->reference = $this->referencia; + $recargas-> status = 'Procesando MP'; + $recargas-> usuario_id = auth()->user()->id; + $recargas-> saldo_id= auth()->user()->saldo->id; + $recargas-> valor_recarga = $request->recharge; + $recargas->save(); + } + + + return view('livewire.show-recargas'); + } +} diff --git a/app/Http/Livewire/ShowReportes.php b/app/Http/Livewire/ShowReportes.php new file mode 100644 index 0000000..3d2d0fd --- /dev/null +++ b/app/Http/Livewire/ShowReportes.php @@ -0,0 +1,74 @@ +fechaActual = Carbon::now(); + // $this->fechaActual = Carbon::parse($this->fechaActual); + if(!empty($this->usuario)){ + $id_user = $this->usuario; + + $consulta_suma = Historiale::where('vendedor_id', $id_user)->sum('valor'); + $consulta_cantidad = Historiale::where('vendedor_id', $id_user)->count(); + + if (!empty($this->mes)) { + + $consulta_suma = Historiale::where('vendedor_id', $id_user)->whereMonth('created_at',$this->mes)->sum('valor'); + $consulta_cantidad = Historiale::where('vendedor_id', $id_user)->whereMonth('created_at',$this->mes)->count(); + } + + + }elseif(empty($this->usuario)){ + if(auth()->user()->rol->nombre == "super" || auth()->user()->rol->nombre == "administrador"){ + $consulta_suma = Historiale::sum('valor'); + $consulta_cantidad = Historiale::count(); + }else{ + + $consulta_suma = Historiale::where('vendedor_id', auth()->user()->id)->whereMonth('created_at',$this->mes)->sum('valor'); + $consulta_cantidad = Historiale::where('vendedor_id', auth()->user()->id)->whereMonth('created_at',$this->mes)->count(); + + } + + + if (!empty($this->mes)) { + + $consulta_suma = Historiale::whereMonth('created_at',$this->mes)->sum('valor'); + $consulta_cantidad = Historiale::whereMonth('created_at',$this->mes)->count(); + } + + } + + + + + $distribuidores = Role::where('nombre','distribuidor')->with('usuarios')->first(); + + $historial = Historiale::where('cliente_id', auth()->user()->id)->orderBy('id','DESC')->paginate(10); + //dd($historial); + + return view('livewire.show-reportes',[ + 'suma' => $consulta_suma, + 'cantidad' => $consulta_cantidad, + 'roles' => $distribuidores, + 'historiales' => $historial, + ]); + } +} diff --git a/app/Http/Livewire/ShowRoles.php b/app/Http/Livewire/ShowRoles.php new file mode 100644 index 0000000..dc59191 --- /dev/null +++ b/app/Http/Livewire/ShowRoles.php @@ -0,0 +1,102 @@ +get(); + //dd($consulta_roles); + return view('livewire.show-roles',['roles'=>$consulta_roles]); + } + + public function editar($id){ + $this->nombre = Role::find($id)->nombre; + $this->ro = $id; + $this->editar = true; + } + + public function crear(){ + if (!empty($this->nombre)) { + $crear_rol = new Role; + $crear_rol->nombre = $this->nombre; + $crear_rol->save(); + + $this->alert('success', 'Rol creado correctamente!', [ + 'position' => 'top' + ]); + $this->add = false; + }else{ + $this->alert('warning', 'Campo Nombre sin diligenciar!', [ + 'position' => 'top' + ]); + } + + } + + public function eliminar($id) + { + $this->ro = $id; + $this->alert('warning', '¿Eliminar rol?', [ + 'position' => 'center', + 'timer' => '10000', + 'toast' => false, + 'text' => 'Esta seguro', + 'showConfirmButton' => true, + 'onConfirmed' => 'confirmed', + 'showDenyButton' => false, + 'onDenied' => '', + 'showCancelButton' => true, + 'onDismissed' => '', + 'cancelButtonText' => 'Salir', + 'confirmButtonText' => 'Si', + ]); + } + + public function getListeners() + { + return [ + 'confirmed' + ]; + } + + public function confirmed() + { + $eliminar= Role::find($this->ro)->delete(); + $this->alert('success', 'Rol eliminado!', [ + 'position' => 'top' + ]); + } + + + public function limpiarInputAdd(){ + $this->editar= false; + $this->add = false; + + } + + public function actualizar(){ + $eliminar= Role::find($this->ro); + //dd($eliminar); + $eliminar->update(['nombre'=>$this->nombre]); + + $this->alert('success', 'Rol actualizado!', [ + 'position' => 'top' + ]); + + $this->editar=false; + + } +} diff --git a/app/Http/Livewire/ShowServicio.php b/app/Http/Livewire/ShowServicio.php new file mode 100644 index 0000000..b33e614 --- /dev/null +++ b/app/Http/Livewire/ShowServicio.php @@ -0,0 +1,265 @@ + 'required', + 'estado_servicio' => 'required', + 'pantallas' => 'required', + 'completa' => 'required', + + ]; + + public function render() + { + + if ($this->tiempo) { + $this->pantallas = 1; + $this->completa = 1; + } + + $consulta = Servicio::Orderby('estado')->get(); + return view('livewire.show-servicio', [ + 'servicios' => $consulta, + ]); + } + + public function createServicio() + { + $this->validate(); + + if (!empty($this->photo)) { + $nombre = Str::random(10); + $img = img::make($this->photo)->orientate()->resize(1000, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + $location = "photos/" . $nombre . ".webp"; + Storage::disk('local')->put($location, $img); + $url_foto = $location; + } else { + $url_foto = $this->img; + } + if (!empty($this->photo_inicio)) { + $nombre_inicio = Str::random(10); + $img_inicio = img::make($this->photo_inicio)->orientate()->resize(1000, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + + $location_inicio = "photos/" . $nombre_inicio . ".webp"; + Storage::disk('local')->put($location_inicio, $img_inicio); + $url_foto_inicio = $location_inicio; + + } else { + $url_foto_inicio = null; + } + + + $servicio = new Servicio; + $servicio->nombre = $this->nombre_servicio; + $servicio->descripcion = $this->descripcion_servicio; + $servicio->estado = $this->estado_servicio; + $servicio->color_fondo = $this->color_servicio; + $servicio->pantallas = $this->pantallas; + $servicio->img = $url_foto; + $servicio->img_inicio = $url_foto_inicio; + $servicio->mensaje = $this->mensaje_servicio; + $servicio->completa = $this->completa; + $servicio->por_tiempo = $this->tiempo; + $servicio->ver_perfiles = $this->perfiles; + $servicio->perfiles = $this->password; + $servicio->ver_url = $this->ver_url; + $servicio->url = $this->url; + $servicio->renovacion = $this->renovacion; + $servicio->save(); + + $this->alert('success', 'Servicio creado correctamente!', [ + 'position' => 'top' + ]); + + $this->serviciosModal = false; + } + + + public function editar($id) + { + + $consulta_servicios = Servicio::FindOrFail($id); + + $this->servicio_id = $consulta_servicios->id; + $this->nombre_servicio = $consulta_servicios->nombre; + $this->descripcion_servicio = $consulta_servicios->descripcion; + $this->estado_servicio = $consulta_servicios->estado; + $this->color_servicio = $consulta_servicios->color_fondo; + $this->pantallas = $consulta_servicios->pantallas; + $this->img = $consulta_servicios->img; + $this->img_inicio = $consulta_servicios->img_inicio; + $this->mensaje_servicio = $consulta_servicios->mensaje; + $this->completa = $consulta_servicios->completa; + $this->tiempo = $consulta_servicios->por_tiempo == 1 ? true : false; + $this->perfiles = $consulta_servicios->ver_perfiles; + $this->ver_url = $consulta_servicios->ver_url; + $this->url = $consulta_servicios->url; + $this->renovacion = $consulta_servicios->renovacion == 1 ? true : false; + } + public function guardar() + { + if (!empty($this->photo)) { + + $nombre = Str::random(10); + + $img = img::make($this->photo)->orientate()->resize(1000, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + + $location = "photos/" . $nombre . ".webp"; + + Storage::disk('local')->put($location, $img); + + $url_foto = $location; + + } else { + + $url_foto = $this->img; + + } + + if (!empty($this->photo_inicio)) { + + $nombre_inicio = Str::random(10); + + $img_inicio = img::make($this->photo_inicio)->orientate()->resize(1000, null, function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + })->encode('webp'); + + $location_inicio = "photos/" . $nombre_inicio . ".webp"; + + Storage::disk('local')->put($location_inicio, $img_inicio); + + $url_foto_inicio = $location_inicio; + + } else { + $url_foto_inicio = $this->img_inicio; + } + + Servicio::where('id', $this->servicio_id)->update([ + 'nombre' => $this->nombre_servicio, + 'descripcion' => $this->descripcion_servicio, + 'estado' => $this->estado_servicio, + 'color_fondo' => $this->color_servicio, + 'pantallas' => $this->pantallas, + 'img' => $url_foto, + 'img_inicio' => $url_foto_inicio, + 'mensaje' => $this->mensaje_servicio, + 'completa' => $this->completa, + 'por_tiempo' => $this->tiempo == 1 ? true : false, + 'ver_perfiles' => $this->perfiles, + 'perfiles' => $this->password, + 'ver_url' => $this->ver_url, + 'url' => $this->url, + 'renovacion' => $this->renovacion == 1 ? true : false, + ]); + + $this->serviciosEditar = false; + $this->limpiarInputServiciosModal(); + } + + + public function desactivar($id) + { + Servicio::where('id', $id)->update([ + 'estado' => 'inactivo', + ]); + } + + public function activar($id) + { + Servicio::where('id', $id)->update([ + 'estado' => 'activo', + ]); + } + public function eliminar($id) + { + $this->delete_servicio = $id; + $this->alert('warning', '¿Eliminar servicio?', [ + 'position' => 'center', + 'timer' => '10000', + 'toast' => false, + 'text' => 'Esta seguro', + 'showConfirmButton' => true, + 'onConfirmed' => 'confirmed', + 'showDenyButton' => false, + 'onDenied' => '', + 'showCancelButton' => true, + 'onDismissed' => '', + 'cancelButtonText' => 'Salir', + 'confirmButtonText' => 'Si', + ]); + } + + public function getListeners() + { + return [ + 'confirmed' + ]; + } + + public function confirmed() + { + Servicio::where('id', $this->delete_servicio)->delete(); + } + + public function limpiarInputServiciosModal() + { + $this->nombre_servicio = ''; + $this->descripcion_servicio = ''; + $this->estado_servicio = null; + $this->color_servicio = null; + $this->pantallas = null; + $this->photo = null; + $this->photo_inicio = null; + $this->mensaje_servicio = null; + $this->completa = null; + $this->tiempo = null; + $this->renovacion = null; + } +} \ No newline at end of file diff --git a/app/Http/Livewire/ShowServicios.php b/app/Http/Livewire/ShowServicios.php new file mode 100644 index 0000000..a2ab656 --- /dev/null +++ b/app/Http/Livewire/ShowServicios.php @@ -0,0 +1,434 @@ + 'required', + 'cantidad_tarjetaPlan' => 'required', + 'email_tarjetaPlan' => 'required', + 'celular_tarjetaPlan' => 'required', + ]; + + public function render() + { + $this->fechaHoy = Carbon::now(); + $this->fechaActual = Carbon::parse($this->fechaHoy); + $date = $this->fechaHoy->subDay(30); + $this->fecha = $date->format('Y-m-d'); + + $this->usuario_actual = Auth::user(); + + if (empty($this->nombre_tarjetaPlan) && empty($this->email_tarjetaPlan)) { + + $this->nombre_tarjetaPlan = $this->usuario_actual->name; + $this->email_tarjetaPlan = $this->usuario_actual->email; + $this->celular_tarjetaPlan = $this->usuario_actual->celular; + + } + if (!empty($this->tarifa_id)) { + $this->paquetesDisponibles(); + } + + + $this->msj = Configuracione::orderby('id', 'desc')->select('msj_compra', 'msj_wp', 'clave_1', 'clave_2', 'clave_3', 'clave_4', 'clave_5', 'clave_6', 'iptv')->first(); + + $consulta_servicios = Servicio::where('estado', 'activo') + ->with([ + 'tarifas' => function ($query) { + $query->where('rol_id', $this->usuario_actual->rol->id) + ->with([ + 'usuario_tarifas' => function ($query) { + $query->where('usuario_id', $this->usuario_actual->id); + } + ]); + } + ]) + ->get(); + + + return view('livewire.show-servicios', [ + 'servicios' => $consulta_servicios, + ]); + } + + public function cargartarjetaPlan($id) + { + $this->tarifas = Tarifas::with('servicio') + ->where('id', $id) + ->first(); + $this->servicio_t = $this->tarifas->servicio; + + + //Servicio por pantallas + $this->cuentas_creadas = Cuentas::whereDate('inicio', '>=', $this->fecha) + ->where('servicio_id', $this->servicio_t->id) + ->where('estado', 'activo') + ->get(); + + + $this->cuentas_tomadas = Historial_cuenta::whereIn('cuenta_id', $this->cuentas_creadas + ->pluck('id')) + ->count(); + + + + + //$prueba1 = $this->cuentas_creadas->count() * $this->servicio_t->pantallas ; + //$prueba2 = $this->cuentas_tomadas ; + + //dd($prueba1, $prueba2 , $prueba1-$prueba2); + + $this->servicio_id = $this->servicio_t->id; + $this->tarifa_id = $id; + $this->servicio_tarjetaPlan = $this->servicio_t->nombre; + $this->tiempo_tarjetaPlan = $this->servicio_t->por_tiempo; + $this->pantallas_tarjetaPlan = $this->tarifas->pantallas; + $this->dias_tarjetaPlan = $this->tarifas->dias; + $this->fecha_final_1 = $today = Carbon::now(); + $this->fecha_final_2 = $today = Carbon::now(); + $this->mensaje = $this->servicio_t->mensaje; + + //Servicio por cuenta completa + $this->cuentas_completas = Cuentas::whereDate('inicio', '>=', $this->fecha) + ->whereDate('vencimiento', '>=', $this->fecha_final_1->addDays($this->tarifas->dias - 20)) + ->whereDate('vencimiento', '<=', $this->fecha_final_2->addDays($this->tarifas->dias + 20)) + ->where('servicio_id', $this->tarifas->servicio->id) + ->where('estado', 'pendiente') + ->get(); + $this->cuentas_completas_tomadas = Historial_cuenta::whereIn('cuenta_id', $this->cuentas_completas->pluck('id')) + ->count(); + $usuario_tarifa = Usuario_tarifa::where('usuario_id', auth()->user()->id) + ->where('tarifa_id', $id) + ->first(); + + $this->valor_tarjetaPlan = ($usuario_tarifa) ? $usuario_tarifa->precio : $this->tarifas->valor; + + $this->colorFondo_tarjetaPlan = $this->servicio_t->color_fondo; + $this->fechaFinal = $this->fechaActual->addDay($this->tarifas->dias); + + + //Cantidad de paquetes disponibles + $this->paquetesDisponibles(); + + + + $this->tarjetaPlan = true; + + + } + public function paquetesDisponibles() + { + + if ($this->tarifas->pantallas == $this->servicio_t->completa) { + + $this->disponibles = (($this->cuentas_completas->count() * $this->servicio_t->completa) - $this->cuentas_completas_tomadas) / $this->tarifas->pantallas; + $restantes_completas = $this->cuentas_completas->count() - ($this->cuentas_completas_tomadas / $this->servicio_t->completa); + + if ($restantes_completas <= 10) { + //$this->notificacionPocas($this->servicio_t,$restantes_completas); + } + + } else { + $cantidad_solicitada = (int) $this->cantidad_tarjetaPlan * (int) $this->pantallas_tarjetaPlan; + + if ($this->servicio_t->pantallas >= $cantidad_solicitada) { + $this->disponibles = (($this->cuentas_creadas->count() * $this->servicio_t->pantallas) - $this->cuentas_tomadas) / $this->tarifas->pantallas; + $restantes = $this->cuentas_creadas->count() - ($this->cuentas_tomadas / $this->servicio_t->pantallas); + } else { + $this->disponibles = ($this->cuentas_creadas->count() - $this->cuentas_tomadas); + + $restantes = $this->cuentas_creadas->count() - ($this->cuentas_tomadas); + } + + + if ($restantes <= 10) { + //$this->notificacionPocas($this->servicio_t,$restantes); + } + + } + } + + public function notificacionPocas($servicio, $restantes) + { + $roles = Role::where('nombre', 'super')->with('usuarios')->first(); + $user = $roles->usuarios; + + $notificacion = [ + 'servicio' => $servicio->nombre, + 'cantidad' => $restantes, + 'tipo' => 'cuentas normales', + ]; + + Notification::send($user, (new licencias($notificacion))); + + } + + /* ---------------- Btn Comprar ---------------- */ + public function comprar() + { + $this->validate(); + + $cantidad_solicitada = (int) $this->cantidad_tarjetaPlan * (int) $this->pantallas_tarjetaPlan; + $total_valor = (int) $this->valor_tarjetaPlan * (int) $this->cantidad_tarjetaPlan; + + $usuario_existe = User::firstWhere('email', $this->email_tarjetaPlan)->id ?? null; + $usuario_id = $usuario_existe; + + if (is_null($usuario_existe)) { + $usuario = new User; + $usuario->name = $this->nombre_tarjetaPlan; + $usuario->email = $this->email_tarjetaPlan; + $usuario->password = '123'; + $usuario->celular = '+57' . $this->celular_tarjetaPlan; + $usuario->save(); + + $usuario_id = $usuario->id; + } + + //dd($this->fechaFinal); + $historial = new Historiale; + $historial->fecha_inicio = Carbon::now(); + $historial->fecha_final = $this->fechaFinal; + $historial->valor = $total_valor; + $historial->tipo_pago = 'manual'; + $historial->estado = 'pendiente'; + $historial->vendedor_id = Auth()->user()->id; + $historial->tarifa_id = $this->tarifa_id; + $historial->cliente_id = $usuario_id; + $historial->cantidad = $this->cantidad_tarjetaPlan; + $historial->nombre_cliente = $this->nombre_tarjetaPlan; + $historial->save(); + + $pantallas = Tarifas::where('id', $this->tarifa_id)->with('servicio')->first(); + $servicio_id = $pantallas->servicio_id; + $pantalla_servicio_completa = $pantallas->servicio->completa; + $pantalla_servicio = $pantallas->servicio->pantallas; + + $pantallas = $pantallas->pantallas ?? null; + + if ((int) $pantalla_servicio >= (int) $cantidad_solicitada && (int) $pantalla_servicio_completa != (int) $this->pantallas_tarjetaPlan) { + $suma = $pantalla_servicio - $cantidad_solicitada; + $cantidad_necesaria = 1; + $cuenta = Cuentas::where('servicio_id', $this->servicio_id)->whereDate('inicio', '>=', $this->fecha)->Orderby('created_at', 'ASC')->withCount('historiales')->where('estado', 'activo')->having('historiales_count', '<=', $suma)->get(); + + } elseif ((int) $pantalla_servicio_completa == (int) $this->pantallas_tarjetaPlan) { + //Cuentas completas + $cantidad_necesaria = $this->cantidad_tarjetaPlan; + $cuenta = Cuentas::where('servicio_id', $this->servicio_id)->whereDate('inicio', '>=', $this->fecha)->whereDate('vencimiento', '>=', $this->fecha_final_1) + ->whereDate('vencimiento', '<=', $this->fecha_final_2) + ->Orderby('created_at', 'ASC')->withCount('historiales')->where('estado', 'pendiente')->having('historiales_count', '==', 0)->get(); + } elseif ((int) $pantalla_servicio < (int) $cantidad_solicitada) { + $suma2 = $pantalla_servicio - $pantallas; + $cantidad_necesaria = $this->cantidad_tarjetaPlan; + $cuenta = Cuentas::where('servicio_id', $this->servicio_id)->whereDate('inicio', '>=', $this->fecha)->Orderby('created_at', 'ASC')->withCount('historiales')->where('estado', 'activo')->having('historiales_count', '<=', $suma2)->get(); + + } else { + $cuenta = null; + $cantidad_necesaria = null; + } + + for ($h = 0; $h < (int) $cantidad_necesaria; $h++) { + + if (!empty($cuenta)) { + $perfil = $cuenta[$h]->historiales_count; + + for ($y = 0; $y < (int) $pantallas; $y++) { + + $historial_cuenta = new Historial_cuenta; + $historial_cuenta->cuenta_id = $cuenta[$h]->id; + $historial_cuenta->historial_id = $historial->id; + $historial_cuenta->perfil = (int) $perfil + (int) $y + 1; + $historial_cuenta->save(); + + } + + } else { + $this->alert('warning', 'No hay cuentas disponibles!', [ + 'position' => 'top' + ]); + } + + } + $descuento = Saldo::where('usuario_id', Auth::user()->id)->first(); + + $saldo_anterior = $descuento->valor; + //dd($saldo_anterior); + $nuevo_saldo = $saldo_anterior - $total_valor; + $cobro = $descuento->update(['valor' => $nuevo_saldo]); + if ($cobro) { + $historial->update(['estado' => 'activo']); + $this->credenciales($historial); + } else { + $this->alert('warning', 'Error en el cobro, comuniquese con soporte!', [ + 'position' => 'top' + ]); + } + + + $this->tarjetaPlan = false; + $this->cantidad_tarjetaPlan = 1; + + } + + public function credenciales($historial) + { + + $this->cuentas = $historial; + + $this->credenciales = true; + + $encryptado = Crypt::encryptString($historial->id); + $enlace = '/credenciales?id=' . $encryptado; + + + $user = $historial->cliente; + + $notificacion = [ + 'enlace' => $enlace, + 'fecha_final' => $historial->fecha_final, + 'cliente' => $historial->cliente->name, + 'servicio' => $historial->tarifa->servicio->nombre . '-' . $historial->tarifa->pantallas . 'pantallas', + 'tipo' => 'compra', + 'vendedor' => auth()->user()->username, + + ]; + + Notification::send($user, (new compra($notificacion))); + + + $this->alert('success', 'Credenciales enviadas a su email!', [ + 'position' => 'top' + ]); + + $shortURLObject = ShortURL::destinationUrl('https://app.sirpremium.com.co' . $enlace)->make(); + $shortURL = $shortURLObject->default_short_url; + $message = $historial->tarifa->servicio->nombre . '-' . $historial->tarifa->pantallas . 'P. Ver credenciales: ' . $shortURL; + $recipients = '+57' . $this->celular_tarjetaPlan; + + $this->sendMessage($message, $recipients); + + } + + public function sendMessage($message, $recipients) + { + + $auth_basic = base64_encode('admin@jaguarws.ga:9u3xxXhHt8maeiOexg07pFKI0rpYazI0'); + + $curl = curl_init(); + + curl_setopt_array($curl, array( + CURLOPT_URL => "https://api.labsmobile.com/json/send", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "POST", + CURLOPT_POSTFIELDS => '{"message":"' . $message . '", "tpoa":"Sender","recipient":[{"msisdn":"' . $recipients . '"}]}', + CURLOPT_HTTPHEADER => array( + "Authorization: Basic " . $auth_basic, + "Cache-Control: no-cache", + "Content-Type: application/json" + ), + ) + ); + + $response = curl_exec($curl); + $err = curl_error($curl); + + curl_close($curl); + + if ($err) { + + $this->alert('warning', 'Error enviando SMS!' . $err, [ + 'position' => 'top' + ]); + + } else { + if (!empty(json_decode($response)->subid)) { + $this->alert('success', 'Credenciales enviadas por Email y SMS! ' . json_decode($response)->subid, [ + 'position' => 'top' + ]); + } else { + $this->alert('success', 'Credenciales enviadas por Email! ' . json_decode($response)->code, [ + 'position' => 'top' + ]); + } + + } + } + + public function consultaTarifa($servicio1) + { + + $this->servicio = $servicio1; + $this->verServ = false; + } + +} \ No newline at end of file diff --git a/app/Http/Livewire/ShowSlider.php b/app/Http/Livewire/ShowSlider.php new file mode 100644 index 0000000..25e67d9 --- /dev/null +++ b/app/Http/Livewire/ShowSlider.php @@ -0,0 +1,13 @@ +configuracion = Configuracione::orderby('id','desc')->first(); + + $consulta_ventas = User::with(['historiales_venta' => function ($query) { + $query->whereMonth('fecha_inicio', date('m')); + }]) + ->withCount(['historiales_venta' => function ($query) { + $query->whereMonth('fecha_inicio', date('m')); + }]) + ->orderBy('historiales_venta_count', 'desc') + ->limit(10) + ->get(); + + + //dd($consulta_ventas); + return view('livewire.show-top',[ + 'usuarios' => $consulta_ventas, + ]); + } +} diff --git a/app/Http/Livewire/ShowUsuarios.php b/app/Http/Livewire/ShowUsuarios.php new file mode 100644 index 0000000..f631308 --- /dev/null +++ b/app/Http/Livewire/ShowUsuarios.php @@ -0,0 +1,505 @@ + 'required', + 'email' => 'required', + 'password' => 'required', + 'rol' => 'required', + ]; + + public function render() + { + $consulta_tarifas = TarifaPromo::take(1); + + $consulta_usuarios = User::where('name', 'LIKE', '%' . $this->buscar . '%')->orWhere('email', 'LIKE', '%' . $this->buscar . '%')->with('rol', 'saldo')->orderBy('id','DESC')->withCount('historiales_venta')->paginate(15); + + if (!empty($this->buscar_servicio)) { + $this->consulta_tarifas = Tarifas::where('rol_id', $this->rol_usuario)->with([ + 'servicio' => function ($query) { + $query->Where('nombre', 'LIKE', '%' . $this->buscar_servicio . '%'); } + ])->get(); + + } + + if (!empty($this->buscar_promo)) { + $this->consulta_promo = Promociones::where('visible', '!=', 'false')->where('nombre', 'like', '%' . $this->buscar_promo . '%')->get(); + } + + if ($this->gestionPromo == true) { + $this->consulta_usuarioPromo = Usuario_promo::where('usuario_id', $this->usuarioGestion_id)->with('usuario', 'promocion')->get(); + } + if (!empty($this->servicio_modTarifas)) { + $consulta_tarifas = TarifaPromo::with('rol')->where('promocion_id', $this->servicio_modTarifas)->get(); + } + + $this->roles = Role::get(); + + return view('livewire.show-usuarios', [ + 'usuarios' => $consulta_usuarios, + 'tarifas' => $consulta_tarifas, + 'promo' => Promociones::where('visible', 'true')->get(), + ]); + } + + /// Crear usuario /// + public function crear() + { + + $this->validate(); + + $consulta_user = User::where('email', $this->email)->exists(); + + if (!$consulta_user) { + $crear = new User; + $crear->name = $this->nombre; + $crear->email = $this->email; + $crear->password = Hash::make($this->password); + $crear->rol_id = $this->rol; + $crear->save(); + + $saldo = new saldo; + $saldo->valor = '0'; + $saldo->usuario_id = $crear->id; + $saldo->save(); + + if ($crear) { + $this->alert('success', 'Usuario creado con èxito!', [ + 'position' => 'top' + ]); + } + $this->add = false; + } else { + $this->alert('warning', 'Este correo ya está registrado!', [ + 'position' => 'top' + ]); + } + + } + + //CONSULTAR SALDO// + public function saldo($user_saldo) + { + $this->user_saldo = $user_saldo; + $this->consulta_saldo = Saldo::where('usuario_id', $this->user_saldo)->first(); + + if (is_null($this->consulta_saldo)) { + $saldo = new Saldo; + $saldo->valor = 0; + $saldo->usuario_id = $this->user_saldo; + $saldo->save(); + $this->consulta_saldo = $saldo; + } + + $this->saldo_actual = $this->consulta_saldo->valor; + $this->modalSaldo = true; + + } + + public function addSaldo() + { + $recarga = new recarga; + $recarga->payment_method_id = 'manual'; + $recarga->status = 'Aprovada'; + $recarga->usuario_id = $this->user_saldo; + $recarga->saldo_id = $this->consulta_saldo->id; + $recarga->monto = $this->valor_recargar; + $recarga->valor_recarga = $this->valor_recargar; + $recarga->save(); + + + $this->consulta_saldo->update([ + 'valor' => $this->saldo_actual + $this->valor_recargar + ]); + + $this->alert('success', 'Saldo actualizado con exito!', [ + 'position' => 'top' + ]); + + + $this->limpiarSaldo(); + + } + + public function editar($id) + { + $this->id_edit = $id; + + $consulta = User::FindOrFail($this->id_edit); + $this->nombre_edit = $consulta->name; + $this->email_edit = $consulta->email; + $this->rol_edit = $consulta->rol_id; + + $this->editar = true; + + } + public function actualizar() + { + $this->validate( + [ + 'nombre_edit' => 'required', + 'email_edit' => 'required', + 'rol_edit' => 'required', + ] + ); + User::where('id', $this->id_edit)->update([ + 'name' => $this->nombre_edit, + 'email' => $this->email_edit, + 'rol_id' => $this->rol_edit + ]); + + $this->editar = false; + + $this->alert('success', 'Usuario actualizado con exito!', [ + 'position' => 'top' + ]); + } + + public function gestionar($id, $rid, $usuNom) + { + + $this->usuarioGestion_id = $id; + $this->rol_usuario = $rid; + $this->usuario_nombre = $usuNom; + + $this->consulta_tarifas = Tarifas::where('rol_id', $rid)->with('servicio')->get(); + + $this->consulta_usuarioTarifas = Usuario_tarifa::where('usuario_id', $this->usuarioGestion_id)->with('tarifa')->get(); + //dd($this->consulta_usuarioTarifas); + + $this->gestion = true; + } + + public function addtarifas() + { + $consulta_existe = Usuario_tarifa::where('tarifa_id', $this->tarifasGestion) + ->where('usuario_id', $this->usuarioGestion_id) + ->exists(); + + if ($consulta_existe) { + $this->alert('warning', '¡Este usuario ya tiene esta tarifa!', [ + 'position' => 'top' + ]); + } elseif (empty($this->tarifasGestion)) { + $this->alert('warning', '¡Seleccione una tarifa!', [ + 'position' => 'top' + ]); + } elseif (empty($this->precioTarifasGestion)) { + $this->alert('warning', '¡Coloque un precio!', [ + 'position' => 'top' + ]); + } else { + $usuarioTarifa = new Usuario_tarifa; + $usuarioTarifa->precio = $this->precioTarifasGestion; + $usuarioTarifa->tarifa_id = $this->tarifasGestion; + $usuarioTarifa->usuario_id = $this->usuarioGestion_id; + $usuarioTarifa->visible = $this->estadoTarifa ? 'false' : 'true'; + $usuarioTarifa->save(); + + $this->alert('success', '¡Tarifas del usuario actualizadas correctamente!', [ + 'position' => 'top' + ]); + } + + $this->consulta_usuarioTarifas = Usuario_tarifa::where('usuario_id', $this->usuarioGestion_id) + ->with('tarifa') + ->get(); + + + $this->precioTarifasGestion = null; + } + + public function eliminarUsuarioTarifa($id) + { + Usuario_tarifa::where('id', $id)->delete(); + + $this->alert('success', 'Tarifa de usuario eliminada correctamente!', [ + 'position' => 'top' + ]); + + $this->consulta_usuarioTarifas = Usuario_tarifa::where('usuario_id', $this->usuarioGestion_id)->with('tarifa')->get(); + } + + public function gestionarPromociones($id, $usuNom) + { + $this->usuarioGestion_id = $id; + $this->usuario_nombre = $usuNom; + + $this->consulta_promo = Promociones::where('visible', '!=', 'false')->get(); + + //$this->consulta_usuarioPromo = Usuario_promo::join('promociones', 'promocion_id', '=', 'promociones.id')->where('usuario_id',$this->usuarioGestion_id)->get(['usuario_promos.id','nombre','usuario_promos.visible','usuario_promos.precio']); + $this->consulta_usuarioPromo = Usuario_promo::where('usuario_id', $this->usuarioGestion_id)->with('usuario', 'promocion')->get(); + $this->gestionPromo = true; + } + + public function addpromos() + { + $consulta_existe = Usuario_promo::where('promocion_id', $this->promoGestion)->where('usuario_id', $this->usuarioGestion_id)->get(); + + + if (empty($this->promoGestion)) { + $this->alert('warning', 'Seleccione una promocion!', [ + 'position' => 'top' + ]); + } else { + + if ($consulta_existe->count() > 0) { + + $this->alert('warning', 'Este usuario ya tiene esta promocion!', [ + 'position' => 'top' + ]); + + } else { + $usuarioPromo = new Usuario_promo(); + $usuarioPromo->precio = $this->precioPromoGestion; + $usuarioPromo->promocion_id = $this->promoGestion; + $usuarioPromo->usuario_id = $this->usuarioGestion_id; + if ($this->estadoPromo) { + $usuarioPromo->visible = 'false'; + } else { + $usuarioPromo->visible = 'true'; + } + $usuarioPromo->save(); + + $this->alert('success', 'promociones del usuario actualizadas correctamente!', [ + 'position' => 'top' + ]); + } + } + + $this->consulta_usuarioPromo = Usuario_promo::join('promociones', 'promocion_id', '=', 'promociones.id')->where('usuario_id', $this->usuarioGestion_id)->get(['usuario_promos.id', 'nombre', 'usuario_promos.visible', 'usuario_promos.precio']); + + } + + public function eliminarUsuarioPromo($id) + { + Usuario_promo::where('id', $id)->delete(); + + $this->alert('success', 'Promocion de usuario eliminada correctamente!', [ + 'position' => 'top' + ]); + + $this->consulta_usuarioPromo = Usuario_promo::join('promociones', 'promocion_id', '=', 'promociones.id')->where('usuario_id', $this->usuarioGestion_id)->get(['usuario_promos.id', 'nombre', 'usuario_promos.visible', 'usuario_promos.precio']); + } + + + + public function eliminar($id) + { + $this->delete_user = $id; + $this->alert('warning', '¿Eliminar usuario?', [ + 'position' => 'center', + 'timer' => '10000', + 'toast' => false, + 'text' => 'Esta seguro', + 'showConfirmButton' => true, + 'onConfirmed' => 'confirmed', + 'showDenyButton' => false, + 'onDenied' => '', + 'showCancelButton' => true, + 'onDismissed' => '', + 'cancelButtonText' => 'Salir', + 'confirmButtonText' => 'Si', + ]); + } + + public function getListeners() + { + return [ + 'confirmed' + ]; + } + + public function confirmed() + { + // Paso 1: Obtener el id del usuario eliminado +$usuarioEliminado = User::where('name', 'usuarioEliminado')->value('id'); + +// Paso 2: Actualizar los registros en la base de datos + $consultaHistorial=Historiale::where('vendedor_id', $this->delete_user) + ->update(['vendedor_id' => $usuarioEliminado,'cliente_id'=>$usuarioEliminado]); + + + $user = User::find($this->delete_user); + $user->delete(); + + } + + public function editarPassword($id) + { + $this->pass_id = $id; + + $this->modalPassword = true; + } + + public function confirmarNewPassword() + { + + $validatedData = $this->validate([ + 'newPassword' => 'required' + ]); + + User::where('id', $this->pass_id)->update([ + 'password' => Hash::make($this->newPassword), + ]); + + $this->alert('success', 'Contraseña actualizada correctamente!', [ + 'position' => 'top' + ]); + + $this->limpiarContra(); + } + + public function limpiarInputAdd() + { + $this->nombre = ''; + $this->email = ''; + $this->rol = null; + + $this->add = false; + } + + public function limpiarInputEdit() + { + $this->nombre_edit = ''; + $this->email_edit = ''; + $this->rol_edit = null; + + $this->editar = false; + } + public function limpiarContra() + { + $this->newPassword = ''; + $this->modalPassword = false; + } + public function limpiarSaldo() + { + $this->valor_recargar = null; + $this->modalSaldo = false; + } + + /* ------------- ACTUALIZAR ------------- */ + public function updateTarifas() + { + + $consulta_existe = TarifaPromo::where('promocion_id', $this->servicio_modTarifas)->where('rol_id', $this->roles_modTarifas)->get(); + //dd($consulta_existe); + + if (empty($this->servicio_modTarifas)) { + $this->alert('warning', 'Seleccione una promocion!', [ + 'position' => 'top' + ]); + } else { + + if ($consulta_existe->count() > 0) { + + $this->alert('warning', 'Esta tarifa ya existe!', [ + 'position' => 'top' + ]); + + } else { + $tarifa = new TarifaPromo; + $tarifa->precio = $this->precio_modTarifas; + $tarifa->promocion_id = $this->servicio_modTarifas; + $tarifa->rol_id = $this->roles_modTarifas; + $tarifa->save(); + + $this->alert('success', 'Tarifas actualizadas correctamente!', [ + 'position' => 'top' + ]); + } + } + } + + /* ------------- ELIMINAR ------------- */ + + public function eliminarModTarifa($id) + { + TarifaPromo::where('id', $id)->delete(); + + $this->alert('success', 'Tarifas eliminada correctamente!', [ + 'position' => 'top' + ]); + } + + +} \ No newline at end of file diff --git a/app/Http/Livewire/ShowUtilidades.php b/app/Http/Livewire/ShowUtilidades.php new file mode 100644 index 0000000..d0fbd48 --- /dev/null +++ b/app/Http/Livewire/ShowUtilidades.php @@ -0,0 +1,13 @@ +referencia)){ + $this->referencia = Str::random(20); + + $recargas = new recarga; + $recargas->monto = $this->monto; + $recargas->reference = $this->referencia; + $recargas-> status = 'pendiente_wompi'; + $recargas-> usuario_id = auth()->user()->id; + $recargas-> saldo_id= auth()->user()->saldo->id; + $recargas->save(); + } + + + return view('livewire.show-wompi'); + } +} diff --git a/app/Http/Livewire/Showcomprar.php b/app/Http/Livewire/Showcomprar.php new file mode 100644 index 0000000..4e235b1 --- /dev/null +++ b/app/Http/Livewire/Showcomprar.php @@ -0,0 +1,21 @@ +monto = $request->monto; + $this->historial_id = $request->id; + //dd($this->id = $request->id); + return view('livewire.showcomprar'); + } +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..a2813a0 --- /dev/null +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/SoloUsuarioAdministrador.php b/app/Http/Middleware/SoloUsuarioAdministrador.php new file mode 100644 index 0000000..e1a0589 --- /dev/null +++ b/app/Http/Middleware/SoloUsuarioAdministrador.php @@ -0,0 +1,29 @@ +rol->nombre =="administrador" || Auth::user()->rol->nombre == "super" || Auth::user()->rol->nombre == "editor") { + return $next($request); + + } else { + + return redirect()->back()->with("mensaje", "No puedes acceder al módulo seleccionado"); + + } + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..7186414 --- /dev/null +++ b/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3391630 --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/app/Http/Middleware/ValidateSignature.php b/app/Http/Middleware/ValidateSignature.php new file mode 100644 index 0000000..093bf64 --- /dev/null +++ b/app/Http/Middleware/ValidateSignature.php @@ -0,0 +1,22 @@ + + */ + protected $except = [ + // 'fbclid', + // 'utm_campaign', + // 'utm_content', + // 'utm_medium', + // 'utm_source', + // 'utm_term', + ]; +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..4785fe7 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + '/webhooks', + '/wompi_hook', + '/mp' + ]; +} diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php new file mode 100644 index 0000000..e0c6f14 --- /dev/null +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -0,0 +1,93 @@ + ['required', 'string', 'email'], + 'password' => ['required', 'string'], + ]; + } + + /** + * Attempt to authenticate the request's credentials. + * + * @return void + * + * @throws \Illuminate\Validation\ValidationException + */ + public function authenticate() + { + $this->ensureIsNotRateLimited(); + + if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { + RateLimiter::hit($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.failed'), + ]); + } + + RateLimiter::clear($this->throttleKey()); + } + + /** + * Ensure the login request is not rate limited. + * + * @return void + * + * @throws \Illuminate\Validation\ValidationException + */ + public function ensureIsNotRateLimited() + { + if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + return; + } + + event(new Lockout($this)); + + $seconds = RateLimiter::availableIn($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ]), + ]); + } + + /** + * Get the rate limiting throttle key for the request. + * + * @return string + */ + public function throttleKey() + { + return Str::transliterate(Str::lower($this->input('email')).'|'.$this->ip()); + } +} diff --git a/app/Imports/UsersImport.php b/app/Imports/UsersImport.php new file mode 100644 index 0000000..3184239 --- /dev/null +++ b/app/Imports/UsersImport.php @@ -0,0 +1,53 @@ + $row[0], + 'password'=> $row[1], + 'estado'=> $row[2], + 'inicio'=> \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[3]), + 'vencimiento'=> \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[4]), + 'servicio_id'=> $row[5], + + ]); + + } + public function headingRow(): int + { + return 1; + } + + public function batchSize(): int + { + return 1000; + } + + public function chunkSize(): int + { + return 1000; + } + + public function getDateFormats(): array + { + return [ + + 'Y-m-d', + + ]; + } +} diff --git a/app/Models/Categoria.php b/app/Models/Categoria.php new file mode 100644 index 0000000..8218aa1 --- /dev/null +++ b/app/Models/Categoria.php @@ -0,0 +1,21 @@ +hasMany(Promociones::class,'categoria_id'); + } +} diff --git a/app/Models/Configuracione.php b/app/Models/Configuracione.php new file mode 100644 index 0000000..c3b4c3f --- /dev/null +++ b/app/Models/Configuracione.php @@ -0,0 +1,66 @@ +belongsTo(User::class); + } + + public function redes(){ + return $this ->hasMany(Rede::class,'configuracion_id'); + } + + +} diff --git a/app/Models/Cuentas.php b/app/Models/Cuentas.php new file mode 100644 index 0000000..f93a844 --- /dev/null +++ b/app/Models/Cuentas.php @@ -0,0 +1,46 @@ +belongsTo(Tarifas::class); + } + + public function promocion(){ + return $this ->belongsTo(Promociones::class); + } + + public function historiales(){ + return $this ->belongsToMany(Historiale::class,'historial_cuentas','cuenta_id','historial_id'); + } + + public function perfil(){ + return $this ->hasMany(Historial_cuenta::class,'cuenta_id'); + } + + public function servicio(){ + return $this ->belongsTo(Servicio::class); + } + + public function historiales_obsoletos(){ + return $this ->belongsToMany(Historiale::class,'logs','cuenta_id','historial_id'); + } + +} diff --git a/app/Models/Historial_cuenta.php b/app/Models/Historial_cuenta.php new file mode 100644 index 0000000..a63bf17 --- /dev/null +++ b/app/Models/Historial_cuenta.php @@ -0,0 +1,16 @@ +belongsTo(User::class); + } + + public function tarifa(){ + return $this ->belongsTo(Tarifas::class); + } + + public function promocion(){ + return $this ->belongsTo(Promociones::class); + } + + public function cliente(){ + return $this ->belongsTo(User::class); + } + + public function cuentas(){ + return $this ->belongsToMany(Cuentas::class,'historial_cuentas','historial_id','cuenta_id'); + } + + public function cuentas_obsoletas(){ + return $this ->belongsToMany(Cuentas::class,'logs','historial_id','cuenta_id'); + } + + + +} diff --git a/app/Models/Permiso.php b/app/Models/Permiso.php new file mode 100644 index 0000000..d4d74d4 --- /dev/null +++ b/app/Models/Permiso.php @@ -0,0 +1,25 @@ +belongsTo(Role::class); + } + + public function usuario(){ + return $this ->belongsTo(User::class); + } +} diff --git a/app/Models/Preferencial.php b/app/Models/Preferencial.php new file mode 100644 index 0000000..59c60ad --- /dev/null +++ b/app/Models/Preferencial.php @@ -0,0 +1,26 @@ +belongsTo(User::class); + } + + public function tarifa(){ + return $this ->belongsTo(Tarifas::class); + } + + +} diff --git a/app/Models/Promocion_tarifa.php b/app/Models/Promocion_tarifa.php new file mode 100644 index 0000000..7d0c454 --- /dev/null +++ b/app/Models/Promocion_tarifa.php @@ -0,0 +1,23 @@ +belongsTo(Promociones::class,'promocion_id'); + // } +} diff --git a/app/Models/Promociones.php b/app/Models/Promociones.php new file mode 100644 index 0000000..e4a83ee --- /dev/null +++ b/app/Models/Promociones.php @@ -0,0 +1,48 @@ +belongsTo(Categoria::class); + } + + public function servicios(){ + return $this ->hasMany(Servicio::class,'promocion_id'); + } + + public function cuentas(){ + return $this ->hasMany(Cuentas::class,'promocion_id'); + } + + public function historiales(){ + return $this ->hasMany(Historiale::class,'promocion_id'); + } + + + public function tarifas(){ + return $this ->belongsToMany(Tarifas::class,'promocion_tarifas','promocion_id','tarifa_id'); + } + + public function usuario_promos(){ + return $this ->hasMany(Usuario_promo::class,'promocion_id'); + } + + public function tarifaPromo(){ + return $this ->hasMany(TarifaPromo::class,'promocion_id'); + } + + +} diff --git a/app/Models/Rede.php b/app/Models/Rede.php new file mode 100644 index 0000000..0a0ad10 --- /dev/null +++ b/app/Models/Rede.php @@ -0,0 +1,21 @@ +belongsTo(Configuracione::class); + } + +} diff --git a/app/Models/Role.php b/app/Models/Role.php new file mode 100644 index 0000000..32040da --- /dev/null +++ b/app/Models/Role.php @@ -0,0 +1,32 @@ +hasMany(User::class,'rol_id'); + } + + public function permisos(){ + return $this ->hasMany(Permiso::class,'rol_id'); + } + + public function tarifas(){ + return $this ->hasMany(Tarifas::class,'rol_id'); + } + + public function rol_promos(){ + return $this ->hasMany(TarifaPromo::class,'rol_id'); + } + +} diff --git a/app/Models/Saldo.php b/app/Models/Saldo.php new file mode 100644 index 0000000..618a288 --- /dev/null +++ b/app/Models/Saldo.php @@ -0,0 +1,23 @@ +belongsTo(User::class); + } + + public function recargas(){ + return $this ->hasMany(recarga::class, 'saldo_id'); + } +} diff --git a/app/Models/Servicio.php b/app/Models/Servicio.php new file mode 100644 index 0000000..94527d2 --- /dev/null +++ b/app/Models/Servicio.php @@ -0,0 +1,42 @@ +belongsTo(Promociones::class); + } + + public function tarifas(){ + return $this ->hasMany(Tarifas::class,'servicio_id'); + } + + public function cuentas(){ + return $this ->hasMany(Cuentas::class,'servicio_id'); + } +} diff --git a/app/Models/TarifaPromo.php b/app/Models/TarifaPromo.php new file mode 100644 index 0000000..85e373b --- /dev/null +++ b/app/Models/TarifaPromo.php @@ -0,0 +1,26 @@ +belongsTo(Role::class,'rol_id'); + } + + public function promocion(){ + return $this ->belongsTo(Promociones::class,'promocion_id'); + } +} diff --git a/app/Models/Tarifas.php b/app/Models/Tarifas.php new file mode 100644 index 0000000..e16098c --- /dev/null +++ b/app/Models/Tarifas.php @@ -0,0 +1,50 @@ +belongsTo(Servicio::class); + } + + public function preferenciales(){ + return $this ->hasMany(Preferencial::class,'tarifa_id'); + } + + public function cuentas(){ + return $this ->hasMany(Cuentas::class,'tarifa_id'); + } + + public function historiales(){ + return $this ->hasMany(Historiale::class,'tarifa_id'); + } + + public function promociones(){ + return $this ->belongsToMany(Promociones::class,'promocion_tarifas','tarifa_id','promocion_id'); + } + + public function rol(){ + return $this ->belongsTo(Role::class); + } + + public function usuario_tarifas(){ + return $this ->hasMany(Usuario_tarifa::class,'tarifa_id'); + } + + +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..92143d0 --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,88 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + 'cedula', + 'estado', + 'img_perfil', + 'rol_id' + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; + + public function rol(){ + return $this ->belongsTo(Role::class); + } + + public function saldo(){ + return $this ->hasOne(Saldo::class,'usuario_id'); + } + + public function modificaciones(){ + return $this ->hasOne(Configuracione::class,'usermodifico_id'); + } + + public function permisos(){ + return $this ->hasMany(Permiso::class,'usuario_id'); + } + + public function preferenciales(){ + return $this ->hasMany(Preferencial::class,'usuario_id'); + } + + public function historiales_venta(){ + return $this ->hasMany(Historiale::class,'vendedor_id'); + } + + public function historiales_compra(){ + return $this ->hasMany(Historiale::class,'cliente_id'); + } + + public function recargas(){ + return $this ->hasMany(recarga::class,'usuario_id'); + } + + public function usuario_tarifas(){ + return $this ->hasMany(Usuario_tarifa::class,'usuario_id'); + } + public function usuario_promos(){ + return $this ->hasMany(Usuario_promo::class,'usuario_id'); + } + +} diff --git a/app/Models/Usuario_promo.php b/app/Models/Usuario_promo.php new file mode 100644 index 0000000..cbee675 --- /dev/null +++ b/app/Models/Usuario_promo.php @@ -0,0 +1,26 @@ +belongsTo(User::class,'usuario_id'); + } + + public function promocion(){ + return $this ->belongsTo(Promociones::class,'promocion_id'); + } +} diff --git a/app/Models/Usuario_tarifa.php b/app/Models/Usuario_tarifa.php new file mode 100644 index 0000000..ba7beff --- /dev/null +++ b/app/Models/Usuario_tarifa.php @@ -0,0 +1,26 @@ +belongsTo(User::class,'usuario_id'); + } + + public function tarifa(){ + return $this ->belongsTo(Tarifas::class,'tarifa_id'); + } +} diff --git a/app/Models/log.php b/app/Models/log.php new file mode 100644 index 0000000..092e78e --- /dev/null +++ b/app/Models/log.php @@ -0,0 +1,11 @@ +belongsTo(User::class); + } + public function saldo(){ + return $this ->belongsTo(Saldo::class); + } + +} diff --git a/app/Models/slider.php b/app/Models/slider.php new file mode 100644 index 0000000..eadc8d4 --- /dev/null +++ b/app/Models/slider.php @@ -0,0 +1,16 @@ + notificacion = $notificacion; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['database','mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage) + ->subject('Aviso de renovación') + ->greeting('Hola,'.$this->notificacion['cliente']) + ->line('Su servicio de '.$this->notificacion['servicio'].' esta proximo a vencer.') + ->action('Renovar', url('/')) + ->line('Gracias por usar SirPremium!'); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + 'fecha_final' => $this->notificacion['fecha_final'], + 'cliente' => $this->notificacion['cliente'], + 'servicio' => $this->notificacion['servicio'], + 'tipo' => $this->notificacion['tipo'], + 'vendedor' =>$this->notificacion['vendedor'], + + ]; + + } +} diff --git a/app/Notifications/compra.php b/app/Notifications/compra.php new file mode 100644 index 0000000..4b433ea --- /dev/null +++ b/app/Notifications/compra.php @@ -0,0 +1,74 @@ + notificacion = $notificacion; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['database','mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + + + return (new MailMessage) + ->subject('Credenciales '.$this->notificacion['servicio']) + ->greeting('Hola,'.$this->notificacion['cliente']) + ->line('Sus credenciales de acceso '.$this->notificacion['servicio']) + ->action('Ver credenciales', url($this->notificacion['enlace'])) + ->line('Gracias por usar SirPremium!'); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + 'fecha_final' => $this->notificacion['fecha_final'], + 'cliente' => $this->notificacion['cliente'], + 'servicio' => $this->notificacion['servicio'], + 'tipo' => $this->notificacion['tipo'], + 'vendedor' =>$this->notificacion['vendedor'], + 'enlace' =>$this->notificacion['enlace'], + + + ]; + } +} diff --git a/app/Notifications/licencias.php b/app/Notifications/licencias.php new file mode 100644 index 0000000..bcabd79 --- /dev/null +++ b/app/Notifications/licencias.php @@ -0,0 +1,66 @@ + notificacion = $notificacion; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['database','mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage) + ->subject('Alerta cuentas de '.$this->notificacion['servicio'] ) + ->greeting('Hola,') + ->line('De '.$this->notificacion['servicio'].' quedan '. $this->notificacion['cantidad'] .' '.$this->notificacion['tipo'].' disponibles.') + ->action('Añadir cuentas', url('/planes')) + ->line('Gracias por usar SirPremium!'); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + 'servicio' => $this->notificacion['servicio'], + 'cantidad' => $this->notificacion['cantidad'], + 'tipo' => $this->notificacion['tipo'], + + ]; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..842050f --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,29 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + 'ArieTimmerman\Laravel\URLShortener\Events\URLVisit' => [ + 'App\Listener\YourListener', + ] + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + * + * @return bool + */ + public function shouldDiscoverEvents() + { + return false; + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..52dabc1 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,52 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + }); + } +} diff --git a/app/View/Components/AppLayout.php b/app/View/Components/AppLayout.php new file mode 100644 index 0000000..b45d342 --- /dev/null +++ b/app/View/Components/AppLayout.php @@ -0,0 +1,18 @@ +promociones = $promociones; + //dd($promociones); + } + + /** + * Get the view / contents that represent the component. + * + * @return \Illuminate\Contracts\View\View|\Closure|string + */ + public function render() + { + return view('components.slider',['promociones'=>$this->promociones]); + } +} diff --git a/app/View/Components/listadoPlanes.php b/app/View/Components/listadoPlanes.php new file mode 100644 index 0000000..0206d6a --- /dev/null +++ b/app/View/Components/listadoPlanes.php @@ -0,0 +1,28 @@ +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bash.sh b/bash.sh new file mode 100644 index 0000000..d34cec2 --- /dev/null +++ b/bash.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cd /home/u111286300/domains/sirpremium.com.co/public_html/app && php artisan schedule:run >> /dev/null 2>&1 \ No newline at end of file diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..df17064 --- /dev/null +++ b/composer.json @@ -0,0 +1,79 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^8.0.2", + "aprendible/storage-link-route": "^1.0", + "arietimmerman/laravel-url-shortener": "^0.1.8", + "ashallendesign/short-url": "^7.3", + "guzzlehttp/guzzle": "^7.5", + "intervention/image": "^2.7", + "jantinnerezo/livewire-alert": "^2.2", + "laravel/framework": "^9.19", + "laravel/sanctum": "^3.0", + "laravel/tinker": "^2.7", + "laravel/vonage-notification-channel": "^3.0", + "livewire/livewire": "^2.10", + "maatwebsite/excel": "^3.1", + "mercadopago/dx-php": "^2.5", + "psr/simple-cache": "^3.0", + "rmccue/requests": "^2.0", + "twilio/sdk": "5.0" + }, + "require-dev": { + "fakerphp/faker": "^1.9.1", + "laravel/breeze": "^1.14", + "laravel/pint": "^1.0", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^6.1", + "phpunit/phpunit": "^9.5.10", + "spatie/laravel-ignition": "^1.0" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi", + "@php artisan vendor:publish --force --tag=livewire:assets --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true + } + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..2772e88 --- /dev/null +++ b/composer.lock @@ -0,0 +1,10308 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "843e42abd278d892e18df781a855ae21", + "packages": [ + { + "name": "aprendible/storage-link-route", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/aprendible/storage-link-route.git", + "reference": "70ddbb810828c1b8721b741da760c1c8107ff41f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aprendible/storage-link-route/zipball/70ddbb810828c1b8721b741da760c1c8107ff41f", + "reference": "70ddbb810828c1b8721b741da760c1c8107ff41f", + "shasum": "" + }, + "require-dev": { + "orchestra/testbench": "^4.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Aprendible\\StorageLinkRoute\\StorageLinkRouteServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Aprendible\\StorageLinkRoute\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jorge García", + "email": "jorge@aprendible.com" + } + ], + "description": "A route to create a symlink from 'public/storage' to 'storage/app/public'", + "support": { + "issues": "https://github.com/aprendible/storage-link-route/issues", + "source": "https://github.com/aprendible/storage-link-route/tree/1.0.1" + }, + "time": "2019-10-30T17:51:38+00:00" + }, + { + "name": "arietimmerman/laravel-url-shortener", + "version": "v0.1.8", + "source": { + "type": "git", + "url": "https://github.com/arietimmerman/laravel-url-shortener.git", + "reference": "1fcf5282878a5bd5a1d729224db3fda7504697c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/arietimmerman/laravel-url-shortener/zipball/1fcf5282878a5bd5a1d729224db3fda7504697c9", + "reference": "1fcf5282878a5bd5a1d729224db3fda7504697c9", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/database": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.0|^8.0", + "webpatser/laravel-uuid": "^3.0|^4.0" + }, + "require-dev": { + "illuminate/testing": "^6.0|^7.0|^8.0", + "orchestra/testbench": "^5.2 || ^6.0", + "phpunit/phpunit": "^8.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "ArieTimmerman\\Laravel\\URLShortener\\ServiceProvider" + ], + "aliases": { + "URLShortener": "ArieTimmerman\\Laravel\\URLShortener\\URLShortener" + } + } + }, + "autoload": { + "psr-4": { + "ArieTimmerman\\Laravel\\URLShortener\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Arie Timmerman", + "email": "arietimmerman@gmail.com" + } + ], + "description": "Laravel Package for shortening urls", + "support": { + "issues": "https://github.com/arietimmerman/laravel-url-shortener/issues", + "source": "https://github.com/arietimmerman/laravel-url-shortener/tree/v0.1.8" + }, + "time": "2022-10-13T09:18:55+00:00" + }, + { + "name": "ashallendesign/short-url", + "version": "v7.3.0", + "source": { + "type": "git", + "url": "https://github.com/ash-jc-allen/short-url.git", + "reference": "7fc5d967d0116f954292d8c012b0e6757d8259ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ash-jc-allen/short-url/zipball/7fc5d967d0116f954292d8c012b0e6757d8259ea", + "reference": "7fc5d967d0116f954292d8c012b0e6757d8259ea", + "shasum": "" + }, + "require": { + "hashids/hashids": "^4.0", + "illuminate/container": "^8.0|^9.0", + "illuminate/database": "^8.0|^9.0", + "jenssegers/agent": "^2.6", + "nesbot/carbon": "~2.0", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "nunomaduro/larastan": "^0.7.12 || ^1.0.0", + "orchestra/testbench": "^6.0|^7.0", + "phpunit/phpunit": "^8.2 || ^9.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "AshAllenDesign\\ShortURL\\Providers\\ShortURLProvider" + ], + "aliases": { + "ShortURL": "AshAllenDesign\\ShortURL\\Facades\\ShortURL" + } + } + }, + "autoload": { + "psr-4": { + "AshAllenDesign\\ShortURL\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ash Allen", + "email": "mail@ashallendesign.co.uk" + } + ], + "description": "A Laravel package for creating shortened URLs for your web apps.", + "homepage": "https://github.com/ash-jc-allen/short-url", + "keywords": [ + "URL-Shortener", + "ashallendesign", + "laravel", + "laravel-package", + "short-urls" + ], + "support": { + "issues": "https://github.com/ash-jc-allen/short-url/issues", + "source": "https://github.com/ash-jc-allen/short-url/tree/v7.3.0" + }, + "funding": [ + { + "url": "https://github.com/ash-jc-allen", + "type": "github" + } + ], + "time": "2022-10-17T14:51:21+00:00" + }, + { + "name": "brick/math", + "version": "0.10.2", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "4.25.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.10.2" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2022-08-10T22:54:19+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.11.99.5", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7 || ^8" + }, + "replace": { + "ocramius/package-versions": "1.11.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-01-17T14:14:24+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.13.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "648b0343343565c4a056bfc8392201385e8d89f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0", + "reference": "648b0343343565c4a056bfc8392201385e8d89f0", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2", + "vimeo/psalm": "^4.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.3" + }, + "time": "2022-07-02T10:48:51+00:00" + }, + { + "name": "doctrine/common", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/8b5e5650391f851ed58910b3e3d48a71062eeced", + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced", + "shasum": "" + }, + "require": { + "doctrine/persistence": "^2.0 || ^3.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0 || ^10.0", + "doctrine/collections": "^1", + "phpstan/phpstan": "^1.4.1", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.0", + "symfony/phpunit-bridge": "^6.1", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", + "homepage": "https://www.doctrine-project.org/projects/common.html", + "keywords": [ + "common", + "doctrine", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/3.4.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon", + "type": "tidelift" + } + ], + "time": "2022-10-09T11:47:59+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2022-10-12T20:59:15+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.6" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2022-10-20T09:10:12+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "doctrine/persistence", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "05612da375f8a3931161f435f91d6704926e6ec5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/05612da375f8a3931161f435f91d6704926e6ec5", + "reference": "05612da375f8a3931161f435f91d6704926e6ec5", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "^1 || ^2", + "php": "^7.2 || ^8.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "doctrine/annotations": "<1.7 || >=2.0", + "doctrine/common": "<2.10" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "doctrine/annotations": "^1.7", + "doctrine/coding-standard": "^10", + "doctrine/common": "^3.0", + "phpstan/phpstan": "1.8.8", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "vimeo/psalm": "4.29.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Persistence\\": "src/Persistence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/3.0.4" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2022-10-13T07:34:14+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2022-09-10T18:51:20+00:00" + }, + { + "name": "egulias/email-validator", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2022-06-18T20:57:19+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.16.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "shasum": "" + }, + "require": { + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" + }, + "require-dev": { + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" + }, + "type": "library", + "autoload": { + "files": [ + "library/HTMLPurifier.composer.php" + ], + "psr-0": { + "HTMLPurifier": "library/" + }, + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" + }, + "time": "2022-09-18T07:06:19+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:56:11+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "7.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-08-28T15:39:27+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "b94b2807d85443f9719887892882d0329d1e2598" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2022-08-28T14:55:35+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.4.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "67c26b443f348a51926030c83481b85718457d3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.4.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-10-26T14:07:24+00:00" + }, + { + "name": "hashids/hashids", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/vinkla/hashids.git", + "reference": "8cab111f78e0bd9c76953b082919fc9e251761be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vinkla/hashids/zipball/8cab111f78e0bd9c76953b082919fc9e251761be", + "reference": "8cab111f78e0bd9c76953b082919fc9e251761be", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.0 || ^9.4", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-bcmath": "Required to use BC Math arbitrary precision mathematics (*).", + "ext-gmp": "Required to use GNU multiple precision mathematics (*)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Hashids\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ivan Akimov", + "email": "ivan@barreleye.com" + }, + { + "name": "Vincent Klaiber", + "email": "hello@doubledip.se" + } + ], + "description": "Generate short, unique, non-sequential ids (like YouTube and Bitly) from numbers", + "homepage": "https://hashids.org/php", + "keywords": [ + "bitly", + "decode", + "encode", + "hash", + "hashid", + "hashids", + "ids", + "obfuscate", + "youtube" + ], + "support": { + "issues": "https://github.com/vinkla/hashids/issues", + "source": "https://github.com/vinkla/hashids/tree/4.1.0" + }, + "time": "2020-11-26T19:24:33+00:00" + }, + { + "name": "intervention/image", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "04be355f8d6734c826045d02a1079ad658322dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", + "reference": "04be355f8d6734c826045d02a1079ad658322dad", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1 || ^2.0", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/2.7.2" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], + "time": "2022-05-21T17:30:32+00:00" + }, + { + "name": "jantinnerezo/livewire-alert", + "version": "2.2.6", + "source": { + "type": "git", + "url": "https://github.com/jantinnerezo/livewire-alert.git", + "reference": "352d13719741fce537893bd9372504385bc99d5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jantinnerezo/livewire-alert/zipball/352d13719741fce537893bd9372504385bc99d5c", + "reference": "352d13719741fce537893bd9372504385bc99d5c", + "shasum": "" + }, + "require": { + "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "livewire/livewire": "^2.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "orchestra/testbench": "^6.15", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Jantinnerezo\\LivewireAlert\\LivewireAlertServiceProvider" + ], + "aliases": { + "LivewireAlert": "Jantinnerezo\\LivewireAlert\\LivewireAlertFacade" + } + } + }, + "autoload": { + "psr-4": { + "Jantinnerezo\\LivewireAlert\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jantinn Erezo", + "email": "erezojantinn@gmail.com", + "role": "Developer" + } + ], + "description": "This package provides a simple alert utilities for your livewire components.", + "homepage": "https://github.com/jantinnerezo/livewire-alert", + "keywords": [ + "jantinnerezo", + "livewire-alert" + ], + "support": { + "issues": "https://github.com/jantinnerezo/livewire-alert/issues", + "source": "https://github.com/jantinnerezo/livewire-alert/tree/2.2.6" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/jantinn", + "type": "custom" + } + ], + "time": "2022-03-15T17:39:01+00:00" + }, + { + "name": "jaybizzle/crawler-detect", + "version": "v1.2.112", + "source": { + "type": "git", + "url": "https://github.com/JayBizzle/Crawler-Detect.git", + "reference": "2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f", + "reference": "2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.5|^6.5|^9.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Jaybizzle\\CrawlerDetect\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Beech", + "email": "m@rkbee.ch", + "role": "Developer" + } + ], + "description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent", + "homepage": "https://github.com/JayBizzle/Crawler-Detect/", + "keywords": [ + "crawler", + "crawler detect", + "crawler detector", + "crawlerdetect", + "php crawler detect" + ], + "support": { + "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", + "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.112" + }, + "time": "2022-10-05T21:52:44+00:00" + }, + { + "name": "jenssegers/agent", + "version": "v2.6.4", + "source": { + "type": "git", + "url": "https://github.com/jenssegers/agent.git", + "reference": "daa11c43729510b3700bc34d414664966b03bffe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jenssegers/agent/zipball/daa11c43729510b3700bc34d414664966b03bffe", + "reference": "daa11c43729510b3700bc34d414664966b03bffe", + "shasum": "" + }, + "require": { + "jaybizzle/crawler-detect": "^1.2", + "mobiledetect/mobiledetectlib": "^2.7.6", + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5.0|^6.0|^7.0" + }, + "suggest": { + "illuminate/support": "Required for laravel service providers" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + }, + "laravel": { + "providers": [ + "Jenssegers\\Agent\\AgentServiceProvider" + ], + "aliases": { + "Agent": "Jenssegers\\Agent\\Facades\\Agent" + } + } + }, + "autoload": { + "psr-4": { + "Jenssegers\\Agent\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jens Segers", + "homepage": "https://jenssegers.com" + } + ], + "description": "Desktop/mobile user agent parser with support for Laravel, based on Mobiledetect", + "homepage": "https://github.com/jenssegers/agent", + "keywords": [ + "Agent", + "browser", + "desktop", + "laravel", + "mobile", + "platform", + "user agent", + "useragent" + ], + "support": { + "issues": "https://github.com/jenssegers/agent/issues", + "source": "https://github.com/jenssegers/agent/tree/v2.6.4" + }, + "funding": [ + { + "url": "https://github.com/jenssegers", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/jenssegers/agent", + "type": "tidelift" + } + ], + "time": "2020-06-13T08:05:20+00:00" + }, + { + "name": "laminas/laminas-diactoros", + "version": "2.20.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "10696c809866bebd9d71dca14de6c0d6c1cac2f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/10696c809866bebd9d71dca14de6c0d6c1cac2f8", + "reference": "10696c809866bebd9d71dca14de6c0d6c1cac2f8", + "shasum": "" + }, + "require": { + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "conflict": { + "zendframework/zend-diactoros": "*" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.9.0", + "laminas/laminas-coding-standard": "^2.4.0", + "php-http/psr7-integration-tests": "^1.1.1", + "phpunit/phpunit": "^9.5.25", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.28" + }, + "type": "library", + "extra": { + "laminas": { + "config-provider": "Laminas\\Diactoros\\ConfigProvider", + "module": "Laminas\\Diactoros" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-17", + "psr-7" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-diactoros/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-diactoros/issues", + "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", + "source": "https://github.com/laminas/laminas-diactoros" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-10-25T13:35:54+00:00" + }, + { + "name": "laravel/framework", + "version": "v9.37.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "0c9675abf6d966e834b2ebeca3319f524e07a330" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/0c9675abf6d966e834b2ebeca3319f524e07a330", + "reference": "0c9675abf6d966e834b2ebeca3319f524e07a330", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1", + "ext-mbstring": "*", + "ext-openssl": "*", + "fruitcake/php-cors": "^1.2", + "laravel/serializable-closure": "^1.2.2", + "league/commonmark": "^2.2", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.62.1", + "nunomaduro/termwind": "^1.13", + "php": "^8.0.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.2.2", + "symfony/console": "^6.0.9", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/uid": "^6.0", + "symfony/var-dumper": "^6.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^2.13.3|^3.1.4", + "fakerphp/faker": "^1.9.2", + "guzzlehttp/guzzle": "^7.5", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.11", + "pda/pheanstalk": "^4.0", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9|^2.0.2", + "symfony/cache": "^6.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-bcmath": "Required to use the multiple_of validation rule.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.5.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-10-25T15:43:46+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "b71e80a3a8e8029e2ec8c1aa814b999609ce16dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/b71e80a3a8e8029e2ec8c1aa814b999609ce16dc", + "reference": "b71e80a3a8e8029e2ec8c1aa814b999609ce16dc", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.21", + "illuminate/contracts": "^9.21", + "illuminate/database": "^9.21", + "illuminate/support": "^9.21", + "php": "^8.0.2" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.0", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2022-07-29T21:33:30+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2022-09-08T13:45:54+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.7.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "dff39b661e827dae6e092412f976658df82dbac5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", + "reference": "dff39b661e827dae6e092412f976658df82dbac5", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.7.2" + }, + "time": "2022-03-23T12:38:24+00:00" + }, + { + "name": "laravel/vonage-notification-channel", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/vonage-notification-channel.git", + "reference": "c1245b19bfa3c6f7a45ef103c6bbc3437b76040a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/vonage-notification-channel/zipball/c1245b19bfa3c6f7a45ef103c6bbc3437b76040a", + "reference": "c1245b19bfa3c6f7a45ef103c6bbc3437b76040a", + "shasum": "" + }, + "require": { + "illuminate/notifications": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "php": "^8.0", + "vonage/client-core": "^3.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.2", + "mockery/mockery": "^1.0", + "orchestra/testbench": "^6.0|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\VonageChannelServiceProvider" + ], + "aliases": { + "Vonage": "Illuminate\\Notifications\\Facades\\Vonage" + } + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Vonage Notification Channel for laravel.", + "keywords": [ + "laravel", + "nexmo", + "notifications", + "vonage" + ], + "support": { + "issues": "https://github.com/laravel/vonage-notification-channel/issues", + "source": "https://github.com/laravel/vonage-notification-channel/tree/v3.0.0" + }, + "time": "2022-02-08T14:43:08+00:00" + }, + { + "name": "lcobucci/clock", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/fb533e093fd61321bfcbac08b131ce805fe183d3", + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3", + "shasum": "" + }, + "require": { + "php": "^8.0", + "stella-maris/clock": "^0.1.4" + }, + "require-dev": { + "infection/infection": "^0.26", + "lcobucci/coding-standard": "^8.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "support": { + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2022-04-19T19:34:17+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "55564265fddf810504110bd68ca311932324b0e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/55564265fddf810504110bd68ca311932324b0e9", + "reference": "55564265fddf810504110bd68ca311932324b0e9", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "lcobucci/clock": "^2.0", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "infection/infection": "^0.20", + "lcobucci/coding-standard": "^6.0", + "mikey179/vfsstream": "^1.6", + "phpbench/phpbench": "^0.17", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/php-invoker": "^3.1", + "phpunit/phpunit": "^9.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2021-09-28T19:18:28+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.5", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84d74485fdb7074f4f9dd6f02ab957b1de513257", + "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2022-07-29T10:59:45+00:00" + }, + { + "name": "league/config", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2021-08-14T12:15:32+00:00" + }, + { + "name": "league/flysystem", + "version": "3.10.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "b9bd194b016114d6ff6765c09d40c7d427e4e3f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b9bd194b016114d6ff6765c09d40c7d427e4e3f6", + "reference": "b9bd194b016114d6ff6765c09d40c7d427e4e3f6", + "shasum": "" + }, + "require": { + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.198.1", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.10.2" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-10-25T07:01:47+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-17T13:12:02+00:00" + }, + { + "name": "livewire/livewire", + "version": "v2.10.7", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "fa0441bf82f1674beecb3a8ad8a4ae428736ed18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/fa0441bf82f1674beecb3a8ad8a4ae428736ed18", + "reference": "fa0441bf82f1674beecb3a8ad8a4ae428736ed18", + "shasum": "" + }, + "require": { + "illuminate/database": "^7.0|^8.0|^9.0", + "illuminate/support": "^7.0|^8.0|^9.0", + "illuminate/validation": "^7.0|^8.0|^9.0", + "league/mime-type-detection": "^1.9", + "php": "^7.2.5|^8.0", + "symfony/http-kernel": "^5.0|^6.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^7.0|^8.0|^9.0", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^5.0|^6.0|^7.0", + "orchestra/testbench-dusk": "^5.2|^6.0|^7.0", + "phpunit/phpunit": "^8.4|^9.0", + "psy/psysh": "@stable" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Livewire\\LivewireServiceProvider" + ], + "aliases": { + "Livewire": "Livewire\\Livewire" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v2.10.7" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2022-08-08T13:52:53+00:00" + }, + { + "name": "maatwebsite/excel", + "version": "3.1.48", + "source": { + "type": "git", + "url": "https://github.com/SpartnerNL/Laravel-Excel.git", + "reference": "6d0fe2a1d195960c7af7bf0de760582da02a34b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/6d0fe2a1d195960c7af7bf0de760582da02a34b9", + "reference": "6d0fe2a1d195960c7af7bf0de760582da02a34b9", + "shasum": "" + }, + "require": { + "composer/semver": "^3.3", + "ext-json": "*", + "illuminate/support": "5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", + "php": "^7.0|^8.0", + "phpoffice/phpspreadsheet": "^1.18", + "psr/simple-cache": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "orchestra/testbench": "^6.0|^7.0|^8.0", + "predis/predis": "^1.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ], + "aliases": { + "Excel": "Maatwebsite\\Excel\\Facades\\Excel" + } + } + }, + "autoload": { + "psr-4": { + "Maatwebsite\\Excel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Patrick Brouwers", + "email": "patrick@spartner.nl" + } + ], + "description": "Supercharged Excel exports and imports in Laravel", + "keywords": [ + "PHPExcel", + "batch", + "csv", + "excel", + "export", + "import", + "laravel", + "php", + "phpspreadsheet" + ], + "support": { + "issues": "https://github.com/SpartnerNL/Laravel-Excel/issues", + "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.48" + }, + "funding": [ + { + "url": "https://laravel-excel.com/commercial-support", + "type": "custom" + }, + { + "url": "https://github.com/patrickbrouwers", + "type": "github" + } + ], + "time": "2023-02-22T21:01:38+00:00" + }, + { + "name": "maennchen/zipstream-php", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3", + "reference": "3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "myclabs/php-enum": "^1.5", + "php": "^8.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.9", + "guzzlehttp/guzzle": "^6.5.3 || ^7.2.0", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "^8.5.8 || ^9.4.2", + "vimeo/psalm": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + }, + { + "url": "https://opencollective.com/zipstream", + "type": "open_collective" + } + ], + "time": "2022-12-08T12:29:14+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" + }, + { + "name": "mercadopago/dx-php", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/mercadopago/sdk-php.git", + "reference": "9fd5d8842988cdad026a5722696d0784625201ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mercadopago/sdk-php/zipball/9fd5d8842988cdad026a5722696d0784625201ea", + "reference": "9fd5d8842988cdad026a5722696d0784625201ea", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.8", + "doctrine/common": "^2.6 || ^3.0", + "php": ">=7.1.0" + }, + "require-dev": { + "doctrine/orm": "~2.3", + "phpmd/phpmd": "@stable", + "phpunit/phpunit": "^7", + "sebastian/phpcpd": "*", + "squizlabs/php_codesniffer": "2.8.1", + "symfony/yaml": "~2.5", + "vlucas/phpdotenv": "^2.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "MercadoPago\\": [ + "src/MercadoPago/", + "tests/", + "src/MercadoPago/Generic/", + "src/MercadoPago/Entities/", + "src/MercadoPago/Entities/Shared/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Mercado Pago PHP SDK", + "homepage": "https://github.com/mercadopago/sdk-php", + "support": { + "source": "https://github.com/mercadopago/sdk-php/tree/2.5.1" + }, + "time": "2022-09-27T19:06:00+00:00" + }, + { + "name": "mobiledetect/mobiledetectlib", + "version": "2.8.41", + "source": { + "type": "git", + "url": "https://github.com/serbanghita/Mobile-Detect.git", + "reference": "fc9cccd4d3706d5a7537b562b59cc18f9e4c0cb1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/fc9cccd4d3706d5a7537b562b59cc18f9e4c0cb1", + "reference": "fc9cccd4d3706d5a7537b562b59cc18f9e4c0cb1", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.35||~5.7" + }, + "type": "library", + "autoload": { + "psr-0": { + "Detection": "namespaced/" + }, + "classmap": [ + "Mobile_Detect.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Serban Ghita", + "email": "serbanghita@gmail.com", + "homepage": "http://mobiledetect.net", + "role": "Developer" + } + ], + "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.", + "homepage": "https://github.com/serbanghita/Mobile-Detect", + "keywords": [ + "detect mobile devices", + "mobile", + "mobile detect", + "mobile detector", + "php mobile detect" + ], + "support": { + "issues": "https://github.com/serbanghita/Mobile-Detect/issues", + "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.41" + }, + "time": "2022-11-08T18:31:26+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2022-07-24T11:55:47+00:00" + }, + { + "name": "myclabs/php-enum", + "version": "1.8.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^4.6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "support": { + "issues": "https://github.com/myclabs/php-enum/issues", + "source": "https://github.com/myclabs/php-enum/tree/1.8.4" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", + "type": "tidelift" + } + ], + "time": "2022-08-04T09:53:51+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.62.1", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", + "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.0", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2022-09-02T07:48:13+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.2" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^0.12", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.2" + }, + "time": "2021-10-15T11:40:02+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.8", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.3" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.8" + }, + "time": "2022-09-12T23:36:20+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + }, + "time": "2022-09-04T07:30:47+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.14.2", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "9a8218511eb1a0965629ff820dda25985440aefc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/9a8218511eb1a0965629ff820dda25985440aefc", + "reference": "9a8218511eb1a0965629ff820dda25985440aefc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.14.2" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2022-10-28T22:51:32+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "1.28.0", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "6e81cf39bbd93ebc3a4e8150444c41e8aa9b769a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/6e81cf39bbd93ebc3a4e8150444c41e8aa9b769a", + "reference": "6e81cf39bbd93ebc3a4e8150444c41e8aa9b769a", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "ezyang/htmlpurifier": "^4.15", + "maennchen/zipstream-php": "^2.1", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^7.4 || ^8.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^1.0 || ^2.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.2.4", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.28.0" + }, + "time": "2023-02-25T12:24:49+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8", + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:51:26+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.11.8", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "f455acf3645262ae389b10e9beba0c358aa6994e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/f455acf3645262ae389b10e9beba0c358aa6994e", + "reference": "f455acf3645262ae389b10e9beba0c358aa6994e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.11.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.8" + }, + "time": "2022-07-28T14:25:11+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.2.2" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2021-10-10T03:01:02+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.5.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/a161a26d917604dc6d3aa25100fddf2556e9f35d", + "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10", + "ext-ctype": "*", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.5.1" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2022-09-16T03:22:46+00:00" + }, + { + "name": "rmccue/requests", + "version": "v2.0.5", + "source": { + "type": "git", + "url": "https://github.com/WordPress/Requests.git", + "reference": "b717f1d2f4ef7992ec0c127747ed8b7e170c2f49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/WordPress/Requests/zipball/b717f1d2f4ef7992ec0c127747ed8b7e170c2f49", + "reference": "b717f1d2f4ef7992ec0c127747ed8b7e170c2f49", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.6" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7", + "php-parallel-lint/php-console-highlighter": "^0.5.0", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.0", + "requests/test-server": "dev-main", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.6", + "wp-coding-standards/wpcs": "^2.0", + "yoast/phpunit-polyfills": "^1.0.0" + }, + "type": "library", + "autoload": { + "files": [ + "library/Deprecated.php" + ], + "psr-4": { + "WpOrg\\Requests\\": "src/" + }, + "classmap": [ + "library/Requests.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Ryan McCue", + "homepage": "https://rmccue.io/" + }, + { + "name": "Alain Schlesser", + "homepage": "https://github.com/schlessera" + }, + { + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl" + }, + { + "name": "Contributors", + "homepage": "https://github.com/WordPress/Requests/graphs/contributors" + } + ], + "description": "A HTTP library written in PHP, for human beings.", + "homepage": "https://requests.ryanmccue.info/", + "keywords": [ + "curl", + "fsockopen", + "http", + "idna", + "ipv6", + "iri", + "sockets" + ], + "support": { + "docs": "https://requests.ryanmccue.info/", + "issues": "https://github.com/WordPress/Requests/issues", + "source": "https://github.com/WordPress/Requests" + }, + "time": "2022-10-11T08:15:28+00:00" + }, + { + "name": "stella-maris/clock", + "version": "0.1.6", + "source": { + "type": "git", + "url": "https://github.com/stella-maris-solutions/clock.git", + "reference": "a94228dac03c9a8411198ce8c8dacbbe99c930c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stella-maris-solutions/clock/zipball/a94228dac03c9a8411198ce8c8dacbbe99c930c3", + "reference": "a94228dac03c9a8411198ce8c8dacbbe99c930c3", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "StellaMaris\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Heigl", + "role": "Maintainer" + } + ], + "description": "A pre-release of the proposed PSR-20 Clock-Interface", + "homepage": "https://gitlab.com/stella-maris/clock", + "keywords": [ + "clock", + "datetime", + "point in time", + "psr20" + ], + "support": { + "issues": "https://github.com/stella-maris-solutions/clock/issues", + "source": "https://github.com/stella-maris-solutions/clock/tree/0.1.6" + }, + "time": "2022-09-27T15:03:11+00:00" + }, + { + "name": "symfony/console", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/a1282bd0c096e0bdb8800b104177e2ce404d8815", + "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-26T21:42:49+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/0dd5e36b80e1de97f8f74ed7023ac2b837a36443", + "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/699a26ce5ec656c198bf6e26398b0f0818c7e504", + "reference": "699a26ce5ec656c198bf6e26398b0f0818c7e504", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T16:23:08+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-05T16:51:07+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-29T07:42:06+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/792a1856d2b95273f0e1c3435785f1d01a60ecc6", + "reference": "792a1856d2b95273f0e1c3435785f1d01a60ecc6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-12T09:44:59+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8fc1ffe753948c47a103a809cdd6a4a8458b3254", + "reference": "8fc1ffe753948c47a103a809cdd6a4a8458b3254", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.1", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.1", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T18:06:36+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "7e19813c0b43387c55665780c4caea505cc48391" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7e19813c0b43387c55665780c4caea505cc48391", + "reference": "7e19813c0b43387c55665780c4caea505cc48391", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4" + }, + "require-dev": { + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-28T16:23:08+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "f440f066d57691088d998d6e437ce98771144618" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/f440f066d57691088d998d6e437ce98771144618", + "reference": "f440f066d57691088d998d6e437ce98771144618", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^5.2|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-19T08:10:53+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "433d05519ce6990bf3530fba6957499d327395c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-10T07:21:04+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/a41886c1c81dc075a09c71fe6db5b9d68c79de23", + "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/process", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/a6506e99cfad7059b1ab5cab395854a0a0c21292", + "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "95effeb9d6e2cec861cee06bf5bbf82d09aea7f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/95effeb9d6e2cec861cee06bf5bbf82d09aea7f5", + "reference": "95effeb9d6e2cec861cee06bf5bbf82d09aea7f5", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-18T13:12:43+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-30T19:18:58+00:00" + }, + { + "name": "symfony/string", + "version": "v6.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "823f143370880efcbdfa2dbca946b3358c4707e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/823f143370880efcbdfa2dbca946b3358c4707e5", + "reference": "823f143370880efcbdfa2dbca946b3358c4707e5", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-10T09:34:31+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "e6cd330e5a072518f88d65148f3f165541807494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/e6cd330e5a072518f88d65148f3f165541807494", + "reference": "e6cd330e5a072518f88d65148f3f165541807494", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-07T08:04:03+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/606be0f48e05116baef052f7f3abdb345c8e02cc", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "e03519f7b1ce1d3c0b74f751892bb41d549a2d98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/e03519f7b1ce1d3c0b74f751892bb41d549a2d98", + "reference": "e03519f7b1ce1d3c0b74f751892bb41d549a2d98", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.1.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-09-09T09:34:27+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0f0adde127f24548e23cbde83bcaeadc491c551f", + "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-07T08:04:03+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.5", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/4348a3a06651827a27d989ad1d13efec6bb49b19", + "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.5" + }, + "time": "2022-09-12T13:28:28+00:00" + }, + { + "name": "twilio/sdk", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/twilio/twilio-php.git", + "reference": "f907461ea5fd0a1d6850415b0a07117a980aae61" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twilio/twilio-php/zipball/f907461ea5fd0a1d6850415b0a07117a980aae61", + "reference": "f907461ea5fd0a1d6850415b0a07117a980aae61", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "apigen/apigen": "^4.1", + "phpunit/phpunit": "4.5.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Twilio\\": "Twilio/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Twilio API Team", + "email": "api@twilio.com" + } + ], + "description": "A PHP wrapper for Twilio's API", + "homepage": "http://github.com/twilio/twilio-php", + "keywords": [ + "api", + "sms", + "twilio" + ], + "support": { + "issues": "https://github.com/twilio/twilio-php/issues", + "source": "https://github.com/twilio/twilio-php/tree/master" + }, + "time": "2016-08-15T19:35:00+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.5.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.5-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2022-10-16T01:01:54+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "vonage/client-core", + "version": "3.1.5", + "source": { + "type": "git", + "url": "git@github.com:Vonage/vonage-php-sdk-core.git", + "reference": "783d812e16d41282f7434b05e51224be7bb2eea6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Vonage/vonage-php-sdk-core/zipball/783d812e16d41282f7434b05e51224be7bb2eea6", + "reference": "783d812e16d41282f7434b05e51224be7bb2eea6", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.11", + "ext-json": "*", + "ext-mbstring": "*", + "laminas/laminas-diactoros": "^2.4", + "lcobucci/jwt": "^3.4|^4.0", + "php": "~7.4 || ~8.0 || ~8.1", + "psr/container": "^1.0 | ^2.0", + "psr/http-client-implementation": "^1.0", + "psr/log": "^1.1|^2.0|^3.0", + "vonage/nexmo-bridge": "^0.1.0" + }, + "require-dev": { + "guzzlehttp/guzzle": ">=6", + "helmich/phpunit-json-assert": "^3.3", + "php": "~7.4 || ~8.0 || ~8.1", + "php-http/mock-client": "^1.4", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8.5|^9.4", + "roave/security-advisories": "dev-latest", + "softcreatr/jsonpath": "^0.7 || ^0.8", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Vonage\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "James Seconde", + "email": "jim.seconde@vonage.com", + "role": "PHP Developer Advocate" + } + ], + "description": "PHP Client for using Vonage's API.", + "homepage": "https://developer.nexmo.com", + "support": { + "docs": "https://developer.vonage.com", + "email": "devrel@vonage.com", + "issues": "https://github.com/Vonage/vonage-php-sdk-core/issues", + "source": "https://github.com/Vonage/vonage-php-sdk-core" + }, + "time": "2022-10-19T14:27:22+00:00" + }, + { + "name": "vonage/nexmo-bridge", + "version": "0.1.1", + "source": { + "type": "git", + "url": "https://github.com/Nexmo/vonage-php-nexmo-bridge.git", + "reference": "36490dcc5915f12abeaa233c6098e0dce14bbb0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nexmo/vonage-php-nexmo-bridge/zipball/36490dcc5915f12abeaa233c6098e0dce14bbb0a", + "reference": "36490dcc5915f12abeaa233c6098e0dce14bbb0a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.39", + "phpunit/phpunit": "^7.4", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Vonage\\NexmoBridge\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris.tankersley@vonage.com" + } + ], + "description": "Provides a bridge for using the Vonage PHP SDK with the older Nexmo namespace", + "support": { + "issues": "https://github.com/Nexmo/vonage-php-nexmo-bridge/issues", + "source": "https://github.com/Nexmo/vonage-php-nexmo-bridge/tree/0.1.1" + }, + "time": "2022-01-18T13:39:33+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "webpatser/laravel-uuid", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/webpatser/laravel-uuid.git", + "reference": "df92ebbc5ea71ee9e0d6e2861178be42ef7eb330" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webpatser/laravel-uuid/zipball/df92ebbc5ea71ee9e0d6e2861178be42ef7eb330", + "reference": "df92ebbc5ea71ee9e0d6e2861178be42ef7eb330", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0" + }, + "require-dev": { + "fakerphp/faker": "^1.9.1", + "phpunit/phpunit": "^9.3.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Webpatser\\Uuid\\UuidServiceProvider" + ], + "aliases": { + "Uuid": "Webpatser\\Uuid\\Uuid" + } + } + }, + "autoload": { + "psr-4": { + "Webpatser\\Uuid\\": "src/Webpatser/Uuid/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoph Kempen", + "email": "christoph@downsized.nl" + } + ], + "description": "Laravel package to generate and to validate a universally unique identifier (UUID) according to the RFC 4122 standard. Support for version 1, 3, 4 and 5 UUIDs are built-in.", + "homepage": "https://github.com/webpatser/laravel-uuid", + "keywords": [ + "UUID RFC4122" + ], + "support": { + "issues": "https://github.com/webpatser/laravel-uuid/issues", + "source": "https://github.com/webpatser/laravel-uuid" + }, + "time": "2021-03-09T07:19:24+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.20-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" + }, + "time": "2022-07-20T13:12:54+00:00" + }, + { + "name": "filp/whoops", + "version": "2.14.5", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.5" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2022-01-07T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/breeze", + "version": "v1.14.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/breeze.git", + "reference": "e1816890159f7c772066cce0317d2b54904b701f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/breeze/zipball/e1816890159f7c772066cce0317d2b54904b701f", + "reference": "e1816890159f7c772066cce0317d2b54904b701f", + "shasum": "" + }, + "require": { + "illuminate/console": "^9.21", + "illuminate/filesystem": "^9.21", + "illuminate/support": "^9.21", + "illuminate/validation": "^9.21", + "php": "^8.0.2" + }, + "conflict": { + "laravel/framework": "<9.37.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Breeze\\BreezeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Breeze\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.", + "keywords": [ + "auth", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/breeze/issues", + "source": "https://github.com/laravel/breeze" + }, + "time": "2022-10-26T08:00:51+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/1d276e4c803397a26cc337df908f55c2a4e90d86", + "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11.0", + "illuminate/view": "^9.27", + "laravel-zero/framework": "^9.1.3", + "mockery/mockery": "^1.5.0", + "nunomaduro/larastan": "^2.2", + "nunomaduro/termwind": "^1.14.0", + "pestphp/pest": "^1.22.1" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2022-09-13T15:07:15+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.16.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "7d1ed5f856ec8b9708712e3fc0708fcabe114659" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/7d1ed5f856ec8b9708712e3fc0708fcabe114659", + "reference": "7d1ed5f856ec8b9708712e3fc0708fcabe114659", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0", + "illuminate/contracts": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "php": "^7.3|^8.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2022-09-28T13:13:22+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.5.1" + }, + "time": "2022-09-07T15:32:08+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v6.3.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/0f6349c3ed5dd28467087b08fb59384bb458a22b", + "reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.14.5", + "php": "^8.0.0", + "symfony/console": "^6.0.2" + }, + "require-dev": { + "brianium/paratest": "^6.4.1", + "laravel/framework": "^9.26.1", + "laravel/pint": "^1.1.1", + "nunomaduro/larastan": "^1.0.3", + "nunomaduro/mock-final-classes": "^1.1.0", + "orchestra/testbench": "^7.7", + "phpunit/phpunit": "^9.5.23", + "spatie/ignition": "^1.4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "6.x-dev" + }, + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-09-29T12:29:49+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.18", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/12fddc491826940cf9b7e88ad9664cf51f0f6d0a", + "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.14", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.18" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-10-27T13:35:33+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.26", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2022-10-28T06:00:21+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-03T09:37:03+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:03:37+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-12T14:47:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-11-09T10:57:15+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "b1b974348750925b717fa8c8b97a0db0d1aa40ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/b1b974348750925b717fa8c8b97a0db0d1aa40ca", + "reference": "b1b974348750925b717fa8c8b97a0db0d1aa40ca", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0", + "php": "^8.0", + "spatie/backtrace": "^1.2", + "symfony/http-foundation": "^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", + "symfony/process": "^5.2|^6.0", + "symfony/var-dumper": "^5.2|^6.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.3.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-08-08T10:10:20+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "dd3d456779108d7078baf4e43f8c2b937d9794a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/dd3d456779108d7078baf4e43f8c2b937d9794a1", + "reference": "dd3d456779108d7078baf4e43f8c2b937d9794a1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "monolog/monolog": "^2.0", + "php": "^8.0", + "spatie/flare-client-php": "^1.1", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-08-26T11:51:15+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2b79cf6ed40946b64ac6713d7d2da8a9d87f612b", + "reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^8.77|^9.27", + "monolog/monolog": "^2.3", + "php": "^8.0", + "spatie/flare-client-php": "^1.0.1", + "spatie/ignition": "^1.4.1", + "symfony/console": "^5.0|^6.0", + "symfony/var-dumper": "^5.0|^6.0" + }, + "require-dev": { + "filp/whoops": "^2.14", + "livewire/livewire": "^2.8|dev-develop", + "mockery/mockery": "^1.4", + "nunomaduro/larastan": "^1.0", + "orchestra/testbench": "^6.23|^7.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.27" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-10-26T17:39:54+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.0.2" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..1f3ff8c --- /dev/null +++ b/config/app.php @@ -0,0 +1,219 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL'), + + 'asset_url' => env('ASSET_URL'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'America/Bogota', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'es', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => 'file', + // 'store' => 'redis', + ], + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + \ArieTimmerman\Laravel\URLShortener\ServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + Maatwebsite\Excel\ExcelServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => Facade::defaultAliases()->merge([ + 'Excel' => Maatwebsite\Excel\Facades\Excel::class, + //'SMS' => SimpleSoftwareIO\SMS\Facades\SMS::class, + // 'ExampleClass' => App\Example\ExampleClass::class, + ])->toArray(), + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..d8c6cee --- /dev/null +++ b/config/auth.php @@ -0,0 +1,111 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..1688242 --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,70 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'host' => env('PUSHER_HOST', 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..33bb295 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,110 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, or DynamoDB cache + | stores there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + +]; diff --git a/config/cors.php b/config/cors.php new file mode 100644 index 0000000..8a39e6d --- /dev/null +++ b/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..137ad18 --- /dev/null +++ b/config/database.php @@ -0,0 +1,151 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/excel.php b/config/excel.php new file mode 100644 index 0000000..987883e --- /dev/null +++ b/config/excel.php @@ -0,0 +1,333 @@ + [ + + /* + |-------------------------------------------------------------------------- + | Chunk size + |-------------------------------------------------------------------------- + | + | When using FromQuery, the query is automatically chunked. + | Here you can specify how big the chunk should be. + | + */ + 'chunk_size' => 1000, + + /* + |-------------------------------------------------------------------------- + | Pre-calculate formulas during export + |-------------------------------------------------------------------------- + */ + 'pre_calculate_formulas' => false, + + /* + |-------------------------------------------------------------------------- + | Enable strict null comparison + |-------------------------------------------------------------------------- + | + | When enabling strict null comparison empty cells ('') will + | be added to the sheet. + */ + 'strict_null_comparison' => false, + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV exports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'line_ending' => PHP_EOL, + 'use_bom' => false, + 'include_separator_line' => false, + 'excel_compatibility' => false, + 'output_encoding' => '', + 'test_auto_detect' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], + ], + + 'imports' => [ + + /* + |-------------------------------------------------------------------------- + | Read Only + |-------------------------------------------------------------------------- + | + | When dealing with imports, you might only be interested in the + | data that the sheet exists. By default we ignore all styles, + | however if you want to do some logic based on style data + | you can enable it by setting read_only to false. + | + */ + 'read_only' => true, + + /* + |-------------------------------------------------------------------------- + | Ignore Empty + |-------------------------------------------------------------------------- + | + | When dealing with imports, you might be interested in ignoring + | rows that have null values or empty strings. By default rows + | containing empty strings or empty values are not ignored but can be + | ignored by enabling the setting ignore_empty to true. + | + */ + 'ignore_empty' => false, + + /* + |-------------------------------------------------------------------------- + | Heading Row Formatter + |-------------------------------------------------------------------------- + | + | Configure the heading row formatter. + | Available options: none|slug|custom + | + */ + 'heading_row' => [ + 'formatter' => 'slug', + ], + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV imports. + | + */ + 'csv' => [ + 'delimiter' => null, + 'enclosure' => '"', + 'escape_character' => '\\', + 'contiguous' => false, + 'input_encoding' => 'UTF-8', + ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Extension detector + |-------------------------------------------------------------------------- + | + | Configure here which writer/reader type should be used when the package + | needs to guess the correct type based on the extension alone. + | + */ + 'extension_detector' => [ + 'xlsx' => Excel::XLSX, + 'xlsm' => Excel::XLSX, + 'xltx' => Excel::XLSX, + 'xltm' => Excel::XLSX, + 'xls' => Excel::XLS, + 'xlt' => Excel::XLS, + 'ods' => Excel::ODS, + 'ots' => Excel::ODS, + 'slk' => Excel::SLK, + 'xml' => Excel::XML, + 'gnumeric' => Excel::GNUMERIC, + 'htm' => Excel::HTML, + 'html' => Excel::HTML, + 'csv' => Excel::CSV, + 'tsv' => Excel::TSV, + + /* + |-------------------------------------------------------------------------- + | PDF Extension + |-------------------------------------------------------------------------- + | + | Configure here which Pdf driver should be used by default. + | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF + | + */ + 'pdf' => Excel::DOMPDF, + ], + + /* + |-------------------------------------------------------------------------- + | Value Binder + |-------------------------------------------------------------------------- + | + | PhpSpreadsheet offers a way to hook into the process of a value being + | written to a cell. In there some assumptions are made on how the + | value should be formatted. If you want to change those defaults, + | you can implement your own default value binder. + | + | Possible value binders: + | + | [x] Maatwebsite\Excel\DefaultValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class + | + */ + 'value_binder' => [ + 'default' => Maatwebsite\Excel\DefaultValueBinder::class, + ], + + 'cache' => [ + /* + |-------------------------------------------------------------------------- + | Default cell caching driver + |-------------------------------------------------------------------------- + | + | By default PhpSpreadsheet keeps all cell values in memory, however when + | dealing with large files, this might result into memory issues. If you + | want to mitigate that, you can configure a cell caching driver here. + | When using the illuminate driver, it will store each value in the + | cache store. This can slow down the process, because it needs to + | store each value. You can use the "batch" store if you want to + | only persist to the store when the memory limit is reached. + | + | Drivers: memory|illuminate|batch + | + */ + 'driver' => 'memory', + + /* + |-------------------------------------------------------------------------- + | Batch memory caching + |-------------------------------------------------------------------------- + | + | When dealing with the "batch" caching driver, it will only + | persist to the store when the memory limit is reached. + | Here you can tweak the memory limit to your liking. + | + */ + 'batch' => [ + 'memory_limit' => 60000, + ], + + /* + |-------------------------------------------------------------------------- + | Illuminate cache + |-------------------------------------------------------------------------- + | + | When using the "illuminate" caching driver, it will automatically use + | your default cache store. However if you prefer to have the cell + | cache on a separate store, you can configure the store name here. + | You can use any store defined in your cache config. When leaving + | at "null" it will use the default store. + | + */ + 'illuminate' => [ + 'store' => null, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Transaction Handler + |-------------------------------------------------------------------------- + | + | By default the import is wrapped in a transaction. This is useful + | for when an import may fail and you want to retry it. With the + | transactions, the previous import gets rolled-back. + | + | You can disable the transaction handler by setting this to null. + | Or you can choose a custom made transaction handler here. + | + | Supported handlers: null|db + | + */ + 'transactions' => [ + 'handler' => 'db', + 'db' => [ + 'connection' => null, + ], + ], + + 'temporary_files' => [ + + /* + |-------------------------------------------------------------------------- + | Local Temporary Path + |-------------------------------------------------------------------------- + | + | When exporting and importing files, we use a temporary file, before + | storing reading or downloading. Here you can customize that path. + | + */ + 'local_path' => storage_path('framework/cache/laravel-excel'), + + /* + |-------------------------------------------------------------------------- + | Remote Temporary Disk + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup with queues in which you + | cannot rely on having a shared local temporary path, you might + | want to store the temporary file on a shared disk. During the + | queue executing, we'll retrieve the temporary file from that + | location instead. When left to null, it will always use + | the local path. This setting only has effect when using + | in conjunction with queued imports and exports. + | + */ + 'remote_disk' => null, + 'remote_prefix' => null, + + /* + |-------------------------------------------------------------------------- + | Force Resync + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup as above, it's possible + | for the clean up that occurs after entire queue has been run to only + | cleanup the server that the last AfterImportJob runs on. The rest of the server + | would still have the local temporary file stored on it. In this case your + | local storage limits can be exceeded and future imports won't be processed. + | To mitigate this you can set this config value to be true, so that after every + | queued chunk is processed the local temporary file is deleted on the server that + | processed it. + | + */ + 'force_resync_remote' => null, + ], +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..c68a719 --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,76 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been set up for each driver as an example of the required values. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + 'throw' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + 'throw' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('photos') => storage_path('app/photos'), + ], + +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 0000000..bcd3be4 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/config/livewire.php b/config/livewire.php new file mode 100644 index 0000000..59f8d5c --- /dev/null +++ b/config/livewire.php @@ -0,0 +1,158 @@ + 'App\\Http\\Livewire', + + /* + |-------------------------------------------------------------------------- + | View Path + |-------------------------------------------------------------------------- + | + | This value sets the path for Livewire component views. This affects + | file manipulation helper commands like `artisan make:livewire`. + | + */ + + 'view_path' => resource_path('views/livewire'), + + /* + |-------------------------------------------------------------------------- + | Layout + |-------------------------------------------------------------------------- + | The default layout view that will be used when rendering a component via + | Route::get('/some-endpoint', SomeComponent::class);. In this case the + | the view returned by SomeComponent will be wrapped in "layouts.app" + | + */ + + 'layout' => 'layouts.app', + + /* + |-------------------------------------------------------------------------- + | Livewire Assets URL + |-------------------------------------------------------------------------- + | + | This value sets the path to Livewire JavaScript assets, for cases where + | your app's domain root is not the correct path. By default, Livewire + | will load its JavaScript assets from the app's "relative root". + | + | Examples: "/assets", "myurl.com/app". + | + */ + + 'asset_url' => null, + + /* + |-------------------------------------------------------------------------- + | Livewire App URL + |-------------------------------------------------------------------------- + | + | This value should be used if livewire assets are served from CDN. + | Livewire will communicate with an app through this url. + | + | Examples: "https://my-app.com", "myurl.com/app". + | + */ + + 'app_url' => null, + + /* + |-------------------------------------------------------------------------- + | Livewire Endpoint Middleware Group + |-------------------------------------------------------------------------- + | + | This value sets the middleware group that will be applied to the main + | Livewire "message" endpoint (the endpoint that gets hit everytime + | a Livewire component updates). It is set to "web" by default. + | + */ + + 'middleware_group' => 'web', + + /* + |-------------------------------------------------------------------------- + | Livewire Temporary File Uploads Endpoint Configuration + |-------------------------------------------------------------------------- + | + | Livewire handles file uploads by storing uploads in a temporary directory + | before the file is validated and stored permanently. All file uploads + | are directed to a global endpoint for temporary storage. The config + | items below are used for customizing the way the endpoint works. + | + */ + + 'temporary_file_upload' => [ + 'disk' => null, // Example: 'local', 's3' Default: 'default' + 'rules' => null, // Example: ['file', 'mimes:png,jpg'] Default: ['required', 'file', 'max:12288'] (12MB) + 'directory' => null, // Example: 'tmp' Default 'livewire-tmp' + 'middleware' => null, // Example: 'throttle:5,1' Default: 'throttle:60,1' + 'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs. + 'png', 'gif', 'bmp', 'svg', 'wav', 'mp4', + 'mov', 'avi', 'wmv', 'mp3', 'm4a', + 'jpg', 'jpeg', 'mpga', 'webp', 'wma', + ], + 'max_upload_time' => 5, // Max duration (in minutes) before an upload gets invalidated. + ], + + /* + |-------------------------------------------------------------------------- + | Manifest File Path + |-------------------------------------------------------------------------- + | + | This value sets the path to the Livewire manifest file. + | The default should work for most cases (which is + | "/bootstrap/cache/livewire-components.php"), but for specific + | cases like when hosting on Laravel Vapor, it could be set to a different value. + | + | Example: for Laravel Vapor, it would be "/tmp/storage/bootstrap/cache/livewire-components.php". + | + */ + + 'manifest_path' => null, + + /* + |-------------------------------------------------------------------------- + | Back Button Cache + |-------------------------------------------------------------------------- + | + | This value determines whether the back button cache will be used on pages + | that contain Livewire. By disabling back button cache, it ensures that + | the back button shows the correct state of components, instead of + | potentially stale, cached data. + | + | Setting it to "false" (default) will disable back button cache. + | + */ + + 'back_button_cache' => false, + + /* + |-------------------------------------------------------------------------- + | Render On Redirect + |-------------------------------------------------------------------------- + | + | This value determines whether Livewire will render before it's redirected + | or not. Setting it to "false" (default) will mean the render method is + | skipped when redirecting. And "true" will mean the render method is + | run before redirecting. Browsers bfcache can store a potentially + | stale view if render is skipped on redirect. + | + */ + + 'render_on_redirect' => false, + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..5aa1dbb --- /dev/null +++ b/config/logging.php @@ -0,0 +1,122 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..534395a --- /dev/null +++ b/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN'), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..6112837 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'database'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/sanctum.php b/config/sanctum.php new file mode 100644 index 0000000..529cfdc --- /dev/null +++ b/config/sanctum.php @@ -0,0 +1,67 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort() + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..5266528 --- /dev/null +++ b/config/services.php @@ -0,0 +1,39 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'mercadopago' =>[ + 'key' => env('MP_PUBLIC_KEY'), + 'token' => env('MP_ACCESS_TOKEN'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..cbf7ad5 --- /dev/null +++ b/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 525600), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/config/short-url.php b/config/short-url.php new file mode 100644 index 0000000..395dc0c --- /dev/null +++ b/config/short-url.php @@ -0,0 +1,164 @@ + '/short', + + /* + |-------------------------------------------------------------------------- + | Middleware + |-------------------------------------------------------------------------- + | + | Define any middleware that the default short URL route will use. + | + */ + 'middleware' => [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Eloquent Factories + |-------------------------------------------------------------------------- + | + | Define eloquent factories that you will use for your testing purposes. + | + */ + 'factories' => [ + \AshAllenDesign\ShortURL\Models\ShortURL::class => \AshAllenDesign\ShortURL\Models\Factories\ShortURLFactory::class, + \AshAllenDesign\ShortURL\Models\ShortURLVisit::class => \AshAllenDesign\ShortURL\Models\Factories\ShortURLVisitFactory::class, + ], + + /* + |-------------------------------------------------------------------------- + | Custom Routing + |-------------------------------------------------------------------------- + | + | If the default route is disabled, this prevents any visitors + | from using the default route that comes with this library. + | This allows you to define your own route that points to + | the controller at: + | + | AshAllenDesign\ShortURL\Controllers\ShortURLController + | + */ + 'disable_default_route' => false, + + /* + |-------------------------------------------------------------------------- + | Forwards query parameters + |-------------------------------------------------------------------------- + | + | Here you can specify if the newly created short URLs will forward + | the query parameters to the destination by default. This option + | can be overridden when creating the short URL with the + | ->forwardQueryParams() method. + | + | eg: https://yoursite.com/short/xxx?a=b => https://destination.com/page?a=b + | + */ + 'forward_query_params' => false, + + /* + |-------------------------------------------------------------------------- + | Enforce HTTPS in the destination URL + |-------------------------------------------------------------------------- + | + | Here you may specify if the visitor is redirected to the HTTPS + | version of the destination URL by default. This option can be + | overridden when creating the short URL with the ->secure() + | method. + | + */ + 'enforce_https' => true, + + /* + |-------------------------------------------------------------------------- + | URL Length + |-------------------------------------------------------------------------- + | + | The character length of the shortened URL. The 'key_length' must be + | at least 3. However, for performance reasons, it is recommended to + | not use a 'key_length' lower than 5. + | + | e.g. - Using a length of 3 would result in yourdomain.com/XXX + | - Using a length of 5 would result in yourdomain.com/XXXXX + | + | Note: This is the desired length and will act as a minimum + | length, not as a fixed length. For example, if all + | of the possible 3 character-length keys have been + | used, a 4 character long key will be created. + | + */ + 'key_length' => 5, + + /* + |-------------------------------------------------------------------------- + | Key Salt + |-------------------------------------------------------------------------- + | + | Define the salt that is used to create the unique short + | URL keys. This is used to ensure that the randomly + | generated keys are unique. + | + */ + 'key_salt' => 'AshAllenDesign\ShortURL', + + /* + |-------------------------------------------------------------------------- + | Alphabet + |-------------------------------------------------------------------------- + | + | Define the characters allowed in the output short URL keys. + | The 'alphabet' must be at least 16 unique characters + | and cannot contain spaces. + | + */ + 'alphabet' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', + + /* + |-------------------------------------------------------------------------- + | Tracking + |-------------------------------------------------------------------------- + | + | Define which fields are recorded if a shortened URL has + | tracking enabled. Also define whether if tracking + | is enabled by default. Each of these options can + | be overridden when creating a short URL. + | + */ + 'tracking' => [ + 'default_enabled' => true, + + 'fields' => [ + 'ip_address' => true, + 'operating_system' => true, + 'operating_system_version' => true, + 'browser' => true, + 'browser_version' => true, + 'referer_url' => true, + 'device_type' => true, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Config Validation + |-------------------------------------------------------------------------- + | + | Choose whether if you want the config to be validated. This + | can be useful for ensuring that your config values are + | safe to use. + | + */ + 'validate_config' => false, +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..41f8ae8 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,40 @@ + + */ +class UserFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return static + */ + public function unverified() + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..cf6b776 --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +}; diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..fcacb80 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +}; diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..1719198 --- /dev/null +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 0000000..6c81fd2 --- /dev/null +++ b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,37 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/database/migrations/2019_12_22_015115_create_short_urls_table.php b/database/migrations/2019_12_22_015115_create_short_urls_table.php new file mode 100644 index 0000000..7c26ee6 --- /dev/null +++ b/database/migrations/2019_12_22_015115_create_short_urls_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->text('destination_url'); + $table->string('url_key')->unique(); + $table->string('default_short_url'); + $table->boolean('single_use'); + $table->boolean('track_visits'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('short_urls'); + } +} diff --git a/database/migrations/2019_12_22_015214_create_short_url_visits_table.php b/database/migrations/2019_12_22_015214_create_short_url_visits_table.php new file mode 100644 index 0000000..d5f9b3f --- /dev/null +++ b/database/migrations/2019_12_22_015214_create_short_url_visits_table.php @@ -0,0 +1,40 @@ +bigIncrements('id'); + $table->unsignedBigInteger('short_url_id'); + $table->string('ip_address')->nullable(); + $table->string('operating_system')->nullable(); + $table->string('operating_system_version')->nullable(); + $table->string('browser')->nullable(); + $table->string('browser_version')->nullable(); + $table->timestamp('visited_at'); + $table->timestamps(); + + $table->foreign('short_url_id')->references('id')->on('short_urls')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('short_url_visits'); + } +} diff --git a/database/migrations/2020_02_11_224848_update_short_url_table_for_version_two_zero_zero.php b/database/migrations/2020_02_11_224848_update_short_url_table_for_version_two_zero_zero.php new file mode 100644 index 0000000..87adb27 --- /dev/null +++ b/database/migrations/2020_02_11_224848_update_short_url_table_for_version_two_zero_zero.php @@ -0,0 +1,59 @@ +integer('redirect_status_code')->after('track_visits')->default(301); + $table->boolean('track_ip_address')->after('redirect_status_code')->default(false); + $table->boolean('track_operating_system')->after('track_ip_address')->default(false); + $table->boolean('track_operating_system_version')->after('track_operating_system')->default(false); + $table->boolean('track_browser')->after('track_operating_system_version')->default(false); + $table->boolean('track_browser_version')->after('track_browser')->default(false); + $table->boolean('track_referer_url')->after('track_browser_version')->default(false); + $table->boolean('track_device_type')->after('track_referer_url')->default(false); + }); + + DB::table('short_urls')->update([ + 'track_ip_address' => config('short-url.tracking.fields.ip_address'), + 'track_operating_system' => config('short-url.tracking.fields.operating_system'), + 'track_operating_system_version' => config('short-url.tracking.fields.operating_system_version'), + 'track_browser' => config('short-url.tracking.fields.browser'), + 'track_browser_version' => config('short-url.tracking.fields.browser_version'), + 'track_referer_url' => config('short-url.tracking.fields.referer_url'), + 'track_device_type' => config('short-url.tracking.fields.device_type'), + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('short_urls', function (Blueprint $table) { + $table->dropColumn([ + 'redirect_status_code', + 'track_ip_address', + 'track_operating_system', + 'track_operating_system_version', + 'track_browser', + 'track_browser_version', + 'track_referer_url', + 'track_device_type', + ]); + }); + } +} diff --git a/database/migrations/2020_02_12_008432_update_short_url_visits_table_for_version_two_zero_zero.php b/database/migrations/2020_02_12_008432_update_short_url_visits_table_for_version_two_zero_zero.php new file mode 100644 index 0000000..0be11cd --- /dev/null +++ b/database/migrations/2020_02_12_008432_update_short_url_visits_table_for_version_two_zero_zero.php @@ -0,0 +1,33 @@ +string('referer_url')->after('browser_version')->nullable(); + $table->string('device_type')->after('referer_url')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('short_url_visits', function (Blueprint $table) { + $table->dropColumn(['referer_url', 'device_type']); + }); + } +} diff --git a/database/migrations/2020_04_10_224546_update_short_url_table_for_version_three_zero_zero.php b/database/migrations/2020_04_10_224546_update_short_url_table_for_version_three_zero_zero.php new file mode 100644 index 0000000..d1420e8 --- /dev/null +++ b/database/migrations/2020_04_10_224546_update_short_url_table_for_version_three_zero_zero.php @@ -0,0 +1,33 @@ +timestamp('activated_at')->after('track_device_type')->nullable()->default(now()); + $table->timestamp('deactivated_at')->after('activated_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('short_urls', function (Blueprint $table) { + $table->dropColumn(['activated_at', 'deactivated_at']); + }); + } +} diff --git a/database/migrations/2020_04_20_009283_update_short_url_table_add_option_to_forward_query_params.php b/database/migrations/2020_04_20_009283_update_short_url_table_add_option_to_forward_query_params.php new file mode 100644 index 0000000..586a248 --- /dev/null +++ b/database/migrations/2020_04_20_009283_update_short_url_table_add_option_to_forward_query_params.php @@ -0,0 +1,32 @@ +boolean('forward_query_params')->after('single_use')->default(false); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('short_urls', function (Blueprint $table) { + $table->dropColumn(['forward_query_params']); + }); + } +} diff --git a/database/migrations/2022_10_22_202614_create_roles_table.php b/database/migrations/2022_10_22_202614_create_roles_table.php new file mode 100644 index 0000000..a85b130 --- /dev/null +++ b/database/migrations/2022_10_22_202614_create_roles_table.php @@ -0,0 +1,32 @@ +id(); + $table -> string('nombre')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('roles'); + } +}; diff --git a/database/migrations/2022_10_22_202759_create_redes_table.php b/database/migrations/2022_10_22_202759_create_redes_table.php new file mode 100644 index 0000000..e58c110 --- /dev/null +++ b/database/migrations/2022_10_22_202759_create_redes_table.php @@ -0,0 +1,33 @@ +id(); + $table -> string('nombre')->nullable(); + $table -> string('url')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('redes'); + } +}; diff --git a/database/migrations/2022_10_22_202830_create_categorias_table.php b/database/migrations/2022_10_22_202830_create_categorias_table.php new file mode 100644 index 0000000..8877295 --- /dev/null +++ b/database/migrations/2022_10_22_202830_create_categorias_table.php @@ -0,0 +1,36 @@ +id(); + + $table -> string('nombre')->nullable(); + $table -> string('descripcion')->nullable(); + $table -> string('imagen')->nullable(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('categorias'); + } +}; diff --git a/database/migrations/2022_10_22_204343_create_promociones_table.php b/database/migrations/2022_10_22_204343_create_promociones_table.php new file mode 100644 index 0000000..9dfd98e --- /dev/null +++ b/database/migrations/2022_10_22_204343_create_promociones_table.php @@ -0,0 +1,44 @@ +id(); + $table -> string('precio')->nullable(); + $table -> string('img_publicidad')->nullable(); + $table -> string('fecha_limite')->nullable(); + $table -> string('visible')->nullable(); + + $table->unsignedBigInteger('categoria_id')->nullable(); + + $table->foreign('categoria_id') + ->references('id') + ->on('categorias') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('promociones'); + } +}; diff --git a/database/migrations/2022_10_22_204541_add_rol_to_users.php b/database/migrations/2022_10_22_204541_add_rol_to_users.php new file mode 100644 index 0000000..52cc20d --- /dev/null +++ b/database/migrations/2022_10_22_204541_add_rol_to_users.php @@ -0,0 +1,42 @@ + string('cedula')->nullable(); + $table -> string('estado')->nullable(); + $table -> string('img_perfil')->nullable(); + + $table->unsignedBigInteger('rol_id')->nullable(); + + $table->foreign('rol_id') + ->references('id') + ->on('roles') + ->onDelete('cascade') + ->onUpdate('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_22_212527_create_saldos_table.php b/database/migrations/2022_10_22_212527_create_saldos_table.php new file mode 100644 index 0000000..73c3491 --- /dev/null +++ b/database/migrations/2022_10_22_212527_create_saldos_table.php @@ -0,0 +1,41 @@ +id(); + + $table -> string('valor')->nullable(); + $table->unsignedBigInteger('usuario_id')->nullable(); + + $table->foreign('usuario_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('saldos'); + } +}; diff --git a/database/migrations/2022_10_22_212549_create_servicios_table.php b/database/migrations/2022_10_22_212549_create_servicios_table.php new file mode 100644 index 0000000..29a1d5f --- /dev/null +++ b/database/migrations/2022_10_22_212549_create_servicios_table.php @@ -0,0 +1,46 @@ +id(); + + $table -> string('nombre')->nullable(); + $table -> string('descripcion')->nullable(); + $table -> string('color_fondo')->nullable(); + $table -> string('estado')->nullable(); + $table -> string('img')->nullable(); + + $table->unsignedBigInteger('promocion_id')->nullable(); + + $table->foreign('promocion_id') + ->references('id') + ->on('promociones') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('servicios'); + } +}; diff --git a/database/migrations/2022_10_22_212604_create_permisos_table.php b/database/migrations/2022_10_22_212604_create_permisos_table.php new file mode 100644 index 0000000..54e7a26 --- /dev/null +++ b/database/migrations/2022_10_22_212604_create_permisos_table.php @@ -0,0 +1,50 @@ +id(); + + $table -> string('vista')->nullable(); + + $table->unsignedBigInteger('usuario_id')->nullable(); + + $table->foreign('usuario_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('rol_id')->nullable(); + + $table->foreign('rol_id') + ->references('id') + ->on('roles') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('permisos'); + } +}; diff --git a/database/migrations/2022_10_22_212629_create_configuraciones_table.php b/database/migrations/2022_10_22_212629_create_configuraciones_table.php new file mode 100644 index 0000000..2a1b61f --- /dev/null +++ b/database/migrations/2022_10_22_212629_create_configuraciones_table.php @@ -0,0 +1,47 @@ +id(); + + $table -> string('color_boton')->nullable(); + $table -> string('color_barra')->nullable(); + $table -> string('color_menu')->nullable(); + $table -> string('url_logo')->nullable(); + $table -> string('nombre')->nullable(); + $table -> string('slogan')->nullable(); + + $table->unsignedBigInteger('usermodifico_id')->nullable(); + + $table->foreign('usermodifico_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('configuraciones'); + } +}; diff --git a/database/migrations/2022_10_22_214226_add_configuracion_id_to_redes.php b/database/migrations/2022_10_22_214226_add_configuracion_id_to_redes.php new file mode 100644 index 0000000..322b88e --- /dev/null +++ b/database/migrations/2022_10_22_214226_add_configuracion_id_to_redes.php @@ -0,0 +1,38 @@ +unsignedBigInteger('configuracion_id')->nullable(); + + $table->foreign('configuracion_id') + ->references('id') + ->on('configuraciones') + ->onDelete('cascade') + ->onUpdate('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('redes', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_23_034141_create_tarifas_table.php b/database/migrations/2022_10_23_034141_create_tarifas_table.php new file mode 100644 index 0000000..471dee0 --- /dev/null +++ b/database/migrations/2022_10_23_034141_create_tarifas_table.php @@ -0,0 +1,44 @@ +id(); + + $table -> string('pantallas')->nullable(); + $table -> string('dias')->nullable(); + $table -> string('valor')->nullable(); + $table -> string('estado')->nullable(); + $table->unsignedBigInteger('servicio_id')->nullable(); + + $table->foreign('servicio_id') + ->references('id') + ->on('servicios') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('tarifas'); + } +}; diff --git a/database/migrations/2022_10_23_035159_create_preferencials_table.php b/database/migrations/2022_10_23_035159_create_preferencials_table.php new file mode 100644 index 0000000..86f3142 --- /dev/null +++ b/database/migrations/2022_10_23_035159_create_preferencials_table.php @@ -0,0 +1,50 @@ +id(); + + $table -> string('valor')->nullable(); + + $table->unsignedBigInteger('usuario_id')->nullable(); + + $table->foreign('usuario_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('tarifa_id')->nullable(); + + $table->foreign('tarifa_id') + ->references('id') + ->on('tarifas') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('preferencials'); + } +}; diff --git a/database/migrations/2022_10_23_035452_create_cuentas_table.php b/database/migrations/2022_10_23_035452_create_cuentas_table.php new file mode 100644 index 0000000..e4c5a9e --- /dev/null +++ b/database/migrations/2022_10_23_035452_create_cuentas_table.php @@ -0,0 +1,53 @@ +id(); + + $table -> string('correo')->nullable(); + $table -> string('password')->nullable(); + $table -> string('vencimiento')->nullable(); + $table -> string('estado')->nullable(); + + $table->unsignedBigInteger('tarifa_id')->nullable(); + + $table->foreign('tarifa_id') + ->references('id') + ->on('tarifas') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('promocion_id')->nullable(); + + $table->foreign('promocion_id') + ->references('id') + ->on('promociones') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('cuentas'); + } +}; diff --git a/database/migrations/2022_10_23_035743_create_historiales_table.php b/database/migrations/2022_10_23_035743_create_historiales_table.php new file mode 100644 index 0000000..a3fd480 --- /dev/null +++ b/database/migrations/2022_10_23_035743_create_historiales_table.php @@ -0,0 +1,73 @@ +id(); + + $table -> string('fecha_inicio')->nullable(); + $table -> string('fecha_final')->nullable(); + $table -> string('valor')->nullable(); + $table -> string('tipo_pago')->nullable(); + $table -> string('estado')->nullable(); + + $table->unsignedBigInteger('vendedor_id')->nullable(); + + $table->foreign('vendedor_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + + + $table->unsignedBigInteger('tarifa_id')->nullable(); + + $table->foreign('tarifa_id') + ->references('id') + ->on('tarifas') + ->onDelete('cascade') + ->onUpdate('cascade'); + + + $table->unsignedBigInteger('promocion_id')->nullable(); + + $table->foreign('promocion_id') + ->references('id') + ->on('promociones') + ->onDelete('cascade') + ->onUpdate('cascade'); + + + $table->unsignedBigInteger('cliente_id')->nullable(); + + $table->foreign('cliente_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('historiales'); + } +}; diff --git a/database/migrations/2022_10_24_165614_create_notifications_table.php b/database/migrations/2022_10_24_165614_create_notifications_table.php new file mode 100644 index 0000000..4357c9e --- /dev/null +++ b/database/migrations/2022_10_24_165614_create_notifications_table.php @@ -0,0 +1,35 @@ +uuid('id')->primary(); + $table->string('type'); + $table->morphs('notifiable'); + $table->text('data'); + $table->timestamp('read_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('notifications'); + } +}; diff --git a/database/migrations/2022_10_25_211426_add_observaciones_to_tarifas.php b/database/migrations/2022_10_25_211426_add_observaciones_to_tarifas.php new file mode 100644 index 0000000..7c94405 --- /dev/null +++ b/database/migrations/2022_10_25_211426_add_observaciones_to_tarifas.php @@ -0,0 +1,32 @@ + string('observaciones')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('tarifas', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_25_211546_add_observaciones_to_historiales.php b/database/migrations/2022_10_25_211546_add_observaciones_to_historiales.php new file mode 100644 index 0000000..8ab3e72 --- /dev/null +++ b/database/migrations/2022_10_25_211546_add_observaciones_to_historiales.php @@ -0,0 +1,32 @@ + string('observaciones')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('historiales', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_25_214944_add_inicio_to_cuentas.php b/database/migrations/2022_10_25_214944_add_inicio_to_cuentas.php new file mode 100644 index 0000000..14f026a --- /dev/null +++ b/database/migrations/2022_10_25_214944_add_inicio_to_cuentas.php @@ -0,0 +1,32 @@ + string('inicio')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('cuentas', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_26_142552_add_servicio_to_cuentas.php b/database/migrations/2022_10_26_142552_add_servicio_to_cuentas.php new file mode 100644 index 0000000..f762bd9 --- /dev/null +++ b/database/migrations/2022_10_26_142552_add_servicio_to_cuentas.php @@ -0,0 +1,38 @@ +unsignedBigInteger('servicio_id')->nullable(); + + $table->foreign('servicio_id') + ->references('id') + ->on('servicios') + ->onDelete('cascade') + ->onUpdate('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('cuentas', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_26_143334_add_pantallas_to_servicios.php b/database/migrations/2022_10_26_143334_add_pantallas_to_servicios.php new file mode 100644 index 0000000..2b70583 --- /dev/null +++ b/database/migrations/2022_10_26_143334_add_pantallas_to_servicios.php @@ -0,0 +1,32 @@ + string('pantallas')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servicios', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_27_023500_add_celular_to_users.php b/database/migrations/2022_10_27_023500_add_celular_to_users.php new file mode 100644 index 0000000..e360edc --- /dev/null +++ b/database/migrations/2022_10_27_023500_add_celular_to_users.php @@ -0,0 +1,32 @@ + string('celular')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_28_004206_create_recargas_table.php b/database/migrations/2022_10_28_004206_create_recargas_table.php new file mode 100644 index 0000000..fdb0e77 --- /dev/null +++ b/database/migrations/2022_10_28_004206_create_recargas_table.php @@ -0,0 +1,55 @@ +id(); + $table -> string('payment_type_id')->nullable(); + $table -> string('payment_method_id')->nullable(); + $table -> string('status')->nullable(); + $table -> string('monto')->nullable(); + + + + $table->unsignedBigInteger('usuario_id')->nullable(); + + $table->foreign('usuario_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('saldo_id')->nullable(); + + $table->foreign('saldo_id') + ->references('id') + ->on('saldos') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('recargas'); + } +}; diff --git a/database/migrations/2022_10_28_035453_create_historial_cuentas_table.php b/database/migrations/2022_10_28_035453_create_historial_cuentas_table.php new file mode 100644 index 0000000..d1ff639 --- /dev/null +++ b/database/migrations/2022_10_28_035453_create_historial_cuentas_table.php @@ -0,0 +1,47 @@ +id(); + $table->unsignedBigInteger('historial_id')->nullable(); + + $table->foreign('historial_id') + ->references('id') + ->on('historiales') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('cuenta_id')->nullable(); + + $table->foreign('cuenta_id') + ->references('id') + ->on('cuentas') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('historial_cuentas'); + } +}; diff --git a/database/migrations/2022_10_28_061856_create_promocion_tarifas_table.php b/database/migrations/2022_10_28_061856_create_promocion_tarifas_table.php new file mode 100644 index 0000000..682b26a --- /dev/null +++ b/database/migrations/2022_10_28_061856_create_promocion_tarifas_table.php @@ -0,0 +1,49 @@ +id(); + + $table->unsignedBigInteger('promocion_id')->nullable(); + + $table->foreign('promocion_id') + ->references('id') + ->on('promociones') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('tarifa_id')->nullable(); + + $table->foreign('tarifa_id') + ->references('id') + ->on('tarifas') + ->onDelete('cascade') + ->onUpdate('cascade'); + + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('promocion_tarifas'); + } +}; diff --git a/database/migrations/2022_10_28_142855_add_campos_promocion_to_promociones.php b/database/migrations/2022_10_28_142855_add_campos_promocion_to_promociones.php new file mode 100644 index 0000000..d9b3fd2 --- /dev/null +++ b/database/migrations/2022_10_28_142855_add_campos_promocion_to_promociones.php @@ -0,0 +1,34 @@ + string('img')->nullable(); + $table -> string('nombre')->nullable(); + $table -> string('descripcion')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('promociones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_28_201219_add_observaciones_to_cuentas.php b/database/migrations/2022_10_28_201219_add_observaciones_to_cuentas.php new file mode 100644 index 0000000..7fbb409 --- /dev/null +++ b/database/migrations/2022_10_28_201219_add_observaciones_to_cuentas.php @@ -0,0 +1,32 @@ + string('observaciones')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('cuentas', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_29_192554_add_rol_to_tarifa.php b/database/migrations/2022_10_29_192554_add_rol_to_tarifa.php new file mode 100644 index 0000000..7be64bd --- /dev/null +++ b/database/migrations/2022_10_29_192554_add_rol_to_tarifa.php @@ -0,0 +1,39 @@ +unsignedBigInteger('rol_id')->nullable(); + + $table->foreign('rol_id') + ->references('id') + ->on('roles') + ->onDelete('cascade') + ->onUpdate('cascade'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('tarifas', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_31_032204_add_cantidad_to_historiales.php b/database/migrations/2022_10_31_032204_add_cantidad_to_historiales.php new file mode 100644 index 0000000..1ff7f55 --- /dev/null +++ b/database/migrations/2022_10_31_032204_add_cantidad_to_historiales.php @@ -0,0 +1,32 @@ + string('cantidad')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('historiales', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_10_31_050756_add_dias_to_promociones.php b/database/migrations/2022_10_31_050756_add_dias_to_promociones.php new file mode 100644 index 0000000..7e63486 --- /dev/null +++ b/database/migrations/2022_10_31_050756_add_dias_to_promociones.php @@ -0,0 +1,32 @@ + string('dias')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('promociones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_04_123505_create_sliders_table.php b/database/migrations/2022_11_04_123505_create_sliders_table.php new file mode 100644 index 0000000..02cc38d --- /dev/null +++ b/database/migrations/2022_11_04_123505_create_sliders_table.php @@ -0,0 +1,32 @@ +id(); + $table -> string('slider')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('sliders'); + } +}; diff --git a/database/migrations/2022_11_05_140811_add_img_inicio_to_servicios.php b/database/migrations/2022_11_05_140811_add_img_inicio_to_servicios.php new file mode 100644 index 0000000..181c08d --- /dev/null +++ b/database/migrations/2022_11_05_140811_add_img_inicio_to_servicios.php @@ -0,0 +1,32 @@ + string('img_inicio')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servicios', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_05_150750_add_img_top_to_configuraciones.php b/database/migrations/2022_11_05_150750_add_img_top_to_configuraciones.php new file mode 100644 index 0000000..6d2821e --- /dev/null +++ b/database/migrations/2022_11_05_150750_add_img_top_to_configuraciones.php @@ -0,0 +1,36 @@ + string('top_1')->nullable(); + $table -> string('top_2')->nullable(); + $table -> string('top_3')->nullable(); + $table -> string('img_top')->nullable(); + $table -> string('mensaje_top')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('configuraciones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_05_151757_add_premio_to_configuraciones.php b/database/migrations/2022_11_05_151757_add_premio_to_configuraciones.php new file mode 100644 index 0000000..6040dfc --- /dev/null +++ b/database/migrations/2022_11_05_151757_add_premio_to_configuraciones.php @@ -0,0 +1,34 @@ + string('premio_1')->nullable(); + $table -> string('premio_2')->nullable(); + $table -> string('premio_3')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('configuraciones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_07_090942_add_msj_compra_to_configuraciones.php b/database/migrations/2022_11_07_090942_add_msj_compra_to_configuraciones.php new file mode 100644 index 0000000..16be9dc --- /dev/null +++ b/database/migrations/2022_11_07_090942_add_msj_compra_to_configuraciones.php @@ -0,0 +1,32 @@ + string('msj_compra',500)->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('configuraciones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_07_125641_create_usuario_tarifas_table.php b/database/migrations/2022_11_07_125641_create_usuario_tarifas_table.php new file mode 100644 index 0000000..27fe141 --- /dev/null +++ b/database/migrations/2022_11_07_125641_create_usuario_tarifas_table.php @@ -0,0 +1,50 @@ +id(); + $table -> string('precio')->nullable(); + $table -> string('visible')->nullable(); + + $table->unsignedBigInteger('tarifa_id')->nullable(); + + $table->foreign('tarifa_id') + ->references('id') + ->on('tarifas') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('usuario_id')->nullable(); + + $table->foreign('usuario_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('usuario_tarifas'); + } +}; diff --git a/database/migrations/2022_11_09_112736_create_usuario_promos_table.php b/database/migrations/2022_11_09_112736_create_usuario_promos_table.php new file mode 100644 index 0000000..b8c1844 --- /dev/null +++ b/database/migrations/2022_11_09_112736_create_usuario_promos_table.php @@ -0,0 +1,51 @@ +id(); + + $table -> string('precio')->nullable(); + $table -> string('visible')->nullable(); + + $table->unsignedBigInteger('promocion_id')->nullable(); + + $table->foreign('promocion_id') + ->references('id') + ->on('promociones') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('usuario_id')->nullable(); + + $table->foreign('usuario_id') + ->references('id') + ->on('users') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('usuario_promos'); + } +}; diff --git a/database/migrations/2022_11_11_232556_add_msj_whatsapp_to_configuraciones.php b/database/migrations/2022_11_11_232556_add_msj_whatsapp_to_configuraciones.php new file mode 100644 index 0000000..9a33a38 --- /dev/null +++ b/database/migrations/2022_11_11_232556_add_msj_whatsapp_to_configuraciones.php @@ -0,0 +1,32 @@ + string('msj_wp',500)->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('configuraciones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_15_162937_add_perfil_to_historial_cuentas.php b/database/migrations/2022_11_15_162937_add_perfil_to_historial_cuentas.php new file mode 100644 index 0000000..23dcf16 --- /dev/null +++ b/database/migrations/2022_11_15_162937_add_perfil_to_historial_cuentas.php @@ -0,0 +1,32 @@ + string('perfil')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('historial_cuentas', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_15_182424_add_claves_to_historial_configuraciones.php b/database/migrations/2022_11_15_182424_add_claves_to_historial_configuraciones.php new file mode 100644 index 0000000..cd8e7b5 --- /dev/null +++ b/database/migrations/2022_11_15_182424_add_claves_to_historial_configuraciones.php @@ -0,0 +1,37 @@ + string('clave_1')->nullable(); + $table -> string('clave_2')->nullable(); + $table -> string('clave_3')->nullable(); + $table -> string('clave_4')->nullable(); + $table -> string('clave_5')->nullable(); + $table -> string('clave_6')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('configuraciones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_18_001441_add_iptv_to_configuraciones.php b/database/migrations/2022_11_18_001441_add_iptv_to_configuraciones.php new file mode 100644 index 0000000..0949bc4 --- /dev/null +++ b/database/migrations/2022_11_18_001441_add_iptv_to_configuraciones.php @@ -0,0 +1,32 @@ + string('iptv')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('configuraciones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_19_085934_add_descripcion_to_servicios.php b/database/migrations/2022_11_19_085934_add_descripcion_to_servicios.php new file mode 100644 index 0000000..a3fd320 --- /dev/null +++ b/database/migrations/2022_11_19_085934_add_descripcion_to_servicios.php @@ -0,0 +1,32 @@ + string('mensaje',500)->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servicios', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_19_093151_add_mensaje_to_promociones.php b/database/migrations/2022_11_19_093151_add_mensaje_to_promociones.php new file mode 100644 index 0000000..1fb9bcd --- /dev/null +++ b/database/migrations/2022_11_19_093151_add_mensaje_to_promociones.php @@ -0,0 +1,32 @@ + string('mensaje',500)->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('promociones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_11_29_102133_add_top_to_configuraciones.php b/database/migrations/2022_11_29_102133_add_top_to_configuraciones.php new file mode 100644 index 0000000..1223269 --- /dev/null +++ b/database/migrations/2022_11_29_102133_add_top_to_configuraciones.php @@ -0,0 +1,48 @@ + string('top_4')->nullable(); + $table -> string('top_5')->nullable(); + $table -> string('top_6')->nullable(); + $table -> string('top_7')->nullable(); + $table -> string('top_8')->nullable(); + $table -> string('top_9')->nullable(); + $table -> string('top_10')->nullable(); + + $table -> string('premio_4')->nullable(); + $table -> string('premio_5')->nullable(); + $table -> string('premio_6')->nullable(); + $table -> string('premio_7')->nullable(); + $table -> string('premio_8')->nullable(); + $table -> string('premio_9')->nullable(); + $table -> string('premio_10')->nullable(); + + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('configuraciones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_12_11_200249_add_hora_to_configuraciones.php b/database/migrations/2022_12_11_200249_add_hora_to_configuraciones.php new file mode 100644 index 0000000..1ea71b8 --- /dev/null +++ b/database/migrations/2022_12_11_200249_add_hora_to_configuraciones.php @@ -0,0 +1,32 @@ + string('hora')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('configuraciones', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_12_12_080041_add_visto_to_users.php b/database/migrations/2022_12_12_080041_add_visto_to_users.php new file mode 100644 index 0000000..2fdbe32 --- /dev/null +++ b/database/migrations/2022_12_12_080041_add_visto_to_users.php @@ -0,0 +1,32 @@ + string('visto')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2023_01_13_102622_create_logs_table.php b/database/migrations/2023_01_13_102622_create_logs_table.php new file mode 100644 index 0000000..c2e6ded --- /dev/null +++ b/database/migrations/2023_01_13_102622_create_logs_table.php @@ -0,0 +1,53 @@ +id(); + + $table->unsignedBigInteger('historial_id')->nullable(); + + $table->foreign('historial_id') + ->references('id') + ->on('historiales') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('cuenta_id')->nullable(); + + $table->foreign('cuenta_id') + ->references('id') + ->on('cuentas') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + + + + + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('logs'); + } +}; diff --git a/database/migrations/2023_02_26_211133_add_reference_to_recargas.php b/database/migrations/2023_02_26_211133_add_reference_to_recargas.php new file mode 100644 index 0000000..1be3fc5 --- /dev/null +++ b/database/migrations/2023_02_26_211133_add_reference_to_recargas.php @@ -0,0 +1,32 @@ + string('reference')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('recargas', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2023_03_05_155006_add_completa_to_servicios.php b/database/migrations/2023_03_05_155006_add_completa_to_servicios.php new file mode 100644 index 0000000..d35e276 --- /dev/null +++ b/database/migrations/2023_03_05_155006_add_completa_to_servicios.php @@ -0,0 +1,32 @@ + string('completa')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servicios', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2023_04_02_171634_create_tarifa_promos_table.php b/database/migrations/2023_04_02_171634_create_tarifa_promos_table.php new file mode 100644 index 0000000..2794436 --- /dev/null +++ b/database/migrations/2023_04_02_171634_create_tarifa_promos_table.php @@ -0,0 +1,51 @@ +id(); + + $table -> string('precio')->nullable(); + $table -> string('visible')->nullable(); + + $table->unsignedBigInteger('promocion_id')->nullable(); + + $table->foreign('promocion_id') + ->references('id') + ->on('promociones') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->unsignedBigInteger('rol_id')->nullable(); + + $table->foreign('rol_id') + ->references('id') + ->on('roles') + ->onDelete('cascade') + ->onUpdate('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('tarifa_promos'); + } +}; diff --git a/database/migrations/2023_04_10_175054_add_valor_recarga_to_recargas.php b/database/migrations/2023_04_10_175054_add_valor_recarga_to_recargas.php new file mode 100644 index 0000000..fd41ef7 --- /dev/null +++ b/database/migrations/2023_04_10_175054_add_valor_recarga_to_recargas.php @@ -0,0 +1,32 @@ + string('valor_recarga')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('recargas', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2023_04_20_231506_create_jobs_table.php b/database/migrations/2023_04_20_231506_create_jobs_table.php new file mode 100644 index 0000000..a786a89 --- /dev/null +++ b/database/migrations/2023_04_20_231506_create_jobs_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('jobs'); + } +}; diff --git a/database/migrations/2023_05_07_074648_add_perfils_a_sevicios.php b/database/migrations/2023_05_07_074648_add_perfils_a_sevicios.php new file mode 100644 index 0000000..58ceb95 --- /dev/null +++ b/database/migrations/2023_05_07_074648_add_perfils_a_sevicios.php @@ -0,0 +1,37 @@ + string('ver_perfiles')->nullable(); + $table -> string('perfiles')->nullable(); + $table -> string('ver_url')->nullable(); + $table -> string('url')->nullable(); + $table -> string('por_tiempo')->nullable(); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servicios', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2023_07_05_233631_add_nombre_cliente_to_historiale.php b/database/migrations/2023_07_05_233631_add_nombre_cliente_to_historiale.php new file mode 100644 index 0000000..99c6088 --- /dev/null +++ b/database/migrations/2023_07_05_233631_add_nombre_cliente_to_historiale.php @@ -0,0 +1,32 @@ + string('nombre_cliente')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('historiales', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2023_07_24_161803_add_renovacion_to_servicio_table.php b/database/migrations/2023_07_24_161803_add_renovacion_to_servicio_table.php new file mode 100644 index 0000000..7bb8f00 --- /dev/null +++ b/database/migrations/2023_07_24_161803_add_renovacion_to_servicio_table.php @@ -0,0 +1,32 @@ + string('renovacion')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('servicios', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..76d96dc --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,24 @@ +create(); + + // \App\Models\User::factory()->create([ + // 'name' => 'Test User', + // 'email' => 'test@example.com', + // ]); + } +} diff --git a/lang/en/auth.php b/lang/en/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/lang/en/pagination.php b/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/en/passwords.php b/lang/en/passwords.php new file mode 100644 index 0000000..2345a56 --- /dev/null +++ b/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/lang/en/validation.php b/lang/en/validation.php new file mode 100644 index 0000000..5ea01fa --- /dev/null +++ b/lang/en/validation.php @@ -0,0 +1,174 @@ + 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'array' => 'The :attribute must have between :min and :max items.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute must be between :min and :max.', + 'string' => 'The :attribute must be between :min and :max characters.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'doesnt_end_with' => 'The :attribute may not end with one of the following: :values.', + 'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'array' => 'The :attribute must have more than :value items.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'numeric' => 'The :attribute must be greater than :value.', + 'string' => 'The :attribute must be greater than :value characters.', + ], + 'gte' => [ + 'array' => 'The :attribute must have :value items or more.', + 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'numeric' => 'The :attribute must be greater than or equal to :value.', + 'string' => 'The :attribute must be greater than or equal to :value characters.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'array' => 'The :attribute must have less than :value items.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'numeric' => 'The :attribute must be less than :value.', + 'string' => 'The :attribute must be less than :value characters.', + ], + 'lte' => [ + 'array' => 'The :attribute must not have more than :value items.', + 'file' => 'The :attribute must be less than or equal to :value kilobytes.', + 'numeric' => 'The :attribute must be less than or equal to :value.', + 'string' => 'The :attribute must be less than or equal to :value characters.', + ], + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'array' => 'The :attribute must not have more than :max items.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'numeric' => 'The :attribute must not be greater than :max.', + 'string' => 'The :attribute must not be greater than :max characters.', + ], + 'max_digits' => 'The :attribute must not have more than :max digits.', + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'array' => 'The :attribute must have at least :min items.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'numeric' => 'The :attribute must be at least :min.', + 'string' => 'The :attribute must be at least :min characters.', + ], + 'min_digits' => 'The :attribute must have at least :min digits.', + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => [ + 'letters' => 'The :attribute must contain at least one letter.', + 'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.', + 'numbers' => 'The :attribute must contain at least one number.', + 'symbols' => 'The :attribute must contain at least one symbol.', + 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', + ], + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'array' => 'The :attribute must contain :size items.', + 'file' => 'The :attribute must be :size kilobytes.', + 'numeric' => 'The :attribute must be :size.', + 'string' => 'The :attribute must be :size characters.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute must be a valid URL.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/es/pagination.php b/lang/es/pagination.php new file mode 100644 index 0000000..26b7d1f --- /dev/null +++ b/lang/es/pagination.php @@ -0,0 +1,21 @@ + '« Atras', + 'next' => 'Siguiente »', + 'Showing' => 'Mostrando »', + 'results' => 'Resultados', + +]; diff --git a/nohup.out b/nohup.out new file mode 100644 index 0000000..ab0cd6a --- /dev/null +++ b/nohup.out @@ -0,0 +1,133 @@ + + INFO Processing jobs from the [default] queue. + + 2023-04-22 23:53:03 App\Notifications\licencias ............... 18.27ms DONE + 2023-04-22 23:53:03 App\Notifications\licencias ............ 1,517.50ms DONE + 2023-04-22 23:53:05 App\Notifications\licencias ................ 2.62ms DONE + 2023-04-22 23:53:05 App\Notifications\licencias .............. 562.57ms DONE + 2023-04-22 23:53:08 App\Notifications\licencias ................ 3.00ms DONE + 2023-04-22 23:53:08 App\Notifications\licencias .............. 543.15ms DONE + 2023-04-22 23:53:09 App\Notifications\licencias ................ 3.35ms DONE + 2023-04-22 23:53:09 App\Notifications\licencias .............. 538.71ms DONE + 2023-04-22 23:53:13 App\Notifications\licencias ................ 3.07ms DONE + 2023-04-22 23:53:13 App\Notifications\licencias .............. 719.39ms DONE + 2023-04-22 23:53:13 App\Notifications\licencias ................ 2.72ms DONE + 2023-04-22 23:53:13 App\Notifications\licencias .............. 538.14ms DONE + 2023-04-22 23:53:20 App\Notifications\compra ................... 3.62ms DONE + 2023-04-22 23:53:20 App\Notifications\compra ................. 541.51ms DONE + 2023-04-22 23:57:53 App\Notifications\licencias ................ 2.64ms DONE + 2023-04-22 23:57:53 App\Notifications\licencias ............ 1,498.07ms DONE + 2023-04-22 23:57:55 App\Notifications\licencias ................ 3.64ms DONE + 2023-04-22 23:57:55 App\Notifications\licencias .............. 586.66ms DONE + 2023-04-22 23:58:53 App\Notifications\compra .................. 32.49ms DONE + 2023-04-22 23:58:53 App\Notifications\compra .................. 10.58ms FAIL + 2023-04-23 00:00:29 App\Notifications\licencias ................ 2.75ms DONE + 2023-04-23 00:00:29 App\Notifications\licencias ............ 5,547.78ms DONE + 2023-04-23 00:00:34 App\Notifications\licencias ................ 2.73ms DONE + 2023-04-23 00:00:34 App\Notifications\licencias .............. 458.15ms DONE + 2023-04-23 00:01:02 App\Notifications\licencias ................ 3.87ms DONE + 2023-04-23 00:01:02 App\Notifications\licencias ............... 15.10ms FAIL + 2023-04-23 00:01:02 App\Notifications\licencias ................ 3.68ms DONE + 2023-04-23 00:01:02 App\Notifications\licencias ............ 9,569.22ms DONE + 2023-04-23 00:01:11 App\Notifications\compra ................... 3.60ms DONE + 2023-04-23 00:01:11 App\Notifications\compra ................. 472.47ms DONE + 2023-04-23 00:05:33 App\Notifications\Vencimiento .............. 2.44ms FAIL + 2023-04-23 00:05:33 App\Notifications\Vencimiento .............. 1.80ms FAIL + 2023-04-23 00:07:21 App\Notifications\Vencimiento .............. 2.40ms FAIL + 2023-04-23 00:07:21 App\Notifications\Vencimiento .............. 1.76ms FAIL + 2023-04-23 00:08:12 App\Notifications\Vencimiento .............. 3.03ms FAIL + 2023-04-23 00:08:12 App\Notifications\Vencimiento .............. 2.51ms FAIL + 2023-04-23 00:09:39 App\Notifications\Vencimiento .............. 2.73ms FAIL + 2023-04-23 00:09:39 App\Notifications\Vencimiento .............. 2.31ms FAIL + + INFO Processing jobs from the [default] queue. + + 2023-04-23 00:11:22 App\Notifications\Vencimiento ............. 22.85ms DONE + 2023-04-23 00:11:22 App\Notifications\Vencimiento .......... 1,371.69ms DONE + 2023-04-23 00:11:57 App\Notifications\licencias ................ 3.84ms DONE + 2023-04-23 00:11:57 App\Notifications\licencias ............... 15.93ms FAIL + 2023-04-23 00:11:57 App\Notifications\licencias ................ 3.19ms DONE + 2023-04-23 00:11:57 App\Notifications\licencias ............ 1,419.39ms DONE + 2023-04-23 00:13:09 App\Notifications\licencias ................ 3.46ms DONE + 2023-04-23 00:13:09 App\Notifications\licencias 2023-04-23 00:13:10 App\Notifications\licencias ................ 2.51ms DONE + 2023-04-23 00:13:10 App\Notifications\licencias ................ 9.84ms FAIL + ............ 1,309.67ms DONE + 2023-04-23 00:18:22 App\Notifications\licencias ................ 2.48ms DONE + 2023-04-23 00:18:22 App\Notifications\licencias 2023-04-23 00:18:23 App\Notifications\licencias ................ 2.72ms DONE + 2023-04-23 00:18:23 App\Notifications\licencias ............ 1,821.29ms DONE + ............ 9,410.60ms DONE + 2023-04-23 00:18:52 App\Notifications\licencias ................ 3.06ms DONE + 2023-04-23 00:18:52 App\Notifications\licencias ............... 15.28ms FAIL + 2023-04-23 00:18:52 App\Notifications\licencias ................ 2.67ms DONE + 2023-04-23 00:18:52 App\Notifications\licencias ............ 5,263.01ms DONE + 2023-04-23 00:18:59 App\Notifications\compra ................... 3.19ms DONE + 2023-04-23 00:18:59 App\Notifications\compra .................. 10.61ms FAIL + + INFO Processing jobs from the [default] queue. + + + INFO Processing jobs from the [default] queue. + + 2023-04-23 00:26:59 App\Notifications\licencias ............... 20.12ms DONE + 2023-04-23 00:26:59 App\Notifications\licencias ............ 1,435.91ms DONE + 2023-04-23 00:27:01 App\Notifications\licencias ............... 19.95ms DONE + 2023-04-23 00:27:01 App\Notifications\licencias .............. 561.11ms DONE + 2023-04-23 00:27:16 App\Notifications\licencias ................ 3.66ms DONE + 2023-04-23 00:27:16 App\Notifications\licencias .............. 531.47ms DONE + 2023-04-23 00:27:17 App\Notifications\licencias ................ 1.94ms DONE + 2023-04-23 00:27:17 App\Notifications\licencias .............. 600.42ms DONE + 2023-04-23 00:27:20 App\Notifications\compra ................... 6.04ms DONE + 2023-04-23 00:27:20 App\Notifications\compra ................. 703.54ms DONE + 2023-04-23 00:28:51 App\Notifications\licencias ................ 2.32ms DONE + 2023-04-23 00:28:51 App\Notifications\licencias ............... 10.55ms FAIL + 2023-04-23 00:28:51 App\Notifications\licencias ................ 1.98ms DONE + 2023-04-23 00:28:51 App\Notifications\licencias ............ 1,826.55ms DONE + 2023-04-23 00:28:56 App\Notifications\licencias ................ 3.27ms DONE + 2023-04-23 00:28:56 App\Notifications\licencias .............. 886.91ms DONE + 2023-04-23 00:28:57 App\Notifications\licencias ................ 2.39ms DONE + 2023-04-23 00:28:57 App\Notifications\licencias .............. 572.27ms DONE + 2023-04-23 00:28:57 App\Notifications\licencias ................ 2.39ms DONE + 2023-04-23 00:28:57 App\Notifications\licencias .............. 546.69ms DONE + 2023-04-23 00:28:58 App\Notifications\licencias ................ 2.35ms DONE + 2023-04-23 00:28:58 App\Notifications\licencias .............. 548.03ms DONE + 2023-04-23 00:29:29 App\Notifications\licencias ................ 2.46ms DONE + 2023-04-23 00:29:29 App\Notifications\licencias ............... 12.75ms FAIL + 2023-04-23 00:29:29 App\Notifications\licencias ................ 3.24ms DONE + 2023-04-23 00:29:29 App\Notifications\licencias ............ 1,387.14ms DONE + 2023-04-23 00:30:03 App\Notifications\licencias ................ 3.28ms DONE + 2023-04-23 00:30:03 App\Notifications\licencias ............... 16.26ms FAIL + 2023-04-23 00:30:03 App\Notifications\licencias ............... 22.51ms DONE + 2023-04-23 00:30:03 App\Notifications\licencias ............ 9,268.89ms DONE + 2023-04-23 00:30:33 App\Notifications\licencias ................ 2.17ms DONE + 2023-04-23 00:30:33 App\Notifications\licencias ................ 9.95ms FAIL + 2023-04-23 00:30:33 App\Notifications\licencias ................ 1.85ms DONE + 2023-04-23 00:30:33 App\Notifications\licencias ............ 1,439.46ms DONE + 2023-04-23 00:31:41 App\Notifications\licencias ................ 2.17ms DONE + 2023-04-23 00:31:41 App\Notifications\licencias ............... 10.19ms FAIL + 2023-04-23 00:31:41 App\Notifications\licencias ................ 2.36ms DONE + 2023-04-23 00:31:41 App\Notifications\licencias ........... 15,410.74ms DONE + 2023-04-23 00:32:35 App\Notifications\licencias ................ 2.36ms DONE + 2023-04-23 00:32:35 App\Notifications\licencias ............... 10.17ms FAIL + 2023-04-23 00:32:35 App\Notifications\licencias ................ 2.71ms DONE + 2023-04-23 00:32:35 App\Notifications\licencias ............ 1,401.30ms DONE + 2023-04-23 00:33:46 App\Notifications\licencias ................ 2.75ms DONE + 2023-04-23 00:33:46 App\Notifications\licencias ............... 15.65ms FAIL + 2023-04-23 00:33:46 App\Notifications\licencias ................ 2.21ms DONE + 2023-04-23 00:33:46 App\Notifications\licencias ............ 1,344.84ms DONE + + INFO Processing jobs from the [default] queue. + + 2023-04-23 00:38:59 App\Notifications\licencias ............... 18.75ms DONE + 2023-04-23 00:38:59 App\Notifications\licencias ............ 1,372.40ms DONE + 2023-04-23 00:39:00 App\Notifications\licencias ................ 2.70ms DONE + 2023-04-23 00:39:00 App\Notifications\licencias .............. 562.16ms DONE + 2023-04-23 00:41:58 App\Notifications\licencias ................ 2.23ms DONE + 2023-04-23 00:41:58 App\Notifications\licencias ............ 5,335.25ms DONE + 2023-04-23 00:42:03 App\Notifications\licencias ................ 2.57ms DONE + 2023-04-23 00:42:03 App\Notifications\licencias .............. 560.13ms DONE + 2023-04-23 00:42:22 App\Notifications\licencias ................ 2.53ms DONE + 2023-04-23 00:42:22 App\Notifications\licencias .............. 561.48ms DONE + 2023-04-23 00:42:22 App\Notifications\licencias ................ 2.11ms DONE + 2023-04-23 00:42:22 App\Notifications\licencias .............. 557.51ms DONE + 2023-04-23 00:42:29 App\Notifications\compra ................... 3.10ms DONE + 2023-04-23 00:42:29 App\Notifications\compra ................. 551.77ms DONE diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5b1376b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2504 @@ +{ + "name": "sirpremium", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.2", + "axios": "^0.27", + "laravel-vite-plugin": "^0.6.0", + "lodash": "^4.17.19", + "postcss": "^8.4.6", + "tailwindcss": "^3.1.0", + "vite": "^3.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz", + "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==", + "dev": true, + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", + "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==", + "dev": true, + "dependencies": { + "@vue/shared": "3.1.5" + } + }, + "node_modules/@vue/shared": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", + "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/alpinejs": { + "version": "3.10.4", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.10.4.tgz", + "integrity": "sha512-AC6Xchlb/xURO7F93OSMItooClpzGNZRM5+rDa6/3Y20mPxQs1TQ/wfiwiH4mtcVt8yTxdkOW5dOl8CBCK095A==", + "dev": true, + "dependencies": { + "@vue/reactivity": "~3.1.1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.12", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", + "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001407", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001422", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001422.tgz", + "integrity": "sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.6.1.tgz", + "integrity": "sha512-L8zt+bttm6+C0mo3an5J8wRW03SsjbTEouGb3bH2jj/XclFVAX/xEUkG9efhdRHjbEH5RY6cmdJ7bmf7zqjwIQ==", + "dev": true, + "dependencies": { + "vite-plugin-full-reload": "^1.0.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "vite": "^3.0.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.0.tgz", + "integrity": "sha512-ARh/W0uH5UlWIC2nn02V0+5fyF0k6qZliyt4QYic2upOhPUE/Spu1EURNc9txJ3+4j8OEmdigqfDpw4d2tA4vA==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.17", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.8.tgz", + "integrity": "sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": "~2.78.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.4.tgz", + "integrity": "sha512-9WejQII6zJ++m/YE173Zvl2jq4cqa404KNrVT+JDzDnqaGRq5UvOvA48fnsSWPIMXFV7S0dq5+sZqcSB+tKBgA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + }, + "peerDependencies": { + "vite": "^2 || ^3" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", + "dev": true, + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@tailwindcss/forms": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz", + "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==", + "dev": true, + "requires": { + "mini-svg-data-uri": "^1.2.3" + } + }, + "@vue/reactivity": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", + "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==", + "dev": true, + "requires": { + "@vue/shared": "3.1.5" + } + }, + "@vue/shared": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", + "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "alpinejs": { + "version": "3.10.4", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.10.4.tgz", + "integrity": "sha512-AC6Xchlb/xURO7F93OSMItooClpzGNZRM5+rDa6/3Y20mPxQs1TQ/wfiwiH4mtcVt8yTxdkOW5dOl8CBCK095A==", + "dev": true, + "requires": { + "@vue/reactivity": "~3.1.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.12", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", + "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001407", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001422", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001422.tgz", + "integrity": "sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "esbuild": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" + } + }, + "esbuild-android-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "laravel-vite-plugin": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.6.1.tgz", + "integrity": "sha512-L8zt+bttm6+C0mo3an5J8wRW03SsjbTEouGb3bH2jj/XclFVAX/xEUkG9efhdRHjbEH5RY6cmdJ7bmf7zqjwIQ==", + "dev": true, + "requires": { + "vite-plugin-full-reload": "^1.0.1" + } + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "postcss": { + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tailwindcss": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.0.tgz", + "integrity": "sha512-ARh/W0uH5UlWIC2nn02V0+5fyF0k6qZliyt4QYic2upOhPUE/Spu1EURNc9txJ3+4j8OEmdigqfDpw4d2tA4vA==", + "dev": true, + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.17", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "vite": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.8.tgz", + "integrity": "sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==", + "dev": true, + "requires": { + "esbuild": "^0.15.9", + "fsevents": "~2.3.2", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": "~2.78.0" + } + }, + "vite-plugin-full-reload": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.4.tgz", + "integrity": "sha512-9WejQII6zJ++m/YE173Zvl2jq4cqa404KNrVT+JDzDnqaGRq5UvOvA48fnsSWPIMXFV7S0dq5+sZqcSB+tKBgA==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..10f88aa --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.2", + "axios": "^0.27", + "laravel-vite-plugin": "^0.6.0", + "lodash": "^4.17.19", + "postcss": "^8.4.6", + "tailwindcss": "^3.1.0", + "vite": "^3.0.0" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..2ac86a1 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,31 @@ + + + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..67cdf1a --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..3aec5e2 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/build/assets/app.2896b7a8.js b/public/build/assets/app.2896b7a8.js new file mode 100644 index 0000000..664ad7e --- /dev/null +++ b/public/build/assets/app.2896b7a8.js @@ -0,0 +1,32 @@ +var kn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function B1(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var vo={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */(function(n,u){(function(){var i,s="4.17.21",a=200,l="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",d="Expected a function",_="Invalid `variable` option passed into `_.template`",w="__lodash_hash_undefined__",S=500,R="__lodash_placeholder__",I=1,O=2,Z=4,me=1,ve=2,L=1,q=2,Q=4,J=8,ue=16,M=32,Ie=64,Ye=128,at=256,Qt=512,fr=30,Rn="...",Le=800,mt=16,rt=1,Ti=2,On=3,Bt=1/0,yt=9007199254740991,Jc=17976931348623157e292,ar=0/0,it=4294967295,Yc=it-1,Xc=it>>>1,Zc=[["ary",Ye],["bind",L],["bindKey",q],["curry",J],["curryRight",ue],["flip",Qt],["partial",M],["partialRight",Ie],["rearg",at]],Vt="[object Arguments]",lr="[object Array]",kc="[object AsyncFunction]",Cn="[object Boolean]",Tn="[object Date]",Qc="[object DOMException]",cr="[object Error]",hr="[object Function]",os="[object GeneratorFunction]",Xe="[object Map]",In="[object Number]",Vc="[object Null]",lt="[object Object]",ss="[object Promise]",jc="[object Proxy]",Ln="[object RegExp]",Ze="[object Set]",Pn="[object String]",dr="[object Symbol]",eh="[object Undefined]",Mn="[object WeakMap]",th="[object WeakSet]",Dn="[object ArrayBuffer]",jt="[object DataView]",Ii="[object Float32Array]",Li="[object Float64Array]",Pi="[object Int8Array]",Mi="[object Int16Array]",Di="[object Int32Array]",Bi="[object Uint8Array]",Fi="[object Uint8ClampedArray]",Ni="[object Uint16Array]",Ui="[object Uint32Array]",nh=/\b__p \+= '';/g,rh=/\b(__p \+=) '' \+/g,ih=/(__e\(.*?\)|\b__t\)) \+\n'';/g,fs=/&(?:amp|lt|gt|quot|#39);/g,as=/[&<>"']/g,uh=RegExp(fs.source),oh=RegExp(as.source),sh=/<%-([\s\S]+?)%>/g,fh=/<%([\s\S]+?)%>/g,ls=/<%=([\s\S]+?)%>/g,ah=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,lh=/^\w*$/,ch=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$i=/[\\^$.*+?()[\]{}|]/g,hh=RegExp($i.source),Wi=/^\s+/,dh=/\s/,ph=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,_h=/\{\n\/\* \[wrapped with (.+)\] \*/,gh=/,? & /,vh=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,xh=/[()=,{}\[\]\/\s]/,wh=/\\(\\)?/g,mh=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,cs=/\w*$/,yh=/^[-+]0x[0-9a-f]+$/i,Eh=/^0b[01]+$/i,Ah=/^\[object .+?Constructor\]$/,bh=/^0o[0-7]+$/i,Sh=/^(?:0|[1-9]\d*)$/,Rh=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,pr=/($^)/,Oh=/['\n\r\u2028\u2029\\]/g,_r="\\ud800-\\udfff",Ch="\\u0300-\\u036f",Th="\\ufe20-\\ufe2f",Ih="\\u20d0-\\u20ff",hs=Ch+Th+Ih,ds="\\u2700-\\u27bf",ps="a-z\\xdf-\\xf6\\xf8-\\xff",Lh="\\xac\\xb1\\xd7\\xf7",Ph="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Mh="\\u2000-\\u206f",Dh=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",_s="A-Z\\xc0-\\xd6\\xd8-\\xde",gs="\\ufe0e\\ufe0f",vs=Lh+Ph+Mh+Dh,qi="['\u2019]",Bh="["+_r+"]",xs="["+vs+"]",gr="["+hs+"]",ws="\\d+",Fh="["+ds+"]",ms="["+ps+"]",ys="[^"+_r+vs+ws+ds+ps+_s+"]",Hi="\\ud83c[\\udffb-\\udfff]",Nh="(?:"+gr+"|"+Hi+")",Es="[^"+_r+"]",Ki="(?:\\ud83c[\\udde6-\\uddff]){2}",zi="[\\ud800-\\udbff][\\udc00-\\udfff]",en="["+_s+"]",As="\\u200d",bs="(?:"+ms+"|"+ys+")",Uh="(?:"+en+"|"+ys+")",Ss="(?:"+qi+"(?:d|ll|m|re|s|t|ve))?",Rs="(?:"+qi+"(?:D|LL|M|RE|S|T|VE))?",Os=Nh+"?",Cs="["+gs+"]?",$h="(?:"+As+"(?:"+[Es,Ki,zi].join("|")+")"+Cs+Os+")*",Wh="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",qh="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Ts=Cs+Os+$h,Hh="(?:"+[Fh,Ki,zi].join("|")+")"+Ts,Kh="(?:"+[Es+gr+"?",gr,Ki,zi,Bh].join("|")+")",zh=RegExp(qi,"g"),Gh=RegExp(gr,"g"),Gi=RegExp(Hi+"(?="+Hi+")|"+Kh+Ts,"g"),Jh=RegExp([en+"?"+ms+"+"+Ss+"(?="+[xs,en,"$"].join("|")+")",Uh+"+"+Rs+"(?="+[xs,en+bs,"$"].join("|")+")",en+"?"+bs+"+"+Ss,en+"+"+Rs,qh,Wh,ws,Hh].join("|"),"g"),Yh=RegExp("["+As+_r+hs+gs+"]"),Xh=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Zh=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],kh=-1,ee={};ee[Ii]=ee[Li]=ee[Pi]=ee[Mi]=ee[Di]=ee[Bi]=ee[Fi]=ee[Ni]=ee[Ui]=!0,ee[Vt]=ee[lr]=ee[Dn]=ee[Cn]=ee[jt]=ee[Tn]=ee[cr]=ee[hr]=ee[Xe]=ee[In]=ee[lt]=ee[Ln]=ee[Ze]=ee[Pn]=ee[Mn]=!1;var j={};j[Vt]=j[lr]=j[Dn]=j[jt]=j[Cn]=j[Tn]=j[Ii]=j[Li]=j[Pi]=j[Mi]=j[Di]=j[Xe]=j[In]=j[lt]=j[Ln]=j[Ze]=j[Pn]=j[dr]=j[Bi]=j[Fi]=j[Ni]=j[Ui]=!0,j[cr]=j[hr]=j[Mn]=!1;var Qh={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},Vh={"&":"&","<":"<",">":">",'"':""","'":"'"},jh={"&":"&","<":"<",">":">",""":'"',"'":"'"},ed={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},td=parseFloat,nd=parseInt,Is=typeof kn=="object"&&kn&&kn.Object===Object&&kn,rd=typeof self=="object"&&self&&self.Object===Object&&self,pe=Is||rd||Function("return this")(),Ji=u&&!u.nodeType&&u,Ft=Ji&&!0&&n&&!n.nodeType&&n,Ls=Ft&&Ft.exports===Ji,Yi=Ls&&Is.process,$e=function(){try{var v=Ft&&Ft.require&&Ft.require("util").types;return v||Yi&&Yi.binding&&Yi.binding("util")}catch{}}(),Ps=$e&&$e.isArrayBuffer,Ms=$e&&$e.isDate,Ds=$e&&$e.isMap,Bs=$e&&$e.isRegExp,Fs=$e&&$e.isSet,Ns=$e&&$e.isTypedArray;function Pe(v,y,m){switch(m.length){case 0:return v.call(y);case 1:return v.call(y,m[0]);case 2:return v.call(y,m[0],m[1]);case 3:return v.call(y,m[0],m[1],m[2])}return v.apply(y,m)}function id(v,y,m,T){for(var N=-1,Y=v==null?0:v.length;++N-1}function Xi(v,y,m){for(var T=-1,N=v==null?0:v.length;++T-1;);return m}function Gs(v,y){for(var m=v.length;m--&&tn(y,v[m],0)>-1;);return m}function dd(v,y){for(var m=v.length,T=0;m--;)v[m]===y&&++T;return T}var pd=Vi(Qh),_d=Vi(Vh);function gd(v){return"\\"+ed[v]}function vd(v,y){return v==null?i:v[y]}function nn(v){return Yh.test(v)}function xd(v){return Xh.test(v)}function wd(v){for(var y,m=[];!(y=v.next()).done;)m.push(y.value);return m}function nu(v){var y=-1,m=Array(v.size);return v.forEach(function(T,N){m[++y]=[N,T]}),m}function Js(v,y){return function(m){return v(y(m))}}function bt(v,y){for(var m=-1,T=v.length,N=0,Y=[];++m-1}function op(e,t){var r=this.__data__,o=Dr(r,e);return o<0?(++this.size,r.push([e,t])):r[o][1]=t,this}ct.prototype.clear=np,ct.prototype.delete=rp,ct.prototype.get=ip,ct.prototype.has=up,ct.prototype.set=op;function ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t=t?e:t)),e}function Ke(e,t,r,o,f,h){var p,g=t&I,x=t&O,E=t&Z;if(r&&(p=f?r(e,o,f,h):r(e)),p!==i)return p;if(!re(e))return e;var A=U(e);if(A){if(p=l_(e),!g)return Se(e,p)}else{var b=we(e),C=b==hr||b==os;if(It(e))return Tf(e,g);if(b==lt||b==Vt||C&&!f){if(p=x||C?{}:Xf(e),!g)return x?jp(e,Ep(p,e)):Vp(e,uf(p,e))}else{if(!j[b])return f?e:{};p=c_(e,b,g)}}h||(h=new Qe);var P=h.get(e);if(P)return P;h.set(e,p),Aa(e)?e.forEach(function(F){p.add(Ke(F,t,r,F,e,h))}):ya(e)&&e.forEach(function(F,K){p.set(K,Ke(F,t,r,K,e,h))});var B=E?x?Cu:Ou:x?Oe:ce,W=A?i:B(e);return We(W||e,function(F,K){W&&(K=F,F=e[K]),qn(p,K,Ke(F,t,r,K,e,h))}),p}function Ap(e){var t=ce(e);return function(r){return of(r,e,t)}}function of(e,t,r){var o=r.length;if(e==null)return!o;for(e=V(e);o--;){var f=r[o],h=t[f],p=e[f];if(p===i&&!(f in e)||!h(p))return!1}return!0}function sf(e,t,r){if(typeof e!="function")throw new qe(d);return Xn(function(){e.apply(i,r)},t)}function Hn(e,t,r,o){var f=-1,h=vr,p=!0,g=e.length,x=[],E=t.length;if(!g)return x;r&&(t=te(t,Me(r))),o?(h=Xi,p=!1):t.length>=a&&(h=Bn,p=!1,t=new $t(t));e:for(;++ff?0:f+r),o=o===i||o>f?f:$(o),o<0&&(o+=f),o=r>o?0:Sa(o);r0&&r(g)?t>1?_e(g,t-1,r,o,f):At(f,g):o||(f[f.length]=g)}return f}var au=Bf(),lf=Bf(!0);function ut(e,t){return e&&au(e,t,ce)}function lu(e,t){return e&&lf(e,t,ce)}function Fr(e,t){return Et(t,function(r){return vt(e[r])})}function qt(e,t){t=Ct(t,e);for(var r=0,o=t.length;e!=null&&rt}function Rp(e,t){return e!=null&&k.call(e,t)}function Op(e,t){return e!=null&&t in V(e)}function Cp(e,t,r){return e>=xe(t,r)&&e=120&&A.length>=120)?new $t(p&&A):i}A=e[0];var b=-1,C=g[0];e:for(;++b-1;)g!==e&&Or.call(g,x,1),Or.call(e,x,1);return e}function yf(e,t){for(var r=e?t.length:0,o=r-1;r--;){var f=t[r];if(r==o||f!==h){var h=f;gt(f)?Or.call(e,f,1):mu(e,f)}}return e}function vu(e,t){return e+Ir(ef()*(t-e+1))}function qp(e,t,r,o){for(var f=-1,h=le(Tr((t-e)/(r||1)),0),p=m(h);h--;)p[o?h:++f]=e,e+=r;return p}function xu(e,t){var r="";if(!e||t<1||t>yt)return r;do t%2&&(r+=e),t=Ir(t/2),t&&(e+=e);while(t);return r}function H(e,t){return Bu(Qf(e,t,Ce),e+"")}function Hp(e){return rf(pn(e))}function Kp(e,t){var r=pn(e);return Yr(r,Wt(t,0,r.length))}function Gn(e,t,r,o){if(!re(e))return e;t=Ct(t,e);for(var f=-1,h=t.length,p=h-1,g=e;g!=null&&++ff?0:f+t),r=r>f?f:r,r<0&&(r+=f),f=t>r?0:r-t>>>0,t>>>=0;for(var h=m(f);++o>>1,p=e[h];p!==null&&!Be(p)&&(r?p<=t:p=a){var E=t?null:r_(e);if(E)return wr(E);p=!1,f=Bn,x=new $t}else x=t?[]:g;e:for(;++o=o?e:ze(e,t,r)}var Cf=Dd||function(e){return pe.clearTimeout(e)};function Tf(e,t){if(t)return e.slice();var r=e.length,o=Zs?Zs(r):new e.constructor(r);return e.copy(o),o}function bu(e){var t=new e.constructor(e.byteLength);return new Sr(t).set(new Sr(e)),t}function Xp(e,t){var r=t?bu(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}function Zp(e){var t=new e.constructor(e.source,cs.exec(e));return t.lastIndex=e.lastIndex,t}function kp(e){return Wn?V(Wn.call(e)):{}}function If(e,t){var r=t?bu(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function Lf(e,t){if(e!==t){var r=e!==i,o=e===null,f=e===e,h=Be(e),p=t!==i,g=t===null,x=t===t,E=Be(t);if(!g&&!E&&!h&&e>t||h&&p&&x&&!g&&!E||o&&p&&x||!r&&x||!f)return 1;if(!o&&!h&&!E&&e=g)return x;var E=r[o];return x*(E=="desc"?-1:1)}}return e.index-t.index}function Pf(e,t,r,o){for(var f=-1,h=e.length,p=r.length,g=-1,x=t.length,E=le(h-p,0),A=m(x+E),b=!o;++g1?r[f-1]:i,p=f>2?r[2]:i;for(h=e.length>3&&typeof h=="function"?(f--,h):i,p&&Ee(r[0],r[1],p)&&(h=f<3?i:h,f=1),t=V(t);++o-1?f[h?t[p]:p]:i}}function Uf(e){return _t(function(t){var r=t.length,o=r,f=He.prototype.thru;for(e&&t.reverse();o--;){var h=t[o];if(typeof h!="function")throw new qe(d);if(f&&!p&&Gr(h)=="wrapper")var p=new He([],!0)}for(o=p?o:r;++o1&&G.reverse(),A&&xg))return!1;var E=h.get(e),A=h.get(t);if(E&&A)return E==t&&A==e;var b=-1,C=!0,P=r&ve?new $t:i;for(h.set(e,t),h.set(t,e);++b1?"& ":"")+t[o],t=t.join(r>2?", ":" "),e.replace(ph,`{ +/* [wrapped with `+t+`] */ +`)}function d_(e){return U(e)||zt(e)||!!(Vs&&e&&e[Vs])}function gt(e,t){var r=typeof e;return t=t==null?yt:t,!!t&&(r=="number"||r!="symbol"&&Sh.test(e))&&e>-1&&e%1==0&&e0){if(++t>=Le)return arguments[0]}else t=0;return e.apply(i,arguments)}}function Yr(e,t){var r=-1,o=e.length,f=o-1;for(t=t===i?o:t;++r1?e[t-1]:i;return r=typeof r=="function"?(e.pop(),r):i,aa(e,r)});function la(e){var t=c(e);return t.__chain__=!0,t}function bg(e,t){return t(e),e}function Xr(e,t){return t(e)}var Sg=_t(function(e){var t=e.length,r=t?e[0]:0,o=this.__wrapped__,f=function(h){return fu(h,e)};return t>1||this.__actions__.length||!(o instanceof z)||!gt(r)?this.thru(f):(o=o.slice(r,+r+(t?1:0)),o.__actions__.push({func:Xr,args:[f],thisArg:i}),new He(o,this.__chain__).thru(function(h){return t&&!h.length&&h.push(i),h}))});function Rg(){return la(this)}function Og(){return new He(this.value(),this.__chain__)}function Cg(){this.__values__===i&&(this.__values__=ba(this.value()));var e=this.__index__>=this.__values__.length,t=e?i:this.__values__[this.__index__++];return{done:e,value:t}}function Tg(){return this}function Ig(e){for(var t,r=this;r instanceof Mr;){var o=ra(r);o.__index__=0,o.__values__=i,t?f.__wrapped__=o:t=o;var f=o;r=r.__wrapped__}return f.__wrapped__=e,t}function Lg(){var e=this.__wrapped__;if(e instanceof z){var t=e;return this.__actions__.length&&(t=new z(this)),t=t.reverse(),t.__actions__.push({func:Xr,args:[Fu],thisArg:i}),new He(t,this.__chain__)}return this.thru(Fu)}function Pg(){return Rf(this.__wrapped__,this.__actions__)}var Mg=Wr(function(e,t,r){k.call(e,r)?++e[r]:dt(e,r,1)});function Dg(e,t,r){var o=U(e)?Us:bp;return r&&Ee(e,t,r)&&(t=i),o(e,D(t,3))}function Bg(e,t){var r=U(e)?Et:af;return r(e,D(t,3))}var Fg=Nf(ia),Ng=Nf(ua);function Ug(e,t){return _e(Zr(e,t),1)}function $g(e,t){return _e(Zr(e,t),Bt)}function Wg(e,t,r){return r=r===i?1:$(r),_e(Zr(e,t),r)}function ca(e,t){var r=U(e)?We:Rt;return r(e,D(t,3))}function ha(e,t){var r=U(e)?ud:ff;return r(e,D(t,3))}var qg=Wr(function(e,t,r){k.call(e,r)?e[r].push(t):dt(e,r,[t])});function Hg(e,t,r,o){e=Re(e)?e:pn(e),r=r&&!o?$(r):0;var f=e.length;return r<0&&(r=le(f+r,0)),ei(e)?r<=f&&e.indexOf(t,r)>-1:!!f&&tn(e,t,r)>-1}var Kg=H(function(e,t,r){var o=-1,f=typeof t=="function",h=Re(e)?m(e.length):[];return Rt(e,function(p){h[++o]=f?Pe(t,p,r):Kn(p,t,r)}),h}),zg=Wr(function(e,t,r){dt(e,r,t)});function Zr(e,t){var r=U(e)?te:_f;return r(e,D(t,3))}function Gg(e,t,r,o){return e==null?[]:(U(t)||(t=t==null?[]:[t]),r=o?i:r,U(r)||(r=r==null?[]:[r]),wf(e,t,r))}var Jg=Wr(function(e,t,r){e[r?0:1].push(t)},function(){return[[],[]]});function Yg(e,t,r){var o=U(e)?Zi:Hs,f=arguments.length<3;return o(e,D(t,4),r,f,Rt)}function Xg(e,t,r){var o=U(e)?od:Hs,f=arguments.length<3;return o(e,D(t,4),r,f,ff)}function Zg(e,t){var r=U(e)?Et:af;return r(e,Vr(D(t,3)))}function kg(e){var t=U(e)?rf:Hp;return t(e)}function Qg(e,t,r){(r?Ee(e,t,r):t===i)?t=1:t=$(t);var o=U(e)?wp:Kp;return o(e,t)}function Vg(e){var t=U(e)?mp:Gp;return t(e)}function jg(e){if(e==null)return 0;if(Re(e))return ei(e)?rn(e):e.length;var t=we(e);return t==Xe||t==Ze?e.size:pu(e).length}function ev(e,t,r){var o=U(e)?ki:Jp;return r&&Ee(e,t,r)&&(t=i),o(e,D(t,3))}var tv=H(function(e,t){if(e==null)return[];var r=t.length;return r>1&&Ee(e,t[0],t[1])?t=[]:r>2&&Ee(t[0],t[1],t[2])&&(t=[t[0]]),wf(e,_e(t,1),[])}),kr=Bd||function(){return pe.Date.now()};function nv(e,t){if(typeof t!="function")throw new qe(d);return e=$(e),function(){if(--e<1)return t.apply(this,arguments)}}function da(e,t,r){return t=r?i:t,t=e&&t==null?e.length:t,pt(e,Ye,i,i,i,i,t)}function pa(e,t){var r;if(typeof t!="function")throw new qe(d);return e=$(e),function(){return--e>0&&(r=t.apply(this,arguments)),e<=1&&(t=i),r}}var Uu=H(function(e,t,r){var o=L;if(r.length){var f=bt(r,hn(Uu));o|=M}return pt(e,o,t,r,f)}),_a=H(function(e,t,r){var o=L|q;if(r.length){var f=bt(r,hn(_a));o|=M}return pt(t,o,e,r,f)});function ga(e,t,r){t=r?i:t;var o=pt(e,J,i,i,i,i,i,t);return o.placeholder=ga.placeholder,o}function va(e,t,r){t=r?i:t;var o=pt(e,ue,i,i,i,i,i,t);return o.placeholder=va.placeholder,o}function xa(e,t,r){var o,f,h,p,g,x,E=0,A=!1,b=!1,C=!0;if(typeof e!="function")throw new qe(d);t=Je(t)||0,re(r)&&(A=!!r.leading,b="maxWait"in r,h=b?le(Je(r.maxWait)||0,t):h,C="trailing"in r?!!r.trailing:C);function P(se){var je=o,wt=f;return o=f=i,E=se,p=e.apply(wt,je),p}function B(se){return E=se,g=Xn(K,t),A?P(se):p}function W(se){var je=se-x,wt=se-E,Na=t-je;return b?xe(Na,h-wt):Na}function F(se){var je=se-x,wt=se-E;return x===i||je>=t||je<0||b&&wt>=h}function K(){var se=kr();if(F(se))return G(se);g=Xn(K,W(se))}function G(se){return g=i,C&&o?P(se):(o=f=i,p)}function Fe(){g!==i&&Cf(g),E=0,o=x=f=g=i}function Ae(){return g===i?p:G(kr())}function Ne(){var se=kr(),je=F(se);if(o=arguments,f=this,x=se,je){if(g===i)return B(x);if(b)return Cf(g),g=Xn(K,t),P(x)}return g===i&&(g=Xn(K,t)),p}return Ne.cancel=Fe,Ne.flush=Ae,Ne}var rv=H(function(e,t){return sf(e,1,t)}),iv=H(function(e,t,r){return sf(e,Je(t)||0,r)});function uv(e){return pt(e,Qt)}function Qr(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new qe(d);var r=function(){var o=arguments,f=t?t.apply(this,o):o[0],h=r.cache;if(h.has(f))return h.get(f);var p=e.apply(this,o);return r.cache=h.set(f,p)||h,p};return r.cache=new(Qr.Cache||ht),r}Qr.Cache=ht;function Vr(e){if(typeof e!="function")throw new qe(d);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}function ov(e){return pa(2,e)}var sv=Yp(function(e,t){t=t.length==1&&U(t[0])?te(t[0],Me(D())):te(_e(t,1),Me(D()));var r=t.length;return H(function(o){for(var f=-1,h=xe(o.length,r);++f=t}),zt=hf(function(){return arguments}())?hf:function(e){return ie(e)&&k.call(e,"callee")&&!Qs.call(e,"callee")},U=m.isArray,Ev=Ps?Me(Ps):Ip;function Re(e){return e!=null&&jr(e.length)&&!vt(e)}function oe(e){return ie(e)&&Re(e)}function Av(e){return e===!0||e===!1||ie(e)&&ye(e)==Cn}var It=Nd||ku,bv=Ms?Me(Ms):Lp;function Sv(e){return ie(e)&&e.nodeType===1&&!Zn(e)}function Rv(e){if(e==null)return!0;if(Re(e)&&(U(e)||typeof e=="string"||typeof e.splice=="function"||It(e)||dn(e)||zt(e)))return!e.length;var t=we(e);if(t==Xe||t==Ze)return!e.size;if(Yn(e))return!pu(e).length;for(var r in e)if(k.call(e,r))return!1;return!0}function Ov(e,t){return zn(e,t)}function Cv(e,t,r){r=typeof r=="function"?r:i;var o=r?r(e,t):i;return o===i?zn(e,t,i,r):!!o}function Wu(e){if(!ie(e))return!1;var t=ye(e);return t==cr||t==Qc||typeof e.message=="string"&&typeof e.name=="string"&&!Zn(e)}function Tv(e){return typeof e=="number"&&js(e)}function vt(e){if(!re(e))return!1;var t=ye(e);return t==hr||t==os||t==kc||t==jc}function ma(e){return typeof e=="number"&&e==$(e)}function jr(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=yt}function re(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}function ie(e){return e!=null&&typeof e=="object"}var ya=Ds?Me(Ds):Mp;function Iv(e,t){return e===t||du(e,t,Iu(t))}function Lv(e,t,r){return r=typeof r=="function"?r:i,du(e,t,Iu(t),r)}function Pv(e){return Ea(e)&&e!=+e}function Mv(e){if(g_(e))throw new N(l);return df(e)}function Dv(e){return e===null}function Bv(e){return e==null}function Ea(e){return typeof e=="number"||ie(e)&&ye(e)==In}function Zn(e){if(!ie(e)||ye(e)!=lt)return!1;var t=Rr(e);if(t===null)return!0;var r=k.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Er.call(r)==Ld}var qu=Bs?Me(Bs):Dp;function Fv(e){return ma(e)&&e>=-yt&&e<=yt}var Aa=Fs?Me(Fs):Bp;function ei(e){return typeof e=="string"||!U(e)&&ie(e)&&ye(e)==Pn}function Be(e){return typeof e=="symbol"||ie(e)&&ye(e)==dr}var dn=Ns?Me(Ns):Fp;function Nv(e){return e===i}function Uv(e){return ie(e)&&we(e)==Mn}function $v(e){return ie(e)&&ye(e)==th}var Wv=zr(_u),qv=zr(function(e,t){return e<=t});function ba(e){if(!e)return[];if(Re(e))return ei(e)?ke(e):Se(e);if(Fn&&e[Fn])return wd(e[Fn]());var t=we(e),r=t==Xe?nu:t==Ze?wr:pn;return r(e)}function xt(e){if(!e)return e===0?e:0;if(e=Je(e),e===Bt||e===-Bt){var t=e<0?-1:1;return t*Jc}return e===e?e:0}function $(e){var t=xt(e),r=t%1;return t===t?r?t-r:t:0}function Sa(e){return e?Wt($(e),0,it):0}function Je(e){if(typeof e=="number")return e;if(Be(e))return ar;if(re(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=re(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=Ks(e);var r=Eh.test(e);return r||bh.test(e)?nd(e.slice(2),r?2:8):yh.test(e)?ar:+e}function Ra(e){return ot(e,Oe(e))}function Hv(e){return e?Wt($(e),-yt,yt):e===0?e:0}function X(e){return e==null?"":De(e)}var Kv=ln(function(e,t){if(Yn(t)||Re(t)){ot(t,ce(t),e);return}for(var r in t)k.call(t,r)&&qn(e,r,t[r])}),Oa=ln(function(e,t){ot(t,Oe(t),e)}),ti=ln(function(e,t,r,o){ot(t,Oe(t),e,o)}),zv=ln(function(e,t,r,o){ot(t,ce(t),e,o)}),Gv=_t(fu);function Jv(e,t){var r=an(e);return t==null?r:uf(r,t)}var Yv=H(function(e,t){e=V(e);var r=-1,o=t.length,f=o>2?t[2]:i;for(f&&Ee(t[0],t[1],f)&&(o=1);++r1),h}),ot(e,Cu(e),r),o&&(r=Ke(r,I|O|Z,i_));for(var f=t.length;f--;)mu(r,t[f]);return r});function c0(e,t){return Ta(e,Vr(D(t)))}var h0=_t(function(e,t){return e==null?{}:$p(e,t)});function Ta(e,t){if(e==null)return{};var r=te(Cu(e),function(o){return[o]});return t=D(t),mf(e,r,function(o,f){return t(o,f[0])})}function d0(e,t,r){t=Ct(t,e);var o=-1,f=t.length;for(f||(f=1,e=i);++ot){var o=e;e=t,t=o}if(r||e%1||t%1){var f=ef();return xe(e+f*(t-e+td("1e-"+((f+"").length-1))),t)}return vu(e,t)}var b0=cn(function(e,t,r){return t=t.toLowerCase(),e+(r?Pa(t):t)});function Pa(e){return zu(X(e).toLowerCase())}function Ma(e){return e=X(e),e&&e.replace(Rh,pd).replace(Gh,"")}function S0(e,t,r){e=X(e),t=De(t);var o=e.length;r=r===i?o:Wt($(r),0,o);var f=r;return r-=t.length,r>=0&&e.slice(r,f)==t}function R0(e){return e=X(e),e&&oh.test(e)?e.replace(as,_d):e}function O0(e){return e=X(e),e&&hh.test(e)?e.replace($i,"\\$&"):e}var C0=cn(function(e,t,r){return e+(r?"-":"")+t.toLowerCase()}),T0=cn(function(e,t,r){return e+(r?" ":"")+t.toLowerCase()}),I0=Ff("toLowerCase");function L0(e,t,r){e=X(e),t=$(t);var o=t?rn(e):0;if(!t||o>=t)return e;var f=(t-o)/2;return Kr(Ir(f),r)+e+Kr(Tr(f),r)}function P0(e,t,r){e=X(e),t=$(t);var o=t?rn(e):0;return t&&o>>0,r?(e=X(e),e&&(typeof t=="string"||t!=null&&!qu(t))&&(t=De(t),!t&&nn(e))?Tt(ke(e),0,r):e.split(t,r)):[]}var $0=cn(function(e,t,r){return e+(r?" ":"")+zu(t)});function W0(e,t,r){return e=X(e),r=r==null?0:Wt($(r),0,e.length),t=De(t),e.slice(r,r+t.length)==t}function q0(e,t,r){var o=c.templateSettings;r&&Ee(e,t,r)&&(t=i),e=X(e),t=ti({},t,o,Kf);var f=ti({},t.imports,o.imports,Kf),h=ce(f),p=tu(f,h),g,x,E=0,A=t.interpolate||pr,b="__p += '",C=ru((t.escape||pr).source+"|"+A.source+"|"+(A===ls?mh:pr).source+"|"+(t.evaluate||pr).source+"|$","g"),P="//# sourceURL="+(k.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++kh+"]")+` +`;e.replace(C,function(F,K,G,Fe,Ae,Ne){return G||(G=Fe),b+=e.slice(E,Ne).replace(Oh,gd),K&&(g=!0,b+=`' + +__e(`+K+`) + +'`),Ae&&(x=!0,b+=`'; +`+Ae+`; +__p += '`),G&&(b+=`' + +((__t = (`+G+`)) == null ? '' : __t) + +'`),E=Ne+F.length,F}),b+=`'; +`;var B=k.call(t,"variable")&&t.variable;if(!B)b=`with (obj) { +`+b+` +} +`;else if(xh.test(B))throw new N(_);b=(x?b.replace(nh,""):b).replace(rh,"$1").replace(ih,"$1;"),b="function("+(B||"obj")+`) { +`+(B?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(g?", __e = _.escape":"")+(x?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+b+`return __p +}`;var W=Ba(function(){return Y(h,P+"return "+b).apply(i,p)});if(W.source=b,Wu(W))throw W;return W}function H0(e){return X(e).toLowerCase()}function K0(e){return X(e).toUpperCase()}function z0(e,t,r){if(e=X(e),e&&(r||t===i))return Ks(e);if(!e||!(t=De(t)))return e;var o=ke(e),f=ke(t),h=zs(o,f),p=Gs(o,f)+1;return Tt(o,h,p).join("")}function G0(e,t,r){if(e=X(e),e&&(r||t===i))return e.slice(0,Ys(e)+1);if(!e||!(t=De(t)))return e;var o=ke(e),f=Gs(o,ke(t))+1;return Tt(o,0,f).join("")}function J0(e,t,r){if(e=X(e),e&&(r||t===i))return e.replace(Wi,"");if(!e||!(t=De(t)))return e;var o=ke(e),f=zs(o,ke(t));return Tt(o,f).join("")}function Y0(e,t){var r=fr,o=Rn;if(re(t)){var f="separator"in t?t.separator:f;r="length"in t?$(t.length):r,o="omission"in t?De(t.omission):o}e=X(e);var h=e.length;if(nn(e)){var p=ke(e);h=p.length}if(r>=h)return e;var g=r-rn(o);if(g<1)return o;var x=p?Tt(p,0,g).join(""):e.slice(0,g);if(f===i)return x+o;if(p&&(g+=x.length-g),qu(f)){if(e.slice(g).search(f)){var E,A=x;for(f.global||(f=ru(f.source,X(cs.exec(f))+"g")),f.lastIndex=0;E=f.exec(A);)var b=E.index;x=x.slice(0,b===i?g:b)}}else if(e.indexOf(De(f),g)!=g){var C=x.lastIndexOf(f);C>-1&&(x=x.slice(0,C))}return x+o}function X0(e){return e=X(e),e&&uh.test(e)?e.replace(fs,Ad):e}var Z0=cn(function(e,t,r){return e+(r?" ":"")+t.toUpperCase()}),zu=Ff("toUpperCase");function Da(e,t,r){return e=X(e),t=r?i:t,t===i?xd(e)?Rd(e):ad(e):e.match(t)||[]}var Ba=H(function(e,t){try{return Pe(e,i,t)}catch(r){return Wu(r)?r:new N(r)}}),k0=_t(function(e,t){return We(t,function(r){r=st(r),dt(e,r,Uu(e[r],e))}),e});function Q0(e){var t=e==null?0:e.length,r=D();return e=t?te(e,function(o){if(typeof o[1]!="function")throw new qe(d);return[r(o[0]),o[1]]}):[],H(function(o){for(var f=-1;++fyt)return[];var r=it,o=xe(e,it);t=D(t),e-=it;for(var f=eu(o,t);++r0||t<0)?new z(r):(e<0?r=r.takeRight(-e):e&&(r=r.drop(e)),t!==i&&(t=$(t),r=t<0?r.dropRight(-t):r.take(t-e)),r)},z.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},z.prototype.toArray=function(){return this.take(it)},ut(z.prototype,function(e,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),o=/^(?:head|last)$/.test(t),f=c[o?"take"+(t=="last"?"Right":""):t],h=o||/^find/.test(t);!f||(c.prototype[t]=function(){var p=this.__wrapped__,g=o?[1]:arguments,x=p instanceof z,E=g[0],A=x||U(p),b=function(K){var G=f.apply(c,At([K],g));return o&&C?G[0]:G};A&&r&&typeof E=="function"&&E.length!=1&&(x=A=!1);var C=this.__chain__,P=!!this.__actions__.length,B=h&&!C,W=x&&!P;if(!h&&A){p=W?p:new z(this);var F=e.apply(p,g);return F.__actions__.push({func:Xr,args:[b],thisArg:i}),new He(F,C)}return B&&W?e.apply(this,g):(F=this.thru(b),B?o?F.value()[0]:F.value():F)})}),We(["pop","push","shift","sort","splice","unshift"],function(e){var t=mr[e],r=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",o=/^(?:pop|shift)$/.test(e);c.prototype[e]=function(){var f=arguments;if(o&&!this.__chain__){var h=this.value();return t.apply(U(h)?h:[],f)}return this[r](function(p){return t.apply(U(p)?p:[],f)})}}),ut(z.prototype,function(e,t){var r=c[t];if(r){var o=r.name+"";k.call(fn,o)||(fn[o]=[]),fn[o].push({name:t,func:r})}}),fn[qr(i,q).name]=[{name:"wrapper",func:i}],z.prototype.clone=Xd,z.prototype.reverse=Zd,z.prototype.value=kd,c.prototype.at=Sg,c.prototype.chain=Rg,c.prototype.commit=Og,c.prototype.next=Cg,c.prototype.plant=Ig,c.prototype.reverse=Lg,c.prototype.toJSON=c.prototype.valueOf=c.prototype.value=Pg,c.prototype.first=c.prototype.head,Fn&&(c.prototype[Fn]=Tg),c},un=Od();Ft?((Ft.exports=un)._=un,Ji._=un):pe._=un}).call(kn)})(vo,vo.exports);const F1=vo.exports;var pl={exports:{}},Bo={exports:{}},_l=function(u,i){return function(){for(var a=new Array(arguments.length),l=0;l"u"}function U1(n){return n!==null&&!si(n)&&n.constructor!==null&&!si(n.constructor)&&typeof n.constructor.isBuffer=="function"&&n.constructor.isBuffer(n)}var gl=kt("ArrayBuffer");function $1(n){var u;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?u=ArrayBuffer.isView(n):u=n&&n.buffer&&gl(n.buffer),u}function W1(n){return typeof n=="string"}function q1(n){return typeof n=="number"}function vl(n){return n!==null&&typeof n=="object"}function ii(n){if(No(n)!=="object")return!1;var u=Object.getPrototypeOf(n);return u===null||u===Object.prototype}var H1=kt("Date"),K1=kt("File"),z1=kt("Blob"),G1=kt("FileList");function $o(n){return Fo.call(n)==="[object Function]"}function J1(n){return vl(n)&&$o(n.pipe)}function Y1(n){var u="[object FormData]";return n&&(typeof FormData=="function"&&n instanceof FormData||Fo.call(n)===u||$o(n.toString)&&n.toString()===u)}var X1=kt("URLSearchParams");function Z1(n){return n.trim?n.trim():n.replace(/^\s+|\s+$/g,"")}function k1(){return typeof navigator<"u"&&(navigator.product==="ReactNative"||navigator.product==="NativeScript"||navigator.product==="NS")?!1:typeof window<"u"&&typeof document<"u"}function Wo(n,u){if(!(n===null||typeof n>"u"))if(typeof n!="object"&&(n=[n]),Uo(n))for(var i=0,s=n.length;i0;)l=s[a],d[l]||(u[l]=n[l],d[l]=!0);n=Object.getPrototypeOf(n)}while(n&&(!i||i(n,u))&&n!==Object.prototype);return u}function tx(n,u,i){n=String(n),(i===void 0||i>n.length)&&(i=n.length),i-=u.length;var s=n.indexOf(u,i);return s!==-1&&s===i}function nx(n){if(!n)return null;var u=n.length;if(si(u))return null;for(var i=new Array(u);u-- >0;)i[u]=n[u];return i}var rx=function(n){return function(u){return n&&u instanceof n}}(typeof Uint8Array<"u"&&Object.getPrototypeOf(Uint8Array)),ge={isArray:Uo,isArrayBuffer:gl,isBuffer:U1,isFormData:Y1,isArrayBufferView:$1,isString:W1,isNumber:q1,isObject:vl,isPlainObject:ii,isUndefined:si,isDate:H1,isFile:K1,isBlob:z1,isFunction:$o,isStream:J1,isURLSearchParams:X1,isStandardBrowserEnv:k1,forEach:Wo,merge:xo,extend:Q1,trim:Z1,stripBOM:V1,inherits:j1,toFlatObject:ex,kindOf:No,kindOfTest:kt,endsWith:tx,toArray:nx,isTypedArray:rx,isFileList:G1},_n=ge;function Ua(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var xl=function(u,i,s){if(!i)return u;var a;if(s)a=s(i);else if(_n.isURLSearchParams(i))a=i.toString();else{var l=[];_n.forEach(i,function(w,S){w===null||typeof w>"u"||(_n.isArray(w)?S=S+"[]":w=[w],_n.forEach(w,function(I){_n.isDate(I)?I=I.toISOString():_n.isObject(I)&&(I=JSON.stringify(I)),l.push(Ua(S)+"="+Ua(I))}))}),a=l.join("&")}if(a){var d=u.indexOf("#");d!==-1&&(u=u.slice(0,d)),u+=(u.indexOf("?")===-1?"?":"&")+a}return u},ix=ge;function ci(){this.handlers=[]}ci.prototype.use=function(u,i,s){return this.handlers.push({fulfilled:u,rejected:i,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1};ci.prototype.eject=function(u){this.handlers[u]&&(this.handlers[u]=null)};ci.prototype.forEach=function(u){ix.forEach(this.handlers,function(s){s!==null&&u(s)})};var ux=ci,ox=ge,sx=function(u,i){ox.forEach(u,function(a,l){l!==i&&l.toUpperCase()===i.toUpperCase()&&(u[i]=a,delete u[l])})},wl=ge;function xn(n,u,i,s,a){Error.call(this),this.message=n,this.name="AxiosError",u&&(this.code=u),i&&(this.config=i),s&&(this.request=s),a&&(this.response=a)}wl.inherits(xn,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var ml=xn.prototype,yl={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach(function(n){yl[n]={value:n}});Object.defineProperties(xn,yl);Object.defineProperty(ml,"isAxiosError",{value:!0});xn.from=function(n,u,i,s,a,l){var d=Object.create(ml);return wl.toFlatObject(n,d,function(w){return w!==Error.prototype}),xn.call(d,n.message,u,i,s,a),d.name=n.name,l&&Object.assign(d,l),d};var An=xn,El={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},et=ge;function fx(n,u){u=u||new FormData;var i=[];function s(l){return l===null?"":et.isDate(l)?l.toISOString():et.isArrayBuffer(l)||et.isTypedArray(l)?typeof Blob=="function"?new Blob([l]):Buffer.from(l):l}function a(l,d){if(et.isPlainObject(l)||et.isArray(l)){if(i.indexOf(l)!==-1)throw Error("Circular reference detected in "+d);i.push(l),et.forEach(l,function(w,S){if(!et.isUndefined(w)){var R=d?d+"."+S:S,I;if(w&&!d&&typeof w=="object"){if(et.endsWith(S,"{}"))w=JSON.stringify(w);else if(et.endsWith(S,"[]")&&(I=et.toArray(w))){I.forEach(function(O){!et.isUndefined(O)&&u.append(R,s(O))});return}}a(w,R)}}),i.pop()}else u.append(d,s(l))}return a(n),u}var Al=fx,Qu,$a;function ax(){if($a)return Qu;$a=1;var n=An;return Qu=function(i,s,a){var l=a.config.validateStatus;!a.status||!l||l(a.status)?i(a):s(new n("Request failed with status code "+a.status,[n.ERR_BAD_REQUEST,n.ERR_BAD_RESPONSE][Math.floor(a.status/100)-4],a.config,a.request,a))},Qu}var Vu,Wa;function lx(){if(Wa)return Vu;Wa=1;var n=ge;return Vu=n.isStandardBrowserEnv()?function(){return{write:function(s,a,l,d,_,w){var S=[];S.push(s+"="+encodeURIComponent(a)),n.isNumber(l)&&S.push("expires="+new Date(l).toGMTString()),n.isString(d)&&S.push("path="+d),n.isString(_)&&S.push("domain="+_),w===!0&&S.push("secure"),document.cookie=S.join("; ")},read:function(s){var a=document.cookie.match(new RegExp("(^|;\\s*)("+s+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove:function(s){this.write(s,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}(),Vu}var cx=function(u){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(u)},hx=function(u,i){return i?u.replace(/\/+$/,"")+"/"+i.replace(/^\/+/,""):u},dx=cx,px=hx,bl=function(u,i){return u&&!dx(i)?px(u,i):i},ju,qa;function _x(){if(qa)return ju;qa=1;var n=ge,u=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];return ju=function(s){var a={},l,d,_;return s&&n.forEach(s.split(` +`),function(S){if(_=S.indexOf(":"),l=n.trim(S.substr(0,_)).toLowerCase(),d=n.trim(S.substr(_+1)),l){if(a[l]&&u.indexOf(l)>=0)return;l==="set-cookie"?a[l]=(a[l]?a[l]:[]).concat([d]):a[l]=a[l]?a[l]+", "+d:d}}),a},ju}var eo,Ha;function gx(){if(Ha)return eo;Ha=1;var n=ge;return eo=n.isStandardBrowserEnv()?function(){var i=/(msie|trident)/i.test(navigator.userAgent),s=document.createElement("a"),a;function l(d){var _=d;return i&&(s.setAttribute("href",_),_=s.href),s.setAttribute("href",_),{href:s.href,protocol:s.protocol?s.protocol.replace(/:$/,""):"",host:s.host,search:s.search?s.search.replace(/^\?/,""):"",hash:s.hash?s.hash.replace(/^#/,""):"",hostname:s.hostname,port:s.port,pathname:s.pathname.charAt(0)==="/"?s.pathname:"/"+s.pathname}}return a=l(window.location.href),function(_){var w=n.isString(_)?l(_):_;return w.protocol===a.protocol&&w.host===a.host}}():function(){return function(){return!0}}(),eo}var to,Ka;function hi(){if(Ka)return to;Ka=1;var n=An,u=ge;function i(s){n.call(this,s==null?"canceled":s,n.ERR_CANCELED),this.name="CanceledError"}return u.inherits(i,n,{__CANCEL__:!0}),to=i,to}var no,za;function vx(){return za||(za=1,no=function(u){var i=/^([-+\w]{1,25})(:?\/\/|:)/.exec(u);return i&&i[1]||""}),no}var ro,Ga;function Ja(){if(Ga)return ro;Ga=1;var n=ge,u=ax(),i=lx(),s=xl,a=bl,l=_x(),d=gx(),_=El,w=An,S=hi(),R=vx();return ro=function(O){return new Promise(function(me,ve){var L=O.data,q=O.headers,Q=O.responseType,J;function ue(){O.cancelToken&&O.cancelToken.unsubscribe(J),O.signal&&O.signal.removeEventListener("abort",J)}n.isFormData(L)&&n.isStandardBrowserEnv()&&delete q["Content-Type"];var M=new XMLHttpRequest;if(O.auth){var Ie=O.auth.username||"",Ye=O.auth.password?unescape(encodeURIComponent(O.auth.password)):"";q.Authorization="Basic "+btoa(Ie+":"+Ye)}var at=a(O.baseURL,O.url);M.open(O.method.toUpperCase(),s(at,O.params,O.paramsSerializer),!0),M.timeout=O.timeout;function Qt(){if(!!M){var Le="getAllResponseHeaders"in M?l(M.getAllResponseHeaders()):null,mt=!Q||Q==="text"||Q==="json"?M.responseText:M.response,rt={data:mt,status:M.status,statusText:M.statusText,headers:Le,config:O,request:M};u(function(On){me(On),ue()},function(On){ve(On),ue()},rt),M=null}}if("onloadend"in M?M.onloadend=Qt:M.onreadystatechange=function(){!M||M.readyState!==4||M.status===0&&!(M.responseURL&&M.responseURL.indexOf("file:")===0)||setTimeout(Qt)},M.onabort=function(){!M||(ve(new w("Request aborted",w.ECONNABORTED,O,M)),M=null)},M.onerror=function(){ve(new w("Network Error",w.ERR_NETWORK,O,M,M)),M=null},M.ontimeout=function(){var mt=O.timeout?"timeout of "+O.timeout+"ms exceeded":"timeout exceeded",rt=O.transitional||_;O.timeoutErrorMessage&&(mt=O.timeoutErrorMessage),ve(new w(mt,rt.clarifyTimeoutError?w.ETIMEDOUT:w.ECONNABORTED,O,M)),M=null},n.isStandardBrowserEnv()){var fr=(O.withCredentials||d(at))&&O.xsrfCookieName?i.read(O.xsrfCookieName):void 0;fr&&(q[O.xsrfHeaderName]=fr)}"setRequestHeader"in M&&n.forEach(q,function(mt,rt){typeof L>"u"&&rt.toLowerCase()==="content-type"?delete q[rt]:M.setRequestHeader(rt,mt)}),n.isUndefined(O.withCredentials)||(M.withCredentials=!!O.withCredentials),Q&&Q!=="json"&&(M.responseType=O.responseType),typeof O.onDownloadProgress=="function"&&M.addEventListener("progress",O.onDownloadProgress),typeof O.onUploadProgress=="function"&&M.upload&&M.upload.addEventListener("progress",O.onUploadProgress),(O.cancelToken||O.signal)&&(J=function(Le){!M||(ve(!Le||Le&&Le.type?new S:Le),M.abort(),M=null)},O.cancelToken&&O.cancelToken.subscribe(J),O.signal&&(O.signal.aborted?J():O.signal.addEventListener("abort",J))),L||(L=null);var Rn=R(at);if(Rn&&["http","https","file"].indexOf(Rn)===-1){ve(new w("Unsupported protocol "+Rn+":",w.ERR_BAD_REQUEST,O));return}M.send(L)})},ro}var io,Ya;function xx(){return Ya||(Ya=1,io=null),io}var he=ge,Xa=sx,Za=An,wx=El,mx=Al,yx={"Content-Type":"application/x-www-form-urlencoded"};function ka(n,u){!he.isUndefined(n)&&he.isUndefined(n["Content-Type"])&&(n["Content-Type"]=u)}function Ex(){var n;return(typeof XMLHttpRequest<"u"||typeof process<"u"&&Object.prototype.toString.call(process)==="[object process]")&&(n=Ja()),n}function Ax(n,u,i){if(he.isString(n))try{return(u||JSON.parse)(n),he.trim(n)}catch(s){if(s.name!=="SyntaxError")throw s}return(i||JSON.stringify)(n)}var di={transitional:wx,adapter:Ex(),transformRequest:[function(u,i){if(Xa(i,"Accept"),Xa(i,"Content-Type"),he.isFormData(u)||he.isArrayBuffer(u)||he.isBuffer(u)||he.isStream(u)||he.isFile(u)||he.isBlob(u))return u;if(he.isArrayBufferView(u))return u.buffer;if(he.isURLSearchParams(u))return ka(i,"application/x-www-form-urlencoded;charset=utf-8"),u.toString();var s=he.isObject(u),a=i&&i["Content-Type"],l;if((l=he.isFileList(u))||s&&a==="multipart/form-data"){var d=this.env&&this.env.FormData;return mx(l?{"files[]":u}:u,d&&new d)}else if(s||a==="application/json")return ka(i,"application/json"),Ax(u);return u}],transformResponse:[function(u){var i=this.transitional||di.transitional,s=i&&i.silentJSONParsing,a=i&&i.forcedJSONParsing,l=!s&&this.responseType==="json";if(l||a&&he.isString(u)&&u.length)try{return JSON.parse(u)}catch(d){if(l)throw d.name==="SyntaxError"?Za.from(d,Za.ERR_BAD_RESPONSE,this,null,this.response):d}return u}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:xx()},validateStatus:function(u){return u>=200&&u<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};he.forEach(["delete","get","head"],function(u){di.headers[u]={}});he.forEach(["post","put","patch"],function(u){di.headers[u]=he.merge(yx)});var qo=di,bx=ge,Sx=qo,Rx=function(u,i,s){var a=this||Sx;return bx.forEach(s,function(d){u=d.call(a,u,i)}),u},uo,Qa;function Sl(){return Qa||(Qa=1,uo=function(u){return!!(u&&u.__CANCEL__)}),uo}var Va=ge,oo=Rx,Ox=Sl(),Cx=qo,Tx=hi();function so(n){if(n.cancelToken&&n.cancelToken.throwIfRequested(),n.signal&&n.signal.aborted)throw new Tx}var Ix=function(u){so(u),u.headers=u.headers||{},u.data=oo.call(u,u.data,u.headers,u.transformRequest),u.headers=Va.merge(u.headers.common||{},u.headers[u.method]||{},u.headers),Va.forEach(["delete","get","head","post","put","patch","common"],function(a){delete u.headers[a]});var i=u.adapter||Cx.adapter;return i(u).then(function(a){return so(u),a.data=oo.call(u,a.data,a.headers,u.transformResponse),a},function(a){return Ox(a)||(so(u),a&&a.response&&(a.response.data=oo.call(u,a.response.data,a.response.headers,u.transformResponse))),Promise.reject(a)})},Ue=ge,Rl=function(u,i){i=i||{};var s={};function a(R,I){return Ue.isPlainObject(R)&&Ue.isPlainObject(I)?Ue.merge(R,I):Ue.isPlainObject(I)?Ue.merge({},I):Ue.isArray(I)?I.slice():I}function l(R){if(Ue.isUndefined(i[R])){if(!Ue.isUndefined(u[R]))return a(void 0,u[R])}else return a(u[R],i[R])}function d(R){if(!Ue.isUndefined(i[R]))return a(void 0,i[R])}function _(R){if(Ue.isUndefined(i[R])){if(!Ue.isUndefined(u[R]))return a(void 0,u[R])}else return a(void 0,i[R])}function w(R){if(R in i)return a(u[R],i[R]);if(R in u)return a(void 0,u[R])}var S={url:d,method:d,data:d,baseURL:_,transformRequest:_,transformResponse:_,paramsSerializer:_,timeout:_,timeoutMessage:_,withCredentials:_,adapter:_,responseType:_,xsrfCookieName:_,xsrfHeaderName:_,onUploadProgress:_,onDownloadProgress:_,decompress:_,maxContentLength:_,maxBodyLength:_,beforeRedirect:_,transport:_,httpAgent:_,httpsAgent:_,cancelToken:_,socketPath:_,responseEncoding:_,validateStatus:w};return Ue.forEach(Object.keys(u).concat(Object.keys(i)),function(I){var O=S[I]||l,Z=O(I);Ue.isUndefined(Z)&&O!==w||(s[I]=Z)}),s},fo,ja;function Ol(){return ja||(ja=1,fo={version:"0.27.2"}),fo}var Lx=Ol().version,Lt=An,Ho={};["object","boolean","number","function","string","symbol"].forEach(function(n,u){Ho[n]=function(s){return typeof s===n||"a"+(u<1?"n ":" ")+n}});var el={};Ho.transitional=function(u,i,s){function a(l,d){return"[Axios v"+Lx+"] Transitional option '"+l+"'"+d+(s?". "+s:"")}return function(l,d,_){if(u===!1)throw new Lt(a(d," has been removed"+(i?" in "+i:"")),Lt.ERR_DEPRECATED);return i&&!el[d]&&(el[d]=!0,console.warn(a(d," has been deprecated since v"+i+" and will be removed in the near future"))),u?u(l,d,_):!0}};function Px(n,u,i){if(typeof n!="object")throw new Lt("options must be an object",Lt.ERR_BAD_OPTION_VALUE);for(var s=Object.keys(n),a=s.length;a-- >0;){var l=s[a],d=u[l];if(d){var _=n[l],w=_===void 0||d(_,l,n);if(w!==!0)throw new Lt("option "+l+" must be "+w,Lt.ERR_BAD_OPTION_VALUE);continue}if(i!==!0)throw new Lt("Unknown option "+l,Lt.ERR_BAD_OPTION)}}var Mx={assertOptions:Px,validators:Ho},Cl=ge,Dx=xl,tl=ux,nl=Ix,pi=Rl,Bx=bl,Tl=Mx,gn=Tl.validators;function wn(n){this.defaults=n,this.interceptors={request:new tl,response:new tl}}wn.prototype.request=function(u,i){typeof u=="string"?(i=i||{},i.url=u):i=u||{},i=pi(this.defaults,i),i.method?i.method=i.method.toLowerCase():this.defaults.method?i.method=this.defaults.method.toLowerCase():i.method="get";var s=i.transitional;s!==void 0&&Tl.assertOptions(s,{silentJSONParsing:gn.transitional(gn.boolean),forcedJSONParsing:gn.transitional(gn.boolean),clarifyTimeoutError:gn.transitional(gn.boolean)},!1);var a=[],l=!0;this.interceptors.request.forEach(function(Z){typeof Z.runWhen=="function"&&Z.runWhen(i)===!1||(l=l&&Z.synchronous,a.unshift(Z.fulfilled,Z.rejected))});var d=[];this.interceptors.response.forEach(function(Z){d.push(Z.fulfilled,Z.rejected)});var _;if(!l){var w=[nl,void 0];for(Array.prototype.unshift.apply(w,a),w=w.concat(d),_=Promise.resolve(i);w.length;)_=_.then(w.shift(),w.shift());return _}for(var S=i;a.length;){var R=a.shift(),I=a.shift();try{S=R(S)}catch(O){I(O);break}}try{_=nl(S)}catch(O){return Promise.reject(O)}for(;d.length;)_=_.then(d.shift(),d.shift());return _};wn.prototype.getUri=function(u){u=pi(this.defaults,u);var i=Bx(u.baseURL,u.url);return Dx(i,u.params,u.paramsSerializer)};Cl.forEach(["delete","get","head","options"],function(u){wn.prototype[u]=function(i,s){return this.request(pi(s||{},{method:u,url:i,data:(s||{}).data}))}});Cl.forEach(["post","put","patch"],function(u){function i(s){return function(l,d,_){return this.request(pi(_||{},{method:u,headers:s?{"Content-Type":"multipart/form-data"}:{},url:l,data:d}))}}wn.prototype[u]=i(),wn.prototype[u+"Form"]=i(!0)});var Fx=wn,ao,rl;function Nx(){if(rl)return ao;rl=1;var n=hi();function u(i){if(typeof i!="function")throw new TypeError("executor must be a function.");var s;this.promise=new Promise(function(d){s=d});var a=this;this.promise.then(function(l){if(!!a._listeners){var d,_=a._listeners.length;for(d=0;d<_;d++)a._listeners[d](l);a._listeners=null}}),this.promise.then=function(l){var d,_=new Promise(function(w){a.subscribe(w),d=w}).then(l);return _.cancel=function(){a.unsubscribe(d)},_},i(function(d){a.reason||(a.reason=new n(d),s(a.reason))})}return u.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},u.prototype.subscribe=function(s){if(this.reason){s(this.reason);return}this._listeners?this._listeners.push(s):this._listeners=[s]},u.prototype.unsubscribe=function(s){if(!!this._listeners){var a=this._listeners.indexOf(s);a!==-1&&this._listeners.splice(a,1)}},u.source=function(){var s,a=new u(function(d){s=d});return{token:a,cancel:s}},ao=u,ao}var lo,il;function Ux(){return il||(il=1,lo=function(u){return function(s){return u.apply(null,s)}}),lo}var co,ul;function $x(){if(ul)return co;ul=1;var n=ge;return co=function(i){return n.isObject(i)&&i.isAxiosError===!0},co}var ol=ge,Wx=_l,ui=Fx,qx=Rl,Hx=qo;function Il(n){var u=new ui(n),i=Wx(ui.prototype.request,u);return ol.extend(i,ui.prototype,u),ol.extend(i,u),i.create=function(a){return Il(qx(n,a))},i}var Te=Il(Hx);Te.Axios=ui;Te.CanceledError=hi();Te.CancelToken=Nx();Te.isCancel=Sl();Te.VERSION=Ol().version;Te.toFormData=Al;Te.AxiosError=An;Te.Cancel=Te.CanceledError;Te.all=function(u){return Promise.all(u)};Te.spread=Ux();Te.isAxiosError=$x();Bo.exports=Te;Bo.exports.default=Te;(function(n){n.exports=Bo.exports})(pl);const Kx=B1(pl.exports);window._=F1;window.axios=Kx;window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest";var wo=!1,mo=!1,Jt=[];function zx(n){Gx(n)}function Gx(n){Jt.includes(n)||Jt.push(n),Jx()}function Ll(n){let u=Jt.indexOf(n);u!==-1&&Jt.splice(u,1)}function Jx(){!mo&&!wo&&(wo=!0,queueMicrotask(Yx))}function Yx(){wo=!1,mo=!0;for(let n=0;nn.effect(u,{scheduler:i=>{yo?zx(i):i()}}),Pl=n.raw}function sl(n){ir=n}function kx(n){let u=()=>{};return[s=>{let a=ir(s);return n._x_effects||(n._x_effects=new Set,n._x_runEffects=()=>{n._x_effects.forEach(l=>l())}),n._x_effects.add(a),u=()=>{a!==void 0&&(n._x_effects.delete(a),_i(a))},a},()=>{u()}]}var Ml=[],Dl=[],Bl=[];function Qx(n){Bl.push(n)}function Fl(n,u){typeof u=="function"?(n._x_cleanups||(n._x_cleanups=[]),n._x_cleanups.push(u)):(u=n,Dl.push(u))}function Vx(n){Ml.push(n)}function jx(n,u,i){n._x_attributeCleanups||(n._x_attributeCleanups={}),n._x_attributeCleanups[u]||(n._x_attributeCleanups[u]=[]),n._x_attributeCleanups[u].push(i)}function Nl(n,u){!n._x_attributeCleanups||Object.entries(n._x_attributeCleanups).forEach(([i,s])=>{(u===void 0||u.includes(i))&&(s.forEach(a=>a()),delete n._x_attributeCleanups[i])})}var Ko=new MutationObserver(Jo),zo=!1;function Ul(){Ko.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),zo=!0}function ew(){tw(),Ko.disconnect(),zo=!1}var er=[],ho=!1;function tw(){er=er.concat(Ko.takeRecords()),er.length&&!ho&&(ho=!0,queueMicrotask(()=>{nw(),ho=!1}))}function nw(){Jo(er),er.length=0}function de(n){if(!zo)return n();ew();let u=n();return Ul(),u}var Go=!1,fi=[];function rw(){Go=!0}function iw(){Go=!1,Jo(fi),fi=[]}function Jo(n){if(Go){fi=fi.concat(n);return}let u=[],i=[],s=new Map,a=new Map;for(let l=0;ld.nodeType===1&&u.push(d)),n[l].removedNodes.forEach(d=>d.nodeType===1&&i.push(d))),n[l].type==="attributes")){let d=n[l].target,_=n[l].attributeName,w=n[l].oldValue,S=()=>{s.has(d)||s.set(d,[]),s.get(d).push({name:_,value:d.getAttribute(_)})},R=()=>{a.has(d)||a.set(d,[]),a.get(d).push(_)};d.hasAttribute(_)&&w===null?S():d.hasAttribute(_)?(R(),S()):R()}a.forEach((l,d)=>{Nl(d,l)}),s.forEach((l,d)=>{Ml.forEach(_=>_(d,l))});for(let l of i)if(!u.includes(l)&&(Dl.forEach(d=>d(l)),l._x_cleanups))for(;l._x_cleanups.length;)l._x_cleanups.pop()();u.forEach(l=>{l._x_ignoreSelf=!0,l._x_ignore=!0});for(let l of u)i.includes(l)||!l.isConnected||(delete l._x_ignoreSelf,delete l._x_ignore,Bl.forEach(d=>d(l)),l._x_ignore=!0,l._x_ignoreSelf=!0);u.forEach(l=>{delete l._x_ignoreSelf,delete l._x_ignore}),u=null,i=null,s=null,a=null}function $l(n){return or(mn(n))}function ur(n,u,i){return n._x_dataStack=[u,...mn(i||n)],()=>{n._x_dataStack=n._x_dataStack.filter(s=>s!==u)}}function fl(n,u){let i=n._x_dataStack[0];Object.entries(u).forEach(([s,a])=>{i[s]=a})}function mn(n){return n._x_dataStack?n._x_dataStack:typeof ShadowRoot=="function"&&n instanceof ShadowRoot?mn(n.host):n.parentNode?mn(n.parentNode):[]}function or(n){let u=new Proxy({},{ownKeys:()=>Array.from(new Set(n.flatMap(i=>Object.keys(i)))),has:(i,s)=>n.some(a=>a.hasOwnProperty(s)),get:(i,s)=>(n.find(a=>{if(a.hasOwnProperty(s)){let l=Object.getOwnPropertyDescriptor(a,s);if(l.get&&l.get._x_alreadyBound||l.set&&l.set._x_alreadyBound)return!0;if((l.get||l.set)&&l.enumerable){let d=l.get,_=l.set,w=l;d=d&&d.bind(u),_=_&&_.bind(u),d&&(d._x_alreadyBound=!0),_&&(_._x_alreadyBound=!0),Object.defineProperty(a,s,{...w,get:d,set:_})}return!0}return!1})||{})[s],set:(i,s,a)=>{let l=n.find(d=>d.hasOwnProperty(s));return l?l[s]=a:n[n.length-1][s]=a,!0}});return u}function Wl(n){let u=s=>typeof s=="object"&&!Array.isArray(s)&&s!==null,i=(s,a="")=>{Object.entries(Object.getOwnPropertyDescriptors(s)).forEach(([l,{value:d,enumerable:_}])=>{if(_===!1||d===void 0)return;let w=a===""?l:`${a}.${l}`;typeof d=="object"&&d!==null&&d._x_interceptor?s[l]=d.initialize(n,w,l):u(d)&&d!==s&&!(d instanceof Element)&&i(d,w)})};return i(n)}function ql(n,u=()=>{}){let i={initialValue:void 0,_x_interceptor:!0,initialize(s,a,l){return n(this.initialValue,()=>uw(s,a),d=>Eo(s,a,d),a,l)}};return u(i),s=>{if(typeof s=="object"&&s!==null&&s._x_interceptor){let a=i.initialize.bind(i);i.initialize=(l,d,_)=>{let w=s.initialize(l,d,_);return i.initialValue=w,a(l,d,_)}}else i.initialValue=s;return i}}function uw(n,u){return u.split(".").reduce((i,s)=>i[s],n)}function Eo(n,u,i){if(typeof u=="string"&&(u=u.split(".")),u.length===1)n[u[0]]=i;else{if(u.length===0)throw error;return n[u[0]]||(n[u[0]]={}),Eo(n[u[0]],u.slice(1),i)}}var Hl={};function nt(n,u){Hl[n]=u}function Ao(n,u){return Object.entries(Hl).forEach(([i,s])=>{Object.defineProperty(n,`$${i}`,{get(){let[a,l]=Xl(u);return a={interceptor:ql,...a},Fl(u,l),s(u,a)},enumerable:!1})}),n}function ow(n,u,i,...s){try{return i(...s)}catch(a){rr(a,n,u)}}function rr(n,u,i=void 0){Object.assign(n,{el:u,expression:i}),console.warn(`Alpine Expression Error: ${n.message} + +${i?'Expression: "'+i+`" + +`:""}`,u),setTimeout(()=>{throw n},0)}var oi=!0;function sw(n){let u=oi;oi=!1,n(),oi=u}function vn(n,u,i={}){let s;return be(n,u)(a=>s=a,i),s}function be(...n){return Kl(...n)}var Kl=zl;function fw(n){Kl=n}function zl(n,u){let i={};Ao(i,n);let s=[i,...mn(n)];if(typeof u=="function")return aw(s,u);let a=cw(s,u,n);return ow.bind(null,n,u,a)}function aw(n,u){return(i=()=>{},{scope:s={},params:a=[]}={})=>{let l=u.apply(or([s,...n]),a);ai(i,l)}}var po={};function lw(n,u){if(po[n])return po[n];let i=Object.getPrototypeOf(async function(){}).constructor,s=/^[\n\s]*if.*\(.*\)/.test(n)||/^(let|const)\s/.test(n)?`(() => { ${n} })()`:n,l=(()=>{try{return new i(["__self","scope"],`with (scope) { __self.result = ${s} }; __self.finished = true; return __self.result;`)}catch(d){return rr(d,u,n),Promise.resolve()}})();return po[n]=l,l}function cw(n,u,i){let s=lw(u,i);return(a=()=>{},{scope:l={},params:d=[]}={})=>{s.result=void 0,s.finished=!1;let _=or([l,...n]);if(typeof s=="function"){let w=s(s,_).catch(S=>rr(S,i,u));s.finished?(ai(a,s.result,_,d,i),s.result=void 0):w.then(S=>{ai(a,S,_,d,i)}).catch(S=>rr(S,i,u)).finally(()=>s.result=void 0)}}}function ai(n,u,i,s,a){if(oi&&typeof u=="function"){let l=u.apply(i,s);l instanceof Promise?l.then(d=>ai(n,d,i,s)).catch(d=>rr(d,a,u)):n(l)}else n(u)}var Yo="x-";function Sn(n=""){return Yo+n}function hw(n){Yo=n}var Gl={};function fe(n,u){Gl[n]=u}function Xo(n,u,i){if(u=Array.from(u),n._x_virtualDirectives){let l=Object.entries(n._x_virtualDirectives).map(([_,w])=>({name:_,value:w})),d=Jl(l);l=l.map(_=>d.find(w=>w.name===_.name)?{name:`x-bind:${_.name}`,value:`"${_.value}"`}:_),u=u.concat(l)}let s={};return u.map(Ql((l,d)=>s[l]=d)).filter(jl).map(_w(s,i)).sort(gw).map(l=>pw(n,l))}function Jl(n){return Array.from(n).map(Ql()).filter(u=>!jl(u))}var bo=!1,jn=new Map,Yl=Symbol();function dw(n){bo=!0;let u=Symbol();Yl=u,jn.set(u,[]);let i=()=>{for(;jn.get(u).length;)jn.get(u).shift()();jn.delete(u)},s=()=>{bo=!1,i()};n(i),s()}function Xl(n){let u=[],i=_=>u.push(_),[s,a]=kx(n);return u.push(a),[{Alpine:sr,effect:s,cleanup:i,evaluateLater:be.bind(be,n),evaluate:vn.bind(vn,n)},()=>u.forEach(_=>_())]}function pw(n,u){let i=()=>{},s=Gl[u.type]||i,[a,l]=Xl(n);jx(n,u.original,l);let d=()=>{n._x_ignore||n._x_ignoreSelf||(s.inline&&s.inline(n,u,a),s=s.bind(s,n,u,a),bo?jn.get(Yl).push(s):s())};return d.runCleanups=l,d}var Zl=(n,u)=>({name:i,value:s})=>(i.startsWith(n)&&(i=i.replace(n,u)),{name:i,value:s}),kl=n=>n;function Ql(n=()=>{}){return({name:u,value:i})=>{let{name:s,value:a}=Vl.reduce((l,d)=>d(l),{name:u,value:i});return s!==u&&n(s,u),{name:s,value:a}}}var Vl=[];function Zo(n){Vl.push(n)}function jl({name:n}){return ec().test(n)}var ec=()=>new RegExp(`^${Yo}([^:^.]+)\\b`);function _w(n,u){return({name:i,value:s})=>{let a=i.match(ec()),l=i.match(/:([a-zA-Z0-9\-:]+)/),d=i.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],_=u||n[i]||i;return{type:a?a[1]:null,value:l?l[1]:null,modifiers:d.map(w=>w.replace(".","")),expression:s,original:_}}}var So="DEFAULT",ni=["ignore","ref","data","id","tabs","radio","switch","disclosure","bind","init","for","mask","model","modelable","transition","show","if",So,"teleport"];function gw(n,u){let i=ni.indexOf(n.type)===-1?So:n.type,s=ni.indexOf(u.type)===-1?So:u.type;return ni.indexOf(i)-ni.indexOf(s)}function tr(n,u,i={}){n.dispatchEvent(new CustomEvent(u,{detail:i,bubbles:!0,composed:!0,cancelable:!0}))}var Ro=[],ko=!1;function tc(n=()=>{}){return queueMicrotask(()=>{ko||setTimeout(()=>{Oo()})}),new Promise(u=>{Ro.push(()=>{n(),u()})})}function Oo(){for(ko=!1;Ro.length;)Ro.shift()()}function vw(){ko=!0}function Zt(n,u){if(typeof ShadowRoot=="function"&&n instanceof ShadowRoot){Array.from(n.children).forEach(a=>Zt(a,u));return}let i=!1;if(u(n,()=>i=!0),i)return;let s=n.firstElementChild;for(;s;)Zt(s,u),s=s.nextElementSibling}function yn(n,...u){console.warn(`Alpine Warning: ${n}`,...u)}function xw(){document.body||yn("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` + + + \ No newline at end of file diff --git a/resources/views/components/text-input.blade.php b/resources/views/components/text-input.blade.php new file mode 100644 index 0000000..30398d2 --- /dev/null +++ b/resources/views/components/text-input.blade.php @@ -0,0 +1,3 @@ +@props(['disabled' => false]) + +merge(['class' => 'rounded-lg shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!}> diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php new file mode 100644 index 0000000..1bdc796 --- /dev/null +++ b/resources/views/dashboard.blade.php @@ -0,0 +1,8 @@ + + + +
+ + + +
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..df97dff --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,50 @@ + + + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + + @livewireStyles + + +
+ @include('layouts.navigationup') +
+
+ @include('layouts.navigation') +
+ + + + +
+ {{ $slot }} + +
+ + +
+ +
+ @livewireScripts + + + + + + diff --git a/resources/views/layouts/footer.blade.php b/resources/views/layouts/footer.blade.php new file mode 100644 index 0000000..5526bb3 --- /dev/null +++ b/resources/views/layouts/footer.blade.php @@ -0,0 +1,13 @@ +
+

Colombia | ®SirPremium

+ + + + +
\ No newline at end of file diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php new file mode 100644 index 0000000..1b731d0 --- /dev/null +++ b/resources/views/layouts/guest.blade.php @@ -0,0 +1,34 @@ + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + + @livewireStyles + + + +
+ {{ $slot }} +
+ + @livewireScripts + + + + diff --git a/resources/views/layouts/nav.blade.php b/resources/views/layouts/nav.blade.php new file mode 100644 index 0000000..7bc5f19 --- /dev/null +++ b/resources/views/layouts/nav.blade.php @@ -0,0 +1,48 @@ + \ No newline at end of file diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php new file mode 100644 index 0000000..b00aad2 --- /dev/null +++ b/resources/views/layouts/navigation.blade.php @@ -0,0 +1,542 @@ + +{{-- menu lateral --}} +
+
+
+
+ + + + +
+
+
{{ Auth::user()->name }}
+
{{ Auth::user()->email }}
+
{{ Auth::user()->rol->nombre }}
+
+
+ + +
+
+ + + + + {{ __('Inicio') }} + +
+
+ + + + + + {{ __('Clientes') }} + +
+
+ + + + + {{ __('Servicios') }} + +
+
+ + + + + {{ __('Top distribuidores') }} + +
+ @if ( auth()->user()->rol->nombre != "editor") +
+ + + + + + + + {{ __('Reportes') }} + +
+ @endif +
+ @if (auth()->user()->rol->nombre == "super" || auth()->user()->rol->nombre == "administrador" || auth()->user()->rol->nombre == "editor") + + + + + + @endif + + + + +
+ + + +
+
+ +
+
+
+ + + + + + + + + + +
+
+ +
+
+ + + + + + +
+
+ + +
+
+ + + + + +
+
+ + + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+ +
+
+ @csrf + + + + + + + + + +
+
+
+ +
+ + + +{{-- menu lateral --}} + + + + diff --git a/resources/views/layouts/navigationup.blade.php b/resources/views/layouts/navigationup.blade.php new file mode 100644 index 0000000..f12a15b --- /dev/null +++ b/resources/views/layouts/navigationup.blade.php @@ -0,0 +1,48 @@ + + diff --git a/resources/views/livewire/import.blade.php b/resources/views/livewire/import.blade.php new file mode 100644 index 0000000..065ac5d --- /dev/null +++ b/resources/views/livewire/import.blade.php @@ -0,0 +1,27 @@ +
+
+
+ Añadir cuentas por volumen +
+
+ +
+ +
+ + @error('photo') {{ $message }} @enderror + + @if ($photo) + + +

Archivo cargado

+ + @endif + + @if ($importado== 'true') +
Cuentas importadas correctamente!!
+ @endif +
+
+ +
diff --git a/resources/views/livewire/logs-recargas.blade.php b/resources/views/livewire/logs-recargas.blade.php new file mode 100644 index 0000000..babd04f --- /dev/null +++ b/resources/views/livewire/logs-recargas.blade.php @@ -0,0 +1,39 @@ +
+
+
+ + + +
+ + + + + + + + + + + + @foreach($historial_recargas as $item) + + + + + + + + + + + + @endforeach + +
CompraUsuarioEmailValor pagadoEstadoSaldo
{{\Carbon\Carbon::parse($item->created_at)->format('y/m/d h:i a')}}{{$item->usuario->name}}{{$item->usuario->email}}{{$item->monto}}{{$item->status}}{{$item->valor_recarga}}
+
+ {{ $historial_recargas->links( )}} +
+
+ +
diff --git a/resources/views/livewire/portada-servicio.blade.php b/resources/views/livewire/portada-servicio.blade.php new file mode 100644 index 0000000..1ba4b94 --- /dev/null +++ b/resources/views/livewire/portada-servicio.blade.php @@ -0,0 +1,327 @@ +
+ +
+
+
+ +

Cargando

+
+
+
+ +
+ +
+
+
+ + + + + + Promociones +
+ +
+ +
+ + +
+
+ + @foreach ($promociones as $promocion) +
+ + + + +
+ +
+ +
+ +
+ + +
+ @endforeach + +
+
+ +
+ + + + {{-- Modal ver promno --}} +
+
+
+ {{-- PHOTO --}} +
+ +
+ +
+ +
+
+
+

{{$nombrePromo}}

+
+
+

${{number_format($precioAhora)}}

+
+
+
+

{{$descripcionPromo}}

+
+
+ +
+ + + + + + +
+
+
+
+
+ + + {{-- Modal comprar promno --}} +
+
+
+
+

+ {{$nombrePromo}} +

+
+

+ {{$dias}} Dias +

+

+ ${{number_format($precioAhora)}} +

+
+
+ +
+
+

+ Información del cliente: +

+

+ Ingrese los datos del cliente final. +

+
+ +
+
+ + + @error('nombre_comprarPromo') Requerido* @enderror +
+
+ + + @error('celular_comprarPromo') Requerido* @enderror +
+
+
+
+ + + @error('email_comprarPromo') Requerido* @enderror +
+
+ + + @error('cantidad_comprarPromo') Requerido* @enderror +
+
+
+

+ Este servicio vencerá el {{$fechaFinal}} en {{$dias_comprarPromo}} Dias +

+
+
+
+ Pagara el valor de ${{number_format($total=((int)$precioAhora*(int)$cantidad_comprarPromo))}} +
+ +
+ +
+ + + + + + +
+ +
+
+
+
+ + {{-- Modal credenciales --}} +
+
+
+
+

+ {{$this->nombrePromo}} +

+
+

+ {{$this->dias }} Dias +

+

+ ${{number_format($this->precioAhora)}} +

+
+
+ +
+
+
+

+ Información de cuentas: +

+
+
+ @php + $n=0; + @endphp + + @if ($cuentas) + @foreach ($cuentas->cuentas->unique() as $cuenta) + @php + $n++; + @endphp + +
+
+
{{ $cuenta->servicio->nombre }} :
+

+ Usuario:

{{ $cuenta->correo }}

+

+

+ Contraseña:

{{ $cuenta->password }} +

+

+
+
+ +
+ + +
+ + @endforeach + +

+ Este servicio vencerá el

+ {{ $cuentas->fecha_final ?? '' }}.

+

+ + @endif + + +
+ +
+ +
+
+ + +
+ + + + +
+ +
+ +
+
+
+ + +
diff --git a/resources/views/livewire/portada.blade.php b/resources/views/livewire/portada.blade.php new file mode 100644 index 0000000..ac09b35 --- /dev/null +++ b/resources/views/livewire/portada.blade.php @@ -0,0 +1,10 @@ +
+
+ +
+ @include('components.slider') +
+ + +
+
diff --git a/resources/views/livewire/show-admin.blade.php b/resources/views/livewire/show-admin.blade.php new file mode 100644 index 0000000..29dbb79 --- /dev/null +++ b/resources/views/livewire/show-admin.blade.php @@ -0,0 +1,3 @@ +
+ Admin +
diff --git a/resources/views/livewire/show-categoria.blade.php b/resources/views/livewire/show-categoria.blade.php new file mode 100644 index 0000000..21b0b42 --- /dev/null +++ b/resources/views/livewire/show-categoria.blade.php @@ -0,0 +1,175 @@ +
+
+
+
+ +

Cargando..

+
+
+
+ +
+
+
+
+ + Categorias +
+

Nueva categoria

+ + + +
+
+
+ + +
+

Categorias

+
+ {{------Tabla de categorias -----}} + + + + + + + + + + + @foreach($categorias as $categoria) + + + + + + + @endforeach + +
ImagenNombreDescripcion
+ + + {{$categoria->nombre}} + + {{$categoria->descripcion}} + + + +
+ + +
+
+
+
+
+ + {{-- Modal agregar categoria --}} +
+
+
+
+
+
+ + +
+ +
+ @if ($photo) + + @else +
+ @endif +
+
+ +
+ + + @error('nombre') Requerido* @enderror +
+ +
+ + +
+ +
+ + + + + + +
+
+
+
+
+ + {{-- Modal editar categoria --}} +
+
+
+
+
+
+ + +
+ +
+ @if ($photo) + + @else + + @endif +
+
+ +
+ + + @error('nombre') Requerido* @enderror +
+ +
+ + +
+ +
+ + + + + + +
+
+
+
+
+ +
diff --git a/resources/views/livewire/show-clientes.blade.php b/resources/views/livewire/show-clientes.blade.php new file mode 100644 index 0000000..91f74fd --- /dev/null +++ b/resources/views/livewire/show-clientes.blade.php @@ -0,0 +1,574 @@ +
+ +
+
+
+ +

Cargando

+
+
+
+ + {{-- Buscador --}} +
+
+
+ + + + + + Clientes +
+
+ + + + + + + + +
+
+ + + +
+ +
+ + {{-- tabla clientes --}} +
+ + + + + + + + + + + + + + + @foreach ($clientes as $cliente) + + + + + + + @if (!empty($cliente->tarifa_id)) + + @endif + + @if (!empty($cliente->promocion_id)) + + @endif + + + + @php + + $date1 = new DateTime(strtr(strval($fechaActual), '/', '-')); + $date2 = new DateTime(strtr(strval($cliente->fecha_final), '/', '-')); + + @endphp + + @if ($date1 < $date2) + + @endif + + @if ($date1 > $date2) + + @endif + + @if ($date1 == $date2) + + @endif + + @if (!empty($cliente->tarifa_id)) + + + @elseif(!empty($cliente->promocion_id)) + + + @endif + + @endforeach + +
NombreCorreoCompraServicioVenceRestante
{{ $cliente->nombre_cliente ?? $cliente->cliente->name }}{{ $cliente->cliente->email ?? '' }} + {{ Carbon\Carbon::parse($cliente->created_at)->locale('co')->Format('d M Y, h:m a') ?? '' }} + {{ $cliente->tarifa->servicio->nombre }} + + @if ($cliente->tarifa->servicio->nombre != 'Spotify Premium' && $cliente->tarifa->servicio->nombre != 'Youtube Premium') + {{ $cliente->tarifa->pantallas }} Pantallas + @endif + + {{ $cliente->promocion->nombre }} + {{ Carbon\Carbon::parse($cliente->fecha_final)->format('M j') ?? '' }} + + @php + $diff = $date1->diff($date2); + echo $diff->days . ' dias'; + @endphp + + @php + echo 'Vencido'; + @endphp + + @php + echo 'Vence hoy!!'; + @endphp + + + + + + +
+ + + @if (!empty($cliente->cuentas->first()->estado)) + @if ($cliente->cuentas->first()->estado == 'pendiente' && $cliente->tarifa->servicio->renovacion == true) + {{-- renovar --}} + + @endif + @endif + {{-- whatsapp --}} + Notificar + + + + + + + + +
+
+ + + + + +
+ + {{-- whatsapp --}} + Notificar + + + + + + + + +
+
+ {{ $clientes->links() }} +
+ + +
+ + {{-- Modal ver clientes --}} +
+
+ + @if (!empty($consulta_historial)) + +
+ +
+ +
+ + @if (!empty($consulta_historial->tarifa_id)) +
+

+ {{ $consulta_historial->tarifa->servicio->nombre . ' - ' . $consulta_historial->tarifa->pantallas . ' Pantalla' ?? '' }} +

+
+
+

${{ number_format($consulta_historial->tarifa->valor) }}

+

{{ $consulta_historial->tarifa->dias }} Días

+
+ +
+ +

+ @foreach ($consulta_historial->cuentas->unique() as $cuenta) +

+
{{ $cuenta->servicio->nombre }} +
+ @if (!empty($cuenta->servicio->ver_url)) + - URL: {{ $cuenta->servicio->url }} + @else + @foreach ($cuenta->perfil as $perfil) + @if ($consulta_historial->id == $perfil->historial_id) + - Perfil {{ $perfil->perfil }} + + @if (!empty($cuenta->servicio->perfiles)) + @switch($perfil->perfil) + @case(1) + : {{ $msj->clave_1 }} + @break + + @case(2) + : {{ $msj->clave_2 }} + @break + + @case(3) + : {{ $msj->clave_3 }} + @break + + @case(4) + : {{ $msj->clave_4 }} + @break + + @case(5) + : {{ $msj->clave_5 }} + @break + + @case(6) + : {{ $msj->clave_6 }} + @break + + @default + @endswitch + @endif + @endif + @endforeach + @endif +
Email: + {{ $cuenta->correo }}
+
Pass: + {{ $cuenta->password }}
+
+ @endforeach +

+
+ @endif + @if (!empty($consulta_historial->promocion_id)) +
+

{{ $consulta_historial->promocion->nombre ?? '' }}

+
+
+

${{ number_format($consulta_historial->promocion->precio) }} +

+

{{ $consulta_historial->promocion->dias }} Días

+
+ +
+ +

+ @foreach ($consulta_historial->cuentas->unique() as $cuenta) +

+
{{ $cuenta->servicio->nombre }} +
+ @foreach ($cuenta->perfil as $perfil) + @if ($consulta_historial->id == $perfil->historial_id) + - Perfil {{ $perfil->perfil }} + @endif + @endforeach +
Email: + {{ $cuenta->correo }}
+
Pass: + {{ $cuenta->password }}
+
+ @endforeach +

+
+ @endif + + + + +
+
+ + {{--
+ + +
--}} + +
+ +

+ {{ $consulta_historial->cliente->name ?? '' }} +

+
+ + +
+ +

+ {{ $consulta_historial->cliente->email ?? '' }} +

+
+ +
+ +

+ {{ Carbon\Carbon::parse($consulta_historial->fecha_inicio)->format('Y/m/d') ?? '' }} +

+
+ +
+ +

+ {{ Carbon\Carbon::parse($consulta_historial->fecha_final)->diffInDays() ?? '' }} días +

+
+ + + +
+ + + +
+
+ + + @endif +
+
+ + + {{-- Modal ver vencidos --}} +
+ +
+ + @if (!empty($vencidHoy)) +
+
Los siguientes servicios vencen hoy:
+ + + + + + + + + + + + @foreach ($vencidHoy as $h) + + + + + @if (!empty($h->tarifa_id)) + + @endif + + @if (!empty($h->promocion_id)) + + @endif + + @if (!empty($h->tarifa_id)) + + @elseif(!empty($h->promocion_id)) + + @endif + + @endforeach + + +
NombreFecha de CompraServicio
{{ $h->cliente->name ?? '' }} + {{ Carbon\Carbon::parse($h->created_at)->locale('co')->Format('d M Y, h:m a') ?? '' }} + {{ $h->tarifa->servicio->nombre }} + + @if ($h->tarifa->servicio->nombre != 'Spotify Premium' && $h->tarifa->servicio->nombre != 'Youtube Premium') + {{ $h->tarifa->pantallas }} Pantallas + @endif + + {{ $h->promocion->nombre }} +
+ + + +
+ @endif + + +
+ +
+ +
diff --git a/resources/views/livewire/show-configuracion.blade.php b/resources/views/livewire/show-configuracion.blade.php new file mode 100644 index 0000000..c1f5b9c --- /dev/null +++ b/resources/views/livewire/show-configuracion.blade.php @@ -0,0 +1,572 @@ +
+
> +
+
+ +

Cargando

+
+
+
+ + +
+
+
+
+ + + + + + Configuracion +
+
+
+ + {{-- configuracion --}} +
+
+

Información empresa

+
+
+

+ +
+
+ @if ($photo) + + @else + + @endif +
+
+ +
+
+
+ + +
+
+ + +
+
+
+
+ +
+
+

Colores del sitio

+ +
+ + +
+
+ + +
+
+ + +
+
+ + + + +
+ + + + + +
+ + {{-- Slider --}} +
+ +
+ +
+
Gestión de Slider
+ + +
+ +
+
+
+ @if ($slider) + + @else +
+ +
+ + @endif +
+ + +
+ +
+ +
+
+ +
+ +
+ @foreach ($sliders as $slider) +
+
+ +
+
+ +
+
+ @endforeach +
+ +
+ +
+ + {{-- distribuidor --}} +
+ + + + +
+

Distribuidor

+ + {{-- img distribuidor --}} +
+
+
+ + @if ($photo_top) + + @else +
+ +
+ + @endif +
+ + +
+ + + +
+
+ +
+ + + {{-- puestos --}} +
+ +
+ +
+ @if ($imgP1) + + @else + + + + @endif +
+ + + + + +
+ +
+ +
+ @if ($imgP2) + + @else + + + + @endif +
+ + + + +
+ +
+ +
+ @if ($imgP3) + + @else + + + + @endif +
+ + + + +
+ +
+
+ +
+ +
+ @if ($imgP4) + + @else + + + + @endif +
+ + + + + +
+ +
+ +
+ @if ($imgP5) + + @else + + + + @endif +
+ + + + +
+ +
+ +
+ @if ($imgP6) + + @else + + + + @endif +
+ + + + +
+ +
+
+ +
+ +
+ @if ($imgP7) + + @else + + + + @endif +
+ + + + + +
+ +
+ +
+ @if ($imgP8) + + @else + + + + @endif +
+ + + + +
+ +
+ +
+ @if ($imgP9) + + @else + + + + @endif +
+ + + + +
+ +
+
+ +
+ +
+ @if ($imgP10) + + @else + + + + @endif +
+ + + + + +
+ + +
+ {{-- mensaje --}} +
+ + +
+
+ + + + + + + +
+ + {{-- Msj de compra--}} +
+ + +
+
+

Mensaje de compra html

+ + + {{-- mensaje --}} +
+ + +
+
+ +
+

Mensaje de compra wp

+ + + {{-- mensaje --}} +
+ + +
+
+ +
+ + + + + + + +
+
+ + +
+
+

Claves perfil netflix

+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+ + +
+ + + + + + + +
+
+ + +
+
+

URL IPTV

+ +
+ + +
+ +
+ + +
+ + + + + +
+ +
+ + +
+
+

Área critica

+ + + + + +
+ + +
+ + + +
+ +
+ + +
+
+ + +
+ + + + + + +
+ + + +
+ +
+ + + + + +
+ @include('layouts.footer') +
diff --git a/resources/views/livewire/show-index-categoria.blade.php b/resources/views/livewire/show-index-categoria.blade.php new file mode 100644 index 0000000..ac228e2 --- /dev/null +++ b/resources/views/livewire/show-index-categoria.blade.php @@ -0,0 +1,132 @@ +
+ +
+ +
+
+

Seleccione una categoria:

+
+ +
+
+ + @foreach ($categorias as $categoria1) + + @endforeach +
+
+ + imagen de {{ $categoria1->nombre }} + +
+
+
+ + +
+ +
+ +
+ @if ($categorian) +
+
+

Seleccione una promocion:

+
+ +
+ + @foreach ($categorias->where('nombre', $categorian)->first()->promociones as $promocion) + @if ($promocion->visible == 'true') + +
+ + + +
+ + @endif + @endforeach +
+
+ @endif +
+ + +
+ + {{-- Modal ver promociones --}} +
+
+ +
+ + + @foreach ($categorias as $categoria1) + +
+ + + + +
+ + @endforeach + + + + +
+
+
+ + + +
diff --git a/resources/views/livewire/show-index-promo.blade.php b/resources/views/livewire/show-index-promo.blade.php new file mode 100644 index 0000000..2905ba7 --- /dev/null +++ b/resources/views/livewire/show-index-promo.blade.php @@ -0,0 +1,122 @@ +
+
+ +
+ +

+ {{$promo->nombre}} +

+ + +
+ +
+ +
+ + +
+ + +
+ + + @error('cantidad_tarjetaPlan') Requerido* @enderror +
+ +
+ +

+ {{$promo->descripcion}} +

+
+ @foreach ($promo->tarifas as $tarifa) +
  • {{$tarifa->pantallas}} P. de {{$tarifa->servicio->nombre}}
  • + @endforeach +
    + +
    + + + +

    ${{number_format($promo->precio ?? '')}}

    + + + +
    + +
    +
    + + + @error('nombre_comprarPromo') Requerido* @enderror +
    + +
    + + + @error('email_comprarPromo') Requerido* @enderror +
    + +
    + + + @error('celular_comprarPromo') Requerido* @enderror +
    + +
    + + + +
    +
    +
    +
    + + + + + + +
    +

    Planes relacionados

    +
    + @php + $n=1; + @endphp + @foreach($promociones as $plan) + @if (!empty($plan->tarifas->first()->pantallas) && $n<=4) + + @php + $n++; + @endphp + +
    + +
    +

    {{$plan->nombre}}

    +

    {{$plan->descripcion}}

    + +

    {{number_format($plan->precio)}}

    + +
    + +
    + + + +
    +
    +
    + @endif + @endforeach +
    +
    + + @include('layouts.footer') +
    + + + + +
    diff --git a/resources/views/livewire/show-index-servicio.blade.php b/resources/views/livewire/show-index-servicio.blade.php new file mode 100644 index 0000000..2e41f82 --- /dev/null +++ b/resources/views/livewire/show-index-servicio.blade.php @@ -0,0 +1,152 @@ +
    + +
    + +

    + {{$servicio->nombre}} +

    + + +
    + +
    + +
    + + +
    +
    + @if($servicio->nombre == 'Youtube Premium' || $servicio->nombre== 'Spotify Premium') + + + @else + + + @endif + + + @if (!empty($disponibles)) +

    + {{$disponibles ?? ''}} Cuentas disponibles. +

    + + @endif +
    + +
    + + + @error('cantidad_tarjetaPlan') Requerido* @enderror +
    + +
    + +

    + {{$servicio->descripcion}} +

    +
    + + @if (!empty($valor)) + +

    ${{number_format( $valor ?? '')}}

    + @else + + + + @if ($servicio->tarifas_min_valor != $servicio->tarifas_max_valor) +

    {{number_format($servicio->tarifas_min_valor)}} - {{number_format($servicio->tarifas_max_valor)}}

    + @else +

    {{number_format($servicio->tarifas_min_valor)}}

    + @endif + + + @endif +
    + +
    +
    + + + @error('nombre_tarjetaPlan') Requerido* @enderror +
    + +
    + + + @error('email_tarjetaPlan') Requerido* @enderror +
    + +
    + + + @error('celular_tarjetaPlan') Requerido* @enderror +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + @include('layouts.footer') +
    diff --git a/resources/views/livewire/show-index.blade.php b/resources/views/livewire/show-index.blade.php new file mode 100644 index 0000000..91059a8 --- /dev/null +++ b/resources/views/livewire/show-index.blade.php @@ -0,0 +1,53 @@ +
    +
    +

    Mas vendidos

    +
    + @foreach ($promociones as $promocion) +
    + + + +
    + @endforeach +
    +
    + + Ver promociones + +
    +
    + + + @include('layouts.footer') +
    diff --git a/resources/views/livewire/show-inicio.blade.php b/resources/views/livewire/show-inicio.blade.php new file mode 100644 index 0000000..1b7fc0d --- /dev/null +++ b/resources/views/livewire/show-inicio.blade.php @@ -0,0 +1,4 @@ +
    + @include('components.slider') + +
    diff --git a/resources/views/livewire/show-logs.blade.php b/resources/views/livewire/show-logs.blade.php new file mode 100644 index 0000000..f406a3d --- /dev/null +++ b/resources/views/livewire/show-logs.blade.php @@ -0,0 +1,52 @@ +
    + + + + + + + + + + + + + + + + + + @foreach($logs as $item) + + + + + + + + + + + + + + + + + + @endforeach + +
    IdCompraFecha InicioFecha FinalValorVendedorCorreoClienteServicioclienteCredencialesEstado
    {{$item->id}}{{\Carbon\Carbon::parse($item->created_at)->format('y/m/d h:i a')}}{{\Carbon\Carbon::parse($item->fecha_inicio)->format('d/m/Y') }}{{\Carbon\Carbon::parse($item->fecha_final)->format('d/m/Y') }}{{$item->valor}}{{$item->vendedor->name}}{{$item->vendedor->email}}{{$item->cliente->email}}@if(!empty($item->promocion_id)) {{$item->promocion->nombre}} @elseif(!empty($item->tarifa_id)) @if(empty($item->tarifa->servicio->por_tiempo)) {{$item->tarifa->pantallas}} P. de @endif {{$item->tarifa->servicio->nombre}} - {{$item->tarifa->dias}} d. @endif {{$item->nombre_cliente ?? $item->cliente->name}} + @if(!empty($item->cuentas_obsoletas->unique())) + @foreach($item->cuentas_obsoletas->unique() as $cuenta) {{$cuenta->correo}} - {{$cuenta->password}}
    @endforeach + @endif + @if(!empty($item->cuentas->unique())) + @foreach($item->cuentas->unique() as $cuenta1) {{$cuenta1->correo}} - {{$cuenta1->password}}
    @endforeach + @endif +
    + {{$item->estado ?? ''}} +
    +
    + {{ $logs->links( )}} +
    +
    diff --git a/resources/views/livewire/show-order.blade.php b/resources/views/livewire/show-order.blade.php new file mode 100644 index 0000000..15a7ffa --- /dev/null +++ b/resources/views/livewire/show-order.blade.php @@ -0,0 +1,66 @@ +
    +
    + @if ($estado == 'aprobado') +
    + + + + + +
    + Recarga exitosa +
    + + + + + + + +
    + @elseif($estado == 'pendiente') + +
    + + + + + + +
    + Recarga pendiente . +
    + + + + +
    + @else + +
    + + + + + +
    + Error en la recarga. +
    + + + + + +
    + + + + @endif +
    +
    diff --git a/resources/views/livewire/show-perfil.blade.php b/resources/views/livewire/show-perfil.blade.php new file mode 100644 index 0000000..db1e2ab --- /dev/null +++ b/resources/views/livewire/show-perfil.blade.php @@ -0,0 +1,100 @@ +
    + +
    +
    +
    + +

    Cargando

    +
    +
    +
    + +
    + +
    +
    +
    + @if ($url_imagen) + + @elseif($url_imagen_d) + + @else + + @endif +
    +
    + +
    + + +
    +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + + +
    + +
    + + + +
    +
    + + {{-- Modal contraseña --}} +
    +
    +
    + +
    + + + @error('newPassword') {{ 'Diligencie correctamente*'}} @enderror +
    + +
    + + + + + + +
    +
    +
    +
    + +
    diff --git a/resources/views/livewire/show-planes.blade.php b/resources/views/livewire/show-planes.blade.php new file mode 100644 index 0000000..5a5df16 --- /dev/null +++ b/resources/views/livewire/show-planes.blade.php @@ -0,0 +1,961 @@ +
    +
    +
    +
    + +

    Cargando

    +
    +
    +
    + + + {{-- Buscador --}} +
    +
    +
    +
    + + + + + + Planes +
    + + + Nueva cuenta + + + + + @if ( auth()->user()->rol->nombre != "editor") + + Modificar tarifas + + + + + + @endif +
    +
    + + + + + + + + +
    + +
    + + +
    +
    + + +
    +
    + + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +
    + @if (auth()->user()->rol->nombre != "editor") +
    + +
    + @endif + + + +
    + +
    +
    + + {{-- tabla --}} +
    + + + + + + + + + + + + + + + + + + @php + $n = 0; + @endphp + + @foreach ($cuentas as $cuenta) + + @php + $n++; + $historiales=false; + + if(now()->gt($cuenta->vencimiento)){ + $historiales = $cuenta->historiales()->where('fecha_final', '>=', now()->toDateString())->count(); + } + + @endphp + + @include('components/listado-planes') + + + @endforeach + +
    idServiciocorreoRestanteOcupado
    + {{ $cuentas->links() }} +
    +
    + + + {{-- Modal ver --}} +
    +
    +
    +
    + {{ $nombre_servicios }} +
    + + {{-- tabla usuarios --}} +
    + + + + + + + + + + + + + + + @if (!is_null($consulta_verUsuarios)) + @foreach ($consulta_verUsuarios->historiales->unique() as $verUsuarios) + + + @if($consulta_verUsuarios->estado == 'activo') + + @else + + @endif + + + + @php + + $date1 = new DateTime(strtr(strval($fechaActual), '/', '-')); + $date2 = new DateTime(strtr(strval($verUsuarios->fecha_final), '/', '-')); + + @endphp + + @if ($date1 < $date2) + + @endif + + @if ($date1 > $date2) + + @endif + + @if ($date1 == $date2) + + @endif + + + + + @php + $promocion = $verUsuarios->promocion_id; + $observaciones = $verUsuarios->observaciones; + @endphp + + @if (!is_null($promocion)) + + @else + + @endif + + @if (!is_null($observaciones)) + + @else + + @endif + + + @endforeach + @endif + +
    DistribuidorPerfilClienteRestanteInicioFinal
    {{ $verUsuarios->vendedor->name ?? '' }} + @foreach ($consulta_verUsuarios->perfil as $perfil) + + @if ($verUsuarios->id == $perfil->historial_id ) + -Perfil: {{ $perfil->perfil ?? '' }} + + @endif + @endforeach + + + {{ $verUsuarios->cliente->name ?? '' }} + @php + $diff = $date1->diff($date2); + echo $diff->days . ' dias'; + @endphp + + @php + echo 'Vencido'; + @endphp + + @php + echo 'Vence hoy!!'; + @endphp + {{ \Carbon\Carbon::parse($verUsuarios->fecha_inicio)->format('y/m/d' ) }}{{\Carbon\Carbon::parse( $verUsuarios->fecha_final)->format('y/m/d' ) }} + + + + + + +
    + + + +
    +
    + + + + + + + + +
    +
    Email: + {{ $consulta_verUsuarios->correo ?? '' }}
    +
    Password: + {{ $consulta_verUsuarios->password ?? '' }}
    + + +
    + + + + + + +
    +
    + +
    + + + +
    + +
    +
    +
    + + {{-- Modal renovar --}} +
    +
    +
    + +
    + + +
    + +
    + + +
    + +
    + + + + +
    +
    +
    + + +
    + +
    + + +
    +
    + {{ $fecha_final_renovar }} + +
    + + + + + + +
    + +
    +
    +
    + + {{-- Modal add user --}} +
    +
    +
    + +
    + + + + +
    + + @if(!empty($consulta_verUsuarios->servicio->perfiles)) + +
    + + +
    + + @endif + @if(!empty($consulta_verUsuarios->servicio->tarifas )) + + + @error('tarifa')

    {{ 'Requerido*' }}

    @enderror + @endif + + + +
    + + + + + + +
    + +
    +
    +
    + + + {{-- Modal observaciones --}} +
    +
    +
    + + +
    + + +
    +
    + + + + + + +
    +
    +
    +
    + + {{-- Modal observaciones1 --}} +
    +
    +
    + + +
    + + +
    +
    + + + + + + +
    +
    +
    +
    + + + {{-- Modal newCuenta --}} + +
    +
    +
    + +
    + + @error('servicio_newCuenta')
    {{ 'Requerido*' }}
    @enderror + +
    + +
    + + + @error('usuario_newCuenta')
    {{ 'Requerido*' }}
    @enderror +
    + +
    + + + @error('password_newCuenta')
    {{ 'Requerido*' }}
    @enderror +
    + +
    + + + @error('estado')
    {{ 'Requerido*' }}
    @enderror + +
    + +
    +
    + + + @error('fecha_inicial')
    {{ 'Requerido*' }}
    @enderror +
    + +
    + + + @error('fecha_final')
    {{ 'Requerido*' }}
    @enderror +
    +
    + +
    + + + + + + +
    + +
    +
    +
    + + + + {{-- Modal tarifas --}} + +
    +
    +
    + +
    + + +
    + +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + + + +
    +
    +
    + + +
    + + + + + + + + + + + + + @if (!empty($tarifas)) + @foreach ($tarifas as $tarifa) + + + + + + + + + @endforeach + @endif + +
    RolPantallasValorDias
    {{ $tarifa->rol->nombre ?? '' }}{{ $tarifa->pantallas ?? '' }}{{ $tarifa->valor ?? '' }}{{ $tarifa->dias ?? '' }}
    +
    + + + +
    + + + + +
    + +
    +
    +
    + +
    +
    +
    + + @if($informacionTarifaRol) +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + + + +
    +
    +
    + @endif + + + +
    + + + + +
    + +
    +
    +
    + + {{-- Modal agregar servicios --}} +
    +
    +
    +
    +
    +
    + + +
    + +
    + @if ($photo) + + @else +
    + @endif +
    +
    + +
    +
    + + +
    + +
    + @if ($photo_inicio) + + @else +
    + @endif +
    +
    + +
    + + +
    + + +
    + + +
    + +
    + +
    + +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    +
    + @include('layouts.footer') + + +
    diff --git a/resources/views/livewire/show-promociones.blade.php b/resources/views/livewire/show-promociones.blade.php new file mode 100644 index 0000000..99c8237 --- /dev/null +++ b/resources/views/livewire/show-promociones.blade.php @@ -0,0 +1,995 @@ +
    + +
    +
    +
    + +

    Cargando

    +
    +
    +
    + +
    + +
    +
    +
    + + + + + + Promociones +
    + @if (auth()->user()->rol->nombre == "super" || auth()->user()->rol->nombre == "administrador") + Nueva + promoción + + + + + @endif +
    + {{----}} +
    + +
    +
    +

    Seleccione una categoria:

    +
    + +
    +
    + + @foreach ($categorias as $categoria1) + + @endforeach +
    +
    + + imagen de {{ $categoria1->nombre}} + +
    +
    +
    + + +
    + +
    + +
    + @if ($categorian) +
    +
    +

    Seleccione una promocion:

    +
    + +
    + + @foreach ($categorias->where('nombre', $categorian)->first()->promociones as $promocion) + @if ($promocion->visible == 'true') + @if (empty($usuario=$promocion->usuario_promos->where('usuario_id', Auth::user()->id)->first())) +
    + + + + +
    + + +
    + + +
    + @if ( auth()->user()->rol->nombre != "editor") + + @endif + @if (auth()->user()->rol->nombre == "super" || auth()->user()->rol->nombre == "administrador") + + + @endif +
    + + +
    + @else + + @if ($usuario->visible == 'true') + +
    + + + + +
    + + +
    + + +
    + @if ( auth()->user()->rol->nombre != "editor") + + @endif + @if (auth()->user()->rol->nombre == "super" || auth()->user()->rol->nombre == "administrador") + + + @endif +
    + + +
    + @endif + + + @endif + + @endif + @endforeach + +
    +
    + @endif +
    + + {{-- Modal agregar promocion--}} +
    +
    +
    +
    +
    + + +
    +
    + @if ($photo) + + @error('photo') Obligatorio* @enderror + @else + + @error('photo') Obligatorio* @enderror + @endif +
    +
    + +
    + + + @error('nombre_promocion') Obligatorio* @enderror +
    + +
    + + + @error('descripcion_promocion') Obligatorio* @enderror +
    + +
    + + +
    + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + + @error('fecha_limite_promocion') Obligatorio* @enderror +
    + +
    + + + + + +
    + +
    + +
    + +
    + +
    +
    + @error('list') Obligatorio* @enderror +
    + + + + + + + + + @if (!empty($list)) + @php + $n = 0; + @endphp + @foreach ($list as $tarifaServicios) + + + + + + @php + $n++; + @endphp + @endforeach + @endif + +
    + {{ $tarifaServicios['nombre'] ?? '' }} - + + @if( $tarifaServicios['nombre'] == 'Youtube Premium' || $tarifaServicios['nombre'] =='Spotify Premium') + {{ $tarifaServicios['dias'] ?? '' }} Dias. + @else + {{ $tarifaServicios['cantidad'] ?? '' }} P. + @endif + + +
    +
    + + +
    + + + + + + +
    +
    +
    +
    + + {{-- Modal agregar categoria --}} + {{--
    +
    +
    +
    +
    +
    + + +
    +
    + + @if ($categoria_photo) + + @endif + +
    +
    + +
    + + +
    + +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    +
    --}} + + {{-- Modal ver promno --}} +
    +
    +
    + {{-- PHOTO --}} +
    + +
    + +
    + +
    +
    +
    +

    {{$nombrePromo}}

    +
    +
    +

    ${{number_format($precioAhora)}}

    +
    +
    +
    +

    {{$descripcionPromo}}

    +
    +
    + +
    + + + + + + +
    +
    +
    +
    +
    + + {{-- Modal editar promo --}} +
    +
    +
    +
    +
    + + +
    +
    + @if ($photo) + + @else + + @endif +
    +
    + +
    + +
    +
    + + +
    + +
    + + +
    +
    + + +
    + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + + + +
    + +
    + + + +
    +
    +
    +
    + +
    + +
    +
    + @error('list') Obligatorio* @enderror +
    + + + + + + + + + @if (!empty($list2)) + @php + $n = 0; + @endphp + @foreach ($list2 as $lista) + + + + + + @php + $n++; + @endphp + @endforeach + @endif + +
    + {{ $lista['nombre'] ?? '' }} - {{ $lista['cantidad'] ?? '' }} P. - {{ $lista['dias'] ?? '' }} D. + + +
    +
    +
    +
    + + +
    +
    + + + + + + +
    +
    +
    +
    + + {{-- Modal comprar promo --}} +
    +
    +
    +
    +

    + {{$nombrePromo}} +

    +
    +

    + {{$dias}} Dias +

    +

    + ${{number_format($precioAhora)}} +

    +
    +
    + +
    +
    +

    + Información del cliente: +

    +

    + Ingrese los datos del cliente final. +

    +
    + +
    +
    + + + @error('nombre_comprarPromo') Requerido* @enderror +
    +
    + + + @error('celular_comprarPromo') Requerido* @enderror +
    +
    +
    +
    + + + @error('email_comprarPromo') Requerido* @enderror +
    + + +
    + + + @error('cantidad_comprarPromo') Requerido* @enderror +
    +
    +
    +

    + Este servicio vencerá el {{$fechaFinal}} en {{$dias_comprarPromo}} Dias +

    +
    +
    +
    + El valor de ${{number_format($total=((int)$precioAhora*(int)$cantidad_comprarPromo))}} será descontado de su saldo. +
    + @if ($total > auth()->user()->saldo->valor) +
    +

    No tiene fondo suficientes para esta compra, recargue su cuenta.

    +
    + @endif +
    + +
    + + + + + + +
    + +
    +
    +
    +
    + + + {{-- Modal credenciales --}} +
    +
    +
    +
    +

    + {{$this->nombrePromo}} +

    +
    +

    + {{$this->dias }} Dias +

    +

    + ${{number_format($this->precioAhora)}} +

    +
    +
    + +
    +
    +
    + {!!$mensaje_servicio!!} +
    + {!!$msj->msj_compra!!} +
    +
    +

    + Información de cuentas: +

    +
    +
    + @php + $n=0; + @endphp + + @if ($cuentas) + @foreach ($cuentas->cuentas->unique() as $cuenta) + @php + $n++; + @endphp + +
    +
    +

    +
    {{ $cuenta->servicio->nombre }} :
    + @if (!empty($cuenta->servicio->ver_url)) + - URL: {{ $cuenta->servicio->url}} + @else + + @foreach ($cuenta->perfil as $perfil) + @if ($cuentas->id == $perfil->historial_id) + - Perfil {{ $perfil->perfil }} + @if (!empty($cuenta->servicio->perfiles)) + @switch( $perfil->perfil) + + @case(1) + : {{ $msj->clave_1 }} + @break + @case(2) + : {{ $msj->clave_2 }} + @break + @case(3) + : {{ $msj->clave_3 }} + @break + @case(4) + : {{ $msj->clave_4 }} + @break + @case(5) + : {{ $msj->clave_5 }} + @break + @case(6) + : {{ $msj->clave_6 }} + @break + @default + + @endswitch + @endif + @endif + @endforeach + + @endif + +

    + +

    + Usuario:

    {{ $cuenta->correo }}

    +

    +

    + Contraseña:

    {{ $cuenta->password }} +

    +

    +
    +
    + +
    + + +
    + + @endforeach + + +
    + +
    + +

    + Este servicio vencerá el

    + {{ Carbon\Carbon::parse($cuentas->fecha_final)->format('Y/m/d') ?? ''}}

    +

    + + @endif + + +
    + +
    + +
    +
    + + +
    + + + + +
    + +
    + +
    +
    +
    + + {{-- Modal ver promociones --}} +
    +
    + +
    + + + @foreach ($categorias as $categoria1) + +
    + + + + +
    + + @endforeach + + + + +
    +
    +
    + + + +
    diff --git a/resources/views/livewire/show-recarga.blade.php b/resources/views/livewire/show-recarga.blade.php new file mode 100644 index 0000000..1922510 --- /dev/null +++ b/resources/views/livewire/show-recarga.blade.php @@ -0,0 +1,134 @@ +
    +
    +
    +
    + +

    Cargando

    +
    +
    +
    +
    +
    +
    + + + + Saldo +
    +
    + +
    +
    +
    + Recargar saldo +
    +
    + @csrf +
    + Saldo actual:

    ${{ number_format($user->saldo->valor) }}

    +
    +
    + Monto a recargar +
    +
    + + + @if($valor_recarga) +
    Tu valor a pagar seria: $

    + + {{$nuevo_valor = (((($valor_recarga)*0.03) + '700' )* 0.19)+ ((($valor_recarga)*0.03) + '700' ) + $valor_recarga}} + + +

    + +
    + @endif +

    Se sumara $700 COP+ IVA + 3% adicional al pago en Mercado Pago por costos de sistema.

    +
    + +
    + + + +
    + +
    + + + + +
    + +
    +

    Historial

    + + + + + + + + + @php + $i = 0; + @endphp + + @foreach ($historial_recargas as $historial_recarga) + + {{-- --}} + + + + + @endforeach + +
    FechaValorEstado
    {{date("d/m/Y", strtotime($historial_recarga->created_at))}}{{date("d/m/Y",strtotime($historial_recarga->created_at))}}${{ number_format($historial_recarga->monto) }}{{$historial_recarga->status}}
    +
    +
    +
    + + +{{--Modal nequi ---}} +
    +
    +
    + + + + +
    +
    +
    + + +
    diff --git a/resources/views/livewire/show-recargas.blade.php b/resources/views/livewire/show-recargas.blade.php new file mode 100644 index 0000000..6fbd3b0 --- /dev/null +++ b/resources/views/livewire/show-recargas.blade.php @@ -0,0 +1,99 @@ +
    +
    + +
    +
    + + + + Saldo +
    +
    + @php + // SDK de Mercado Pago + require base_path('vendor/autoload.php'); + // Agrega credenciales + MercadoPago\SDK::setAccessToken(config('services.mercadopago.token')); + + + // Crea un objeto de preferencia + $preference = new MercadoPago\Preference(); + + //$payment_methods = MercadoPago::get("/v1/payment_methods"); + // Crea un ítem en la preferencia + $item = new MercadoPago\Item(); + $item->title = 'Recarga SrPremium'; + $item->quantity = 1; + $item->unit_price = $monto; + $preference->external_reference = $referencia; + $preference->back_urls = array( + + "success" => url('/orders/'), + "failure" => url('/orders/'), + "pending" => url('/orders/') + ); + $preference->auto_return = "approved"; + $preference->items = array($item); + $preference->save(); + + + @endphp + +
    +
    +
    + Recargar saldo +
    + +
    + Monto a recargar +

    + ${{number_format($monto)}} +

    +
    + + + + +
    +
    + + + + + +
    + +
    + + + + + +
    +
    diff --git a/resources/views/livewire/show-reportes.blade.php b/resources/views/livewire/show-reportes.blade.php new file mode 100644 index 0000000..76d7104 --- /dev/null +++ b/resources/views/livewire/show-reportes.blade.php @@ -0,0 +1,110 @@ +
    +
    +
    +
    + + + + + + Reportes +
    +
    + @if (auth()->user()->rol->nombre == "super" || auth()->user()->rol->nombre == "administrador") + + + @endif + +
    +
    + Mis ventas +
    +
    +
    +
    +

    + {{ $cantidad }} +

    +

    + ${{ number_format($suma) }} +

    +
    +
    +

    + Compras Realizadas +

    +

    + Valor +

    + +
    +
    +
    +
    + Transacciones Paquetes +
    + + + + + + + + + + + + @foreach ($historiales as $historial) + + + + + + + + @endforeach + +
    FechaDetalle
    + {{$historial->estado}} + + @if(!empty($historial->tarifa_id)) + {{$historial->tarifa->pantallas ?? ''}} {{ $historial->tarifa->servicio->nombre ?? ''}} + @endif + + @if(!empty($historial->promocion_id)) + {{ $historial->promocion->nombre ?? ''}} + @endif +
    + {{ $historiales->links() }} + +
    diff --git a/resources/views/livewire/show-roles.blade.php b/resources/views/livewire/show-roles.blade.php new file mode 100644 index 0000000..ec267b9 --- /dev/null +++ b/resources/views/livewire/show-roles.blade.php @@ -0,0 +1,156 @@ +
    +
    +
    +
    + +

    Cargando

    +
    +
    +
    + +
    +
    +
    +
    + + + + + + Roles +
    + Añadir + rol + + + + + +
    +
    + + + {{-- -Tabla usuarios - --}} +
    + + + + + + + + + + @foreach ($roles as $rol) + + + + + + + + @endforeach + +
    NombreUsuarios
    {{ $rol->nombre ?? '' }}{{ $rol->usuarios_count ?? '' }} + + +
    + + +
    +
    + +
    + + + + + {{-- Añadir rol --}} +
    +
    +
    +
    +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    +
    + + {{-- editar rol --}} +
    +
    +
    +
    +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    +
    + + + +
    +
    diff --git a/resources/views/livewire/show-servicio.blade.php b/resources/views/livewire/show-servicio.blade.php new file mode 100644 index 0000000..43421ff --- /dev/null +++ b/resources/views/livewire/show-servicio.blade.php @@ -0,0 +1,525 @@ +
    +
    +
    +
    + +

    Cargando..

    +
    +
    +
    +
    +
    +
    + +

    Desactivando servicio..

    +
    +
    +
    +
    +
    +
    + +

    Eliminando servicio..

    +
    +
    +
    +
    +
    +
    + +

    Actulizando servicio..

    +
    +
    +
    +
    +
    +
    + +

    Creando servicio..

    +
    +
    +
    +
    +
    +
    +
    + + + + + + Planes +
    + +

    Nuevo servicio

    + + + +
    +
    +
    + + +
    +

    Servicios

    +
    + + + + + + + + + + + + + + + + + + + @foreach ($servicios as $servicio) + + + + + + + + + + + + + + + + @endforeach + +
    LogoEstadoSolo por tiempoMostrar perfilesContraseña de perfilesURLRenovación +
    + + + {{ $servicio->estado }} + + @if ($servicio->por_tiempo) + + + + @endif + + @if ($servicio->ver_perfiles) + + + + @endif + + @if ($servicio->perfiles) + + + + @endif + + {{ $servicio->url ?? '' }} + + + + @if ($servicio->renovacion) + + + + @endif + + + + +
    + + @if ($servicio->estado != 'activo') + + @else + + @endif + +
    +
    + +
    + +
    + +
    + + {{-- Modal agregar servicios --}} +
    +
    +
    +
    +
    +
    + + +
    + +
    + @if ($photo) + + @else +
    + @endif +
    +
    + +
    +
    + + +
    + +
    + @if ($photo_inicio) + + @else +
    + @endif +
    +
    + +
    + + + @error('nombre_servicio') + Requerido* + @enderror +
    + +
    + + + + + +
    + +
    + + + + +
    + +
    + +
    + + + @error('pantallas') + Requerido* + @enderror +
    + +
    + + + @error('completa') + Requerido* + @enderror +
    +
    + +
    + + +
    + +
    +
    + +
    + + +
    + + + +
    + + @error('estado_servicio') +
    Requerido*
    + @enderror +
    + + +
    + + +
    + +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    +
    + + {{-- Modal editar servicios --}} +
    +
    +
    +
    +
    +
    + + +
    + +
    + @if ($photo) + + @else + + @endif +
    +
    + +
    +
    + + +
    + +
    + @if ($photo_inicio) + + @else + + @endif +
    +
    + +
    + + + @error('nombre_servicio') + Requerido* + @enderror +
    +
    + + + + +
    + +
    + + + + +
    + +
    +
    + + + @error('pantallas') + Requerido* + @enderror +
    + +
    + + + @error('completa') + Requerido* + @enderror +
    +
    + +
    + + +
    + +
    +
    + + + +
    + + +
    + + + +
    + + +
    + +
    + + +
    + + @error('estado_servicio') +
    Requerido*
    + @enderror + +
    + + +
    + +
    + + + + + + +
    +
    +
    +
    +
    + @include('layouts.footer') +
    diff --git a/resources/views/livewire/show-servicios.blade.php b/resources/views/livewire/show-servicios.blade.php new file mode 100644 index 0000000..b048e2d --- /dev/null +++ b/resources/views/livewire/show-servicios.blade.php @@ -0,0 +1,690 @@ +
    +
    +
    +
    + +

    Adquiriendo paquetes

    +
    +
    +
    +
    +
    +
    + +

    Cargando

    +
    +
    +
    + +
    + + + +
    + +
    +
    +
    + + + + + + Servicios +
    +
    + + {{-- tabla productos --}} +
    +
    +

    Seleccione un servicio:

    +
    + +
    +
    + + @foreach ($servicios as $servicio1) + + @endforeach +
    + +
    +
    + + +
    + +
    + +
    + @if ($servicio) +
    +
    +

    Seleccione un plan:

    +
    +
    + + @foreach ($servicio['tarifas'] as $tarifa) + @php + $this->tarifa = $tarifa; + @endphp + @if ($tarifa['estado'] == 'activo') + @if ($con = $tarifa['usuario_tarifas']) + @if ($con[0]['visible'] == 'true') + + @endif + @else + + @endif + @endif + @endforeach +
    +
    + @endif +
    + + +
    + + + {{-- Modal agregar servicios --}} +
    +
    +
    +
    +

    + @if ($tiempo_tarjetaPlan) + {{ $servicio_tarjetaPlan }} + @else + {{ $servicio_tarjetaPlan }} - {{ $pantallas_tarjetaPlan }} + {{ $pantallas_tarjetaPlan == 1 ? 'pantalla' : 'pantallas' }} + @endif + +

    +
    +

    + {{ $dias_tarjetaPlan }} {{ $dias_tarjetaPlan == 1 ? 'Día' : 'Días' }} + +

    +

    + ${{ number_format($valor_tarjetaPlan) }} +

    +
    +
    + +
    +
    +

    + Información del cliente: +

    +

    + Ingrese los datos del cliente final. +

    +
    + +
    +
    + + + @error('nombre_tarjetaPlan') + Requerido* + @enderror +
    +
    + + + @error('celular_tarjetaPlan') + Requerido* + @enderror +
    +
    +
    +
    + + + @error('email_tarjetaPlan') + Requerido* + @enderror +
    +
    + + + + @error('cantidad_tarjetaPlan') + Requerido* + @enderror +
    +
    +
    + + {{ $disponibles < 0 ? 0 : (int) $disponibles }} + {{ $disponibles == 1 ? 'plan disponible' : 'planes disponibles' }} para esta cantidad
    +
    +

    + + Este servicio vencerá el + {{ $fechaFinal ? $fechaFinal->format('d/m/Y \a \l\a\s h:i A') : '' }} en + {{ $dias_tarjetaPlan }} {{ $dias_tarjetaPlan == 1 ? 'día' : 'días' }} + +

    +
    +
    +
    + El valor de + ${{ number_format($total = (int) $valor_tarjetaPlan * (int) $cantidad_tarjetaPlan) }} será + descontado de su saldo. + + + + + + +
    + @if ($total > auth()->user()->saldo->valor) +
    +

    No tiene fondo suficientes para esta compra, recargue su cuenta.

    + +
    + @endif +
    +
    + @if (auth()->user()->rol->nombre != 'editor') + + + + @endif + + + +
    + +
    + +
    +
    +
    + + {{-- Modal credenciales --}} +
    +
    +
    +
    +

    + @if (!empty($servicio_t->por_tiempo)) + @if ($servicio_t->por_tiempo == true) + {{ $servicio_tarjetaPlan }} + @else + {{ $servicio_tarjetaPlan }} - {{ $pantallas_tarjetaPlan }} + {{ $pantallas_tarjetaPlan == 1 ? 'pantalla' : 'pantallas' }} + @endif + @endif +

    +
    +

    + {{ $dias_tarjetaPlan }} Dias +

    +

    + ${{ number_format($valor_tarjetaPlan) }} +

    +
    +
    + +
    +
    +
    + {!! $mensaje !!} +
    + {!! $msj->msj_compra !!} +
    + +
    +

    + Información de cuentas: +

    +
    + +
    + + + @if ($cuentas) + + @php + $n = 0; + @endphp + + @foreach ($cuentas->cuentas->unique() as $cuenta) + @php + $n++; + @endphp +
    +
    +

    + @if (!empty($cuenta->servicio->ver_url)) + - URL: {{ $cuenta->servicio->url }} + @else + @foreach ($cuenta->perfil as $perfil) + @if (!empty($cuenta->servicio->ver_perfiles)) + @if ($cuentas->id == $perfil->historial_id && $cuenta->estado == 'activo') + - Perfil {{ $perfil->perfil }} + + @if (!empty($cuenta->servicio->perfiles)) + @switch($perfil->perfil) + @case(1) + : {{ $msj->clave_1 }} + @break + + @case(2) + : {{ $msj->clave_2 }} + @break + + @case(3) + : {{ $msj->clave_3 }} + @break + + @case(4) + : {{ $msj->clave_4 }} + @break + + @case(5) + : {{ $msj->clave_5 }} + @break + + @case(6) + : {{ $msj->clave_6 }} + @break + + @default + @endswitch + @endif + @endif + @endif + @endforeach + @endif +

    +

    + Usuario:

    {{ $cuenta->correo }} +

    +

    +

    + Contraseña:

    + {{ $cuenta->password }} +

    +

    +
    +
    + +
    + + +
    + @endforeach + + + + + +
    + +
    + + +

    + Este servicio vencerá el

    + + {{ Carbon\Carbon::parse($cuentas->fecha_final)->format('Y/m/d') ?? '' }}.

    +

    + + @endif + + +
    + +
    + +
    +
    + + +
    + + + + +
    + +
    + +
    +
    +
    + + {{-- Modal ver servicio --}} +
    +
    + + + + + @foreach ($servicios as $servicio1) + + + + @endforeach + + + + +
    + +
    +
    +
    + + + + + +
    + +
    + + + + + + + +
    diff --git a/resources/views/livewire/show-top.blade.php b/resources/views/livewire/show-top.blade.php new file mode 100644 index 0000000..1cccbdc --- /dev/null +++ b/resources/views/livewire/show-top.blade.php @@ -0,0 +1,127 @@ +
    +
    + +
    +
    + + Distribuidores +
    +
    + + {{-- tabla --}} +
    +

    Mejores distribuidores del mes

    + +
    + +

    {{$configuracion->mensaje_top}}

    +
    + + + + + + + + + + + + @php + $i = 0; + @endphp + + @foreach ($usuarios as $usuario) + @if($usuario->name == 'usuarioEliminado') + @else + + @php + $i++; + @endphp + + + + + + + + + @if ($i == 1) + + + + @elseif ($i == 2) + + + + @elseif ($i == 3) + + + @elseif ($i == 4) + + + @elseif ($i == 5) + + + @elseif ($i == 6) + + + @elseif ($i == 7) + + + @elseif ($i == 8) + + + @elseif ($i == 9) + + + @elseif ($i == 10) + + + @endif + + + + @endif + @endforeach + +
    NombreVentasPremio
    + + + + + {{ $usuario->name }}{{ $usuario->historiales_venta_count }} + + {{$configuracion->premio_1}} + + + {{$configuracion->premio_2}} + + + {{$configuracion->premio_3}} + + + {{$configuracion->premio_4}} + + + {{$configuracion->premio_5}} + + + {{$configuracion->premio_6}} + + + {{$configuracion->premio_7}} + + + {{$configuracion->premio_8}} + + + {{$configuracion->premio_9}} + + + {{$configuracion->premio_10}} +
    +
    +
    + @include('layouts.footer') +
    diff --git a/resources/views/livewire/show-usuarios.blade.php b/resources/views/livewire/show-usuarios.blade.php new file mode 100644 index 0000000..e507579 --- /dev/null +++ b/resources/views/livewire/show-usuarios.blade.php @@ -0,0 +1,618 @@ +
    +
    +
    +
    + +

    Cargando

    +
    +
    +
    + +
    + + + + + + {{-- Buscar --}} +
    + +
    + + {{-- -Tabla usuarios - --}} +
    + + + + + + + + + + + + + + @foreach ($usuarios as $usuario) + @if($usuario->name == 'usuarioEliminado') + @else + + + + + + + + + + + + + + + + @endif + @endforeach + +
    NombreEmailRolVentasSaldo
    {{ $usuario->name ?? '' }}{{ $usuario->email ?? '' }}{{ $usuario->rol->nombre ?? '' }}{{ $usuario->historiales_venta_count ?? '' }}{{ $usuario->saldo->valor ?? '' }} + + +
    + + + + + + +
    +
    + {{ $usuarios->links() }} +
    + + {{-- Gestionar precios --}} +
    +
    +
    +

    Personalización de precios para {{$usuario_nombre}}

    + +
    + +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    + +
    + + + +
    + + + + + + + + + + + + + @if (!empty($consulta_usuarioTarifas)) + @foreach ($consulta_usuarioTarifas as $usuarioTarifa) + + + + + + @if ($usuarioTarifa->visible != 'true') + + @else + + @endif + + + + + + @endforeach + @endif + +
    ServicioPlanOcultoTarifa
    {{ $usuarioTarifa->tarifa->servicio->nombre ?? '' }} + @if($usuarioTarifa->tarifa->servicio->por_tiempo) + {{ $usuarioTarifa->tarifa->dias ?? '' }} {{ $usuarioTarifa->tarifa->dias == 1 ? 'día' : 'días' }} + + @else + {{ $usuarioTarifa->tarifa->pantallas ?? '' }} {{ $usuarioTarifa->tarifa->pantallas == 1 ? 'pantalla' : 'pantallas' }} - {{ $usuarioTarifa->tarifa->dias ?? '' }} {{ $usuarioTarifa->tarifa->dias == 1 ? 'día' : 'días' }} + + @endif + ${{ $usuarioTarifa->precio ?? '' }} + + +
    + + +
    + + + +
    +
    +
    +
    + + {{-- Gestionar promocion --}} +
    +
    +
    +

    Personalización de precios para {{$usuario_nombre}}

    + +
    + +
    + +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + + +
    + + + + + + + + + + + + + @if (!empty($consulta_usuarioPromo)) + @foreach ($consulta_usuarioPromo as $usuarioPromo) + + + + @if ($usuarioPromo->visible != 'true') + + @else + + @endif + + + + + + @endforeach + @endif + + +
    PromocionOcultoPrecio
    {{ $usuarioPromo->promocion->nombre ?? '' }}${{ $usuarioPromo->precio ?? '' }} + + +
    + + +
    + + + +
    +
    +
    +
    + + {{-- Añadir usuario --}} +
    +
    +
    +
    +
    + + + @error('nombre') Requerido* @enderror +
    + +
    + + + @error('email') Requerido* @enderror +
    + +
    + + + @error('password') Requerido* @enderror +
    + +
    + + + @error('rol') Requerido* @enderror +
    + +
    + + + + + + +
    +
    +
    +
    +
    + + {{-- editar usuario --}} +
    +
    +
    +
    +
    + + + @error('nombre_edit') Requerido* @enderror +
    + +
    + + + @error('email_edit') Requerido* @enderror +
    + +
    + + + @error('rol_edit') Requerido* @enderror +
    + +
    + + + + + + +
    +
    +
    +
    +
    + + {{-- Modal contraseña --}} +
    +
    +
    +
    + Cambiar Contraseña +
    + +
    + + + @error('newPassword') {{ 'Diligencie correctamente*'}} @enderror +
    + +
    + + + + + + +
    +
    +
    +
    + + {{-- Modal add saldo --}} +
    +
    +
    +
    + Recargar saldo +
    +
    +
    + Saldo actual: $

    {{number_format($saldo_actual)}}

    +
    +
    + Monto a recargar +
    +
    + + +
    Tu valor total seria: $

    {{$saldo_actual + $valor_recargar}} + +

    +
    +
    + +
    + + + + + + +
    + +
    + +
    +
    +
    + + {{-- Modal tarifas --}} + +
    +
    +
    + +
    + + +
    + +
    + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    + + + +
    + +
    + + + + + + + + + + @if (!empty($tarifas)) + @foreach ($tarifas as $tarifa) + + + + + + @endforeach + @endif + +
    RolValor
    {{ $tarifa->rol->nombre ?? '' }}{{ $tarifa->precio ?? '' }} + + +
    +
    + +
    + + +
    + +
    + + + + +
    + +
    +
    +
    + +
    +
    diff --git a/resources/views/livewire/show-utilidades.blade.php b/resources/views/livewire/show-utilidades.blade.php new file mode 100644 index 0000000..0bf1ae7 --- /dev/null +++ b/resources/views/livewire/show-utilidades.blade.php @@ -0,0 +1,3 @@ +
    + {{-- Care about people's approval and you will be their prisoner. --}} +
    diff --git a/resources/views/livewire/show-wompi.blade.php b/resources/views/livewire/show-wompi.blade.php new file mode 100644 index 0000000..4a5c567 --- /dev/null +++ b/resources/views/livewire/show-wompi.blade.php @@ -0,0 +1,35 @@ +
    +
    +
    +
    + Recargar saldo +
    + +
    + Monto a recargar +

    + ${{number_format($monto)}} +

    +
    + +
    +
    + +
    +
    + + +
    +
    + + +
    diff --git a/resources/views/livewire/showcomprar.blade.php b/resources/views/livewire/showcomprar.blade.php new file mode 100644 index 0000000..29fcfd7 --- /dev/null +++ b/resources/views/livewire/showcomprar.blade.php @@ -0,0 +1,102 @@ +
    + + +
    + +
    +
    + + + + Saldo +
    +
    + @php + // SDK de Mercado Pago + require base_path('vendor/autoload.php'); + // Agrega credenciales + MercadoPago\SDK::setAccessToken(config('services.mercadopago.token')); + + + // Crea un objeto de preferencia + $preference = new MercadoPago\Preference(); + + //$payment_methods = MercadoPago::get("/v1/payment_methods"); + // Crea un ítem en la preferencia + $item = new MercadoPago\Item(); + $item->id = $historial_id; + $item->title = 'Compra SrPremium'; + $item->quantity = 1; + $item->unit_price = $monto; + $preference->back_urls = array( + + "success" => url('/compras/'), + "failure" => url('/compras/error'), + "pending" => url('/compras/pendiente') + ); + $preference->auto_return = "approved"; + $preference->items = array($item); + $preference->save(); + + + @endphp + +
    +
    +
    + Recargar saldo +
    + +
    + Monto a recargar +

    + ${{number_format($monto)}} +

    +
    + + + + +
    +
    + + + + + +
    + +
    + + + + + +
    + +
    diff --git a/resources/views/menu/admin.blade.php b/resources/views/menu/admin.blade.php new file mode 100644 index 0000000..bef004e --- /dev/null +++ b/resources/views/menu/admin.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/categoria.blade.php b/resources/views/menu/categoria.blade.php new file mode 100644 index 0000000..811071d --- /dev/null +++ b/resources/views/menu/categoria.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/clientes.blade.php b/resources/views/menu/clientes.blade.php new file mode 100644 index 0000000..bd10670 --- /dev/null +++ b/resources/views/menu/clientes.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/comprar.blade.php b/resources/views/menu/comprar.blade.php new file mode 100644 index 0000000..4acd090 --- /dev/null +++ b/resources/views/menu/comprar.blade.php @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/resources/views/menu/configuracion.blade.php b/resources/views/menu/configuracion.blade.php new file mode 100644 index 0000000..793b56b --- /dev/null +++ b/resources/views/menu/configuracion.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/credenciales.blade.php b/resources/views/menu/credenciales.blade.php new file mode 100644 index 0000000..0b9fe71 --- /dev/null +++ b/resources/views/menu/credenciales.blade.php @@ -0,0 +1,115 @@ + +
    +
    +
    +
    +
    + + + +
    +
    +

    + Información credenciales de acceso +

    +
    + +
    + + + + + + + + + + + + + @foreach ($consulta->cuentas->unique() as $item) + + + + + + + @endforeach + +
    Email:Contraseña:Servicio:Perfil:
    {{ $item->correo ?? ''}}{{ $item->password ?? ''}}{{ $item->servicio->nombre ?? ''}} + @if($item->estado == 'activo') + @foreach ($item->perfil as $perfil) + @if ($consulta->id == $perfil->historial_id) + {{ $perfil->perfil ?? '' }} + + @if ($item->servicio->perfiles) + @switch( $perfil->perfil) + @case(1) + : {{ $msj->clave_1 ?? ''}}
    + @break + @case(2) + : {{ $msj->clave_2 ?? ''}}
    + @break + @case(3) + : {{ $msj->clave_3 ?? ''}}
    + @break + @case(4) + : {{ $msj->clave_4 ?? ''}}
    + @break + @case(5) + : {{ $msj->clave_5 ?? ''}}
    + @break + @case(6) + : {{ $msj->clave_6 ?? '' }}
    + @break + @default + @endswitch + @endif + @endif + @endforeach + @endif
    + @if(!empty($consulta->tarifa->servicio->nombre)) + @if ($consulta->tarifa->servicio->url ) + - URL: {{ $msj->iptv }} + @endif + @endif +
    + +

    + Fecha de vencimiento: +

    {{ \Carbon\Carbon::parse($consulta->fecha_final)->format('d/m/Y h:i A') }} +

    +

    + +

    + Estado:

    {{ $consulta->estado }}

    +

    + + @if (!empty($consulta->tarifa->pantallas) && !empty($consulta->tarifa->servicio->nombre ) ) +

    + Cantidad : +

    + @if ($consulta->tarifa->servicio->por_tiempo) + {{ $consulta->cantidad }} {{ Str::plural('plan', $consulta->cantidad, 'planes') }} de {{ $consulta->tarifa->servicio->nombre }} - {{ $consulta->tarifa->dias }} {{ Str::plural('día', $consulta->tarifa->dias, 'días') }} + @else + {{ $consulta->cantidad }} {{ __($consulta->cantidad == 1 ? 'plan' : 'planes') }} de {{ $consulta->tarifa->pantallas }} {{ __($consulta->tarifa->pantallas == 1 ? 'pantalla' : 'pantallas') }} - {{ $consulta->tarifa->servicio->nombre }} - {{ $consulta->tarifa->dias }} {{ __($consulta->tarifa->dias == 1 ? 'día' : 'días') }} + @endif +

    +

    + @else +

    + Cantidad: +

    {{ $consulta->cantidad }} {{ __($consulta->cantidad == 1 ? 'promo' : 'promos') }}: {{ $consulta->promocion->nombre }} +

    +

    + @endif +
    +
    + +
    + +
    + + +
    diff --git a/resources/views/menu/importar.blade.php b/resources/views/menu/importar.blade.php new file mode 100644 index 0000000..fc98fab --- /dev/null +++ b/resources/views/menu/importar.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/logs.blade.php b/resources/views/menu/logs.blade.php new file mode 100644 index 0000000..77dd3a2 --- /dev/null +++ b/resources/views/menu/logs.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/logs_recargas.blade.php b/resources/views/menu/logs_recargas.blade.php new file mode 100644 index 0000000..0ff7e84 --- /dev/null +++ b/resources/views/menu/logs_recargas.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/order.blade.php b/resources/views/menu/order.blade.php new file mode 100644 index 0000000..092be62 --- /dev/null +++ b/resources/views/menu/order.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/perfil.blade.php b/resources/views/menu/perfil.blade.php new file mode 100644 index 0000000..3bcb864 --- /dev/null +++ b/resources/views/menu/perfil.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/planes.blade.php b/resources/views/menu/planes.blade.php new file mode 100644 index 0000000..3220688 --- /dev/null +++ b/resources/views/menu/planes.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/promo.blade.php b/resources/views/menu/promo.blade.php new file mode 100644 index 0000000..2d36a05 --- /dev/null +++ b/resources/views/menu/promo.blade.php @@ -0,0 +1,4 @@ + + @include('layouts.nav') + + \ No newline at end of file diff --git a/resources/views/menu/promociones.blade.php b/resources/views/menu/promociones.blade.php new file mode 100644 index 0000000..87f80cf --- /dev/null +++ b/resources/views/menu/promociones.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/recarga.blade.php b/resources/views/menu/recarga.blade.php new file mode 100644 index 0000000..f2a5d14 --- /dev/null +++ b/resources/views/menu/recarga.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/recargas.blade.php b/resources/views/menu/recargas.blade.php new file mode 100644 index 0000000..fee1859 --- /dev/null +++ b/resources/views/menu/recargas.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/reportes.blade.php b/resources/views/menu/reportes.blade.php new file mode 100644 index 0000000..df5c88d --- /dev/null +++ b/resources/views/menu/reportes.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/roles.blade.php b/resources/views/menu/roles.blade.php new file mode 100644 index 0000000..5d3fcbf --- /dev/null +++ b/resources/views/menu/roles.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/servicio.blade.php b/resources/views/menu/servicio.blade.php new file mode 100644 index 0000000..14789fa --- /dev/null +++ b/resources/views/menu/servicio.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/servicios.blade.php b/resources/views/menu/servicios.blade.php new file mode 100644 index 0000000..9fb6c6f --- /dev/null +++ b/resources/views/menu/servicios.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/single.blade.php b/resources/views/menu/single.blade.php new file mode 100644 index 0000000..21cdc05 --- /dev/null +++ b/resources/views/menu/single.blade.php @@ -0,0 +1,4 @@ + + @include('layouts.nav') + + \ No newline at end of file diff --git a/resources/views/menu/top.blade.php b/resources/views/menu/top.blade.php new file mode 100644 index 0000000..8dc2ac5 --- /dev/null +++ b/resources/views/menu/top.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/usuarios.blade.php b/resources/views/menu/usuarios.blade.php new file mode 100644 index 0000000..036c37d --- /dev/null +++ b/resources/views/menu/usuarios.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/utilidades.blade.php b/resources/views/menu/utilidades.blade.php new file mode 100644 index 0000000..a421c50 --- /dev/null +++ b/resources/views/menu/utilidades.blade.php @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/resources/views/menu/ver.blade.php b/resources/views/menu/ver.blade.php new file mode 100644 index 0000000..e8e6aeb --- /dev/null +++ b/resources/views/menu/ver.blade.php @@ -0,0 +1,4 @@ + + @include('layouts.nav') + + \ No newline at end of file diff --git a/resources/views/menu/wompi.blade.php b/resources/views/menu/wompi.blade.php new file mode 100644 index 0000000..10d661d --- /dev/null +++ b/resources/views/menu/wompi.blade.php @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/views/portadaservicio.blade.php b/resources/views/portadaservicio.blade.php new file mode 100644 index 0000000..7063c21 --- /dev/null +++ b/resources/views/portadaservicio.blade.php @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php new file mode 100644 index 0000000..63c6f56 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-4.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/bootstrap-5.blade.php b/resources/views/vendor/pagination/bootstrap-5.blade.php new file mode 100644 index 0000000..a1795a4 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-5.blade.php @@ -0,0 +1,88 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 0000000..0db70b5 --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/semantic-ui.blade.php b/resources/views/vendor/pagination/semantic-ui.blade.php new file mode 100644 index 0000000..ef0dbb1 --- /dev/null +++ b/resources/views/vendor/pagination/semantic-ui.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php new file mode 100644 index 0000000..4bb4917 --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php @@ -0,0 +1,27 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-5.blade.php b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php new file mode 100644 index 0000000..a89005e --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php @@ -0,0 +1,29 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php new file mode 100644 index 0000000..36bdbc1 --- /dev/null +++ b/resources/views/vendor/pagination/simple-default.blade.php @@ -0,0 +1,19 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-tailwind.blade.php b/resources/views/vendor/pagination/simple-tailwind.blade.php new file mode 100644 index 0000000..6872cca --- /dev/null +++ b/resources/views/vendor/pagination/simple-tailwind.blade.php @@ -0,0 +1,25 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/tailwind.blade.php b/resources/views/vendor/pagination/tailwind.blade.php new file mode 100644 index 0000000..3c92d5c --- /dev/null +++ b/resources/views/vendor/pagination/tailwind.blade.php @@ -0,0 +1,106 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100644 index 0000000..74c289e --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,6 @@ + + @include('layouts.nav') + + + + \ No newline at end of file diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..eb6fa48 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,19 @@ +get('/user', function (Request $request) { + return $request->user(); +}); diff --git a/routes/auth.php b/routes/auth.php new file mode 100644 index 0000000..54c9ae1 --- /dev/null +++ b/routes/auth.php @@ -0,0 +1,56 @@ +group(function () { + Route::get('register', [RegisteredUserController::class, 'create']) + ->name('register'); + + Route::post('register', [RegisteredUserController::class, 'store']); + + Route::get('login', [AuthenticatedSessionController::class, 'create']) + ->name('login'); + + Route::post('login', [AuthenticatedSessionController::class, 'store']); + + Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) + ->name('password.request'); + + Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) + ->name('password.email'); + + Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) + ->name('password.reset'); + + Route::post('reset-password', [NewPasswordController::class, 'store']) + ->name('password.update'); +}); + +Route::middleware('auth')->group(function () { + Route::get('verify-email', [EmailVerificationPromptController::class, '__invoke']) + ->name('verification.notice'); + + Route::get('verify-email/{id}/{hash}', [VerifyEmailController::class, '__invoke']) + ->middleware(['signed', 'throttle:6,1']) + ->name('verification.verify'); + + Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store']) + ->middleware('throttle:6,1') + ->name('verification.send'); + + Route::get('confirm-password', [ConfirmablePasswordController::class, 'show']) + ->name('password.confirm'); + + Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); + + Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) + ->name('logout'); +}); diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 0000000..5d451e1 --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..e05f4c9 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..be89a78 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,81 @@ +get(); +// //dd($consulta_promociones); +// return view('welcome',['promociones' => $consulta_promociones]); +//}); +Route::get('/',[MenuController::class,'showwelcome' ]); + +Route::any('/dashboard', function () { + + return view('dashboard'); +})->middleware(['auth', 'verified'])->name('dashboard'); + + +Route::get('/comprar',[MenuController::class,'showcomprar' ])->name('comprar'); + + +Route::get('/orders',[MenuController::class,'order' ])->name('orders'); +Route::get('/wompi_pagos',[MenuController::class,'wompi_pagos' ])->name('wompi_pagos'); +Route::any('/wompi_hook',[MenuController::class,'wompi_hook' ])->name('wompi_hook'); +Route::get('/compras',[MenuController::class,'compras' ])->name('compras'); +Route::get('/pay/{estado}',[MenuController::class,'pay' ])->name('pay'); +Route::post('/webhooks',[MenuController::class,'showwebhooks' ]); +Route::get('/credenciales',[MenuController::class,'showcredenciales' ])->name('credenciales'); +Route::get('/oferta',[MenuController::class,'showoferta' ])->name('oferta'); +Route::get('/single',[MenuController::class,'showsingle' ])->name('single'); +Route::get('/promo',[MenuController::class,'showpromo' ])->name('promo'); +Route::get('/categorias',[MenuController::class,'showcategorias' ])->name('categorias'); +Route::get('/nequi',[MenuController::class,'nequi' ])->name('nequi'); +Route::get('sendSMS', [App\Http\Controllers\TwilioSMSController::class, 'index']); +Route::any('/mp',[MenuController::class,'showmp' ])->name('mp'); +Route::any('/pruebas',[MenuController::class,'pruebas' ])->name('pruebas'); + + +//Logueados +Route::middleware(["auth"])->group(function () { + Route::any('/clientes',[MenuController::class,'showclientes' ])->name('clientes'); + Route::get('/servicios',[MenuController::class,'showservicios' ])->name('servicios'); + Route::get('/top',[MenuController::class,'showtop' ])->name('top'); + Route::any('/reportes',[MenuController::class,'showreportes' ])->name('reportes'); + Route::get('/perfil',[MenuController::class,'showperfil' ])->name('perfil'); + Route::get('/recarga',[MenuController::class,'showrecarga' ])->name('recarga'); + Route::post('/recargas',[MenuController::class,'recargas' ])->name('recargas'); + Route::get('/promociones',[MenuController::class,'showpromociones' ])->name('promociones'); + Route::get('/wompi/{monto}',[MenuController::class,'showwompi' ])->name('wompi'); +}); + + +//Administradores +Route::middleware(["auth", "solo_usuario_administrador"])->group(function () { + Route::get('/admin',[MenuController::class,'showadmin' ])->middleware(['auth'])->name('admin'); + Route::any('/usuarios',[MenuController::class,'showusuarios' ])->name('usuarios'); + Route::any('/planes',[MenuController::class,'showplanes' ])->name('planes'); + Route::get('/servicio',[MenuController::class,'showservicio' ])->name('servicio'); + Route::get('/configuracion',[MenuController::class,'showconfiguracion' ])->name('configuracion'); + Route::get('/categoria',[MenuController::class,'showcategoria' ])->name('categoria'); + Route::any('/logs',[MenuController::class,'showlogs' ])->name('logs'); + Route::get('/import',[MenuController::class,'showimport' ])->name('import'); + Route::any('/logs-recargas',[MenuController::class,'showLogRecargas' ])->name('logsRecargas'); + Route::any('/roles',[MenuController::class,'showroles' ])->name('roles'); + Route::get('/utilidades',[MenuController::class,'showutilidad' ])->name('utilidades'); +}); + + +require __DIR__.'/auth.php'; diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..df5e7ec --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,3 @@ +#* +#!public/ +#!.gitignore diff --git a/storage/app/livewire-tmp/D56GDnMlUkOhR0jC0cqVcem5NLoVI9-metaQ1VFTlRBUy54bHN4-.xlsx b/storage/app/livewire-tmp/D56GDnMlUkOhR0jC0cqVcem5NLoVI9-metaQ1VFTlRBUy54bHN4-.xlsx new file mode 100644 index 0000000..9186513 Binary files /dev/null and b/storage/app/livewire-tmp/D56GDnMlUkOhR0jC0cqVcem5NLoVI9-metaQ1VFTlRBUy54bHN4-.xlsx differ diff --git a/storage/app/livewire-tmp/Ry9Rmb4VmjGuvsT2FnGcQHVbsqyaLS-metaQ1VFTlRBUy54bHN4-.xlsx b/storage/app/livewire-tmp/Ry9Rmb4VmjGuvsT2FnGcQHVbsqyaLS-metaQ1VFTlRBUy54bHN4-.xlsx new file mode 100644 index 0000000..9186513 Binary files /dev/null and b/storage/app/livewire-tmp/Ry9Rmb4VmjGuvsT2FnGcQHVbsqyaLS-metaQ1VFTlRBUy54bHN4-.xlsx differ diff --git a/storage/app/photos/01rYLP8qNfcplUvK9PY7RgvSRLL0TmgLfY72ESF0.png b/storage/app/photos/01rYLP8qNfcplUvK9PY7RgvSRLL0TmgLfY72ESF0.png new file mode 100644 index 0000000..951ce9a Binary files /dev/null and b/storage/app/photos/01rYLP8qNfcplUvK9PY7RgvSRLL0TmgLfY72ESF0.png differ diff --git a/storage/app/photos/04jitB7jKr.webp b/storage/app/photos/04jitB7jKr.webp new file mode 100644 index 0000000..22bff1a Binary files /dev/null and b/storage/app/photos/04jitB7jKr.webp differ diff --git a/storage/app/photos/06F75q9blZspzQTLEG2FZo5KfPNFzebpBDx3AQU8.png b/storage/app/photos/06F75q9blZspzQTLEG2FZo5KfPNFzebpBDx3AQU8.png new file mode 100644 index 0000000..9098689 Binary files /dev/null and b/storage/app/photos/06F75q9blZspzQTLEG2FZo5KfPNFzebpBDx3AQU8.png differ diff --git a/storage/app/photos/0Yb0Qm0Q4M.webp b/storage/app/photos/0Yb0Qm0Q4M.webp new file mode 100644 index 0000000..dfd8dd4 Binary files /dev/null and b/storage/app/photos/0Yb0Qm0Q4M.webp differ diff --git a/storage/app/photos/0cEUMbzThf.webp b/storage/app/photos/0cEUMbzThf.webp new file mode 100644 index 0000000..fe834ba Binary files /dev/null and b/storage/app/photos/0cEUMbzThf.webp differ diff --git a/storage/app/photos/0nvvBVF2mzajN69HdcTfuWV8RwXgPEpDl1MvJKQV.png b/storage/app/photos/0nvvBVF2mzajN69HdcTfuWV8RwXgPEpDl1MvJKQV.png new file mode 100644 index 0000000..fdd17cf Binary files /dev/null and b/storage/app/photos/0nvvBVF2mzajN69HdcTfuWV8RwXgPEpDl1MvJKQV.png differ diff --git a/storage/app/photos/1WA5f8Vmj2.webp b/storage/app/photos/1WA5f8Vmj2.webp new file mode 100644 index 0000000..845ecd6 Binary files /dev/null and b/storage/app/photos/1WA5f8Vmj2.webp differ diff --git a/storage/app/photos/1cP1uOglIOohIZZyZMrQ4VHog9kCGvlrfpBQ8AFo.png b/storage/app/photos/1cP1uOglIOohIZZyZMrQ4VHog9kCGvlrfpBQ8AFo.png new file mode 100644 index 0000000..1591173 Binary files /dev/null and b/storage/app/photos/1cP1uOglIOohIZZyZMrQ4VHog9kCGvlrfpBQ8AFo.png differ diff --git a/storage/app/photos/1fMUNWUovfGm99dcbBNjLLam1Do4XuT92JMQzjuk.png b/storage/app/photos/1fMUNWUovfGm99dcbBNjLLam1Do4XuT92JMQzjuk.png new file mode 100644 index 0000000..d015a1d Binary files /dev/null and b/storage/app/photos/1fMUNWUovfGm99dcbBNjLLam1Do4XuT92JMQzjuk.png differ diff --git a/storage/app/photos/1u83WpvjGu.webp b/storage/app/photos/1u83WpvjGu.webp new file mode 100644 index 0000000..ff267f7 Binary files /dev/null and b/storage/app/photos/1u83WpvjGu.webp differ diff --git a/storage/app/photos/275ETea7ENqtW8ddkRq4P5y40V6YidSPQzy29Drk.png b/storage/app/photos/275ETea7ENqtW8ddkRq4P5y40V6YidSPQzy29Drk.png new file mode 100644 index 0000000..951ce9a Binary files /dev/null and b/storage/app/photos/275ETea7ENqtW8ddkRq4P5y40V6YidSPQzy29Drk.png differ diff --git a/storage/app/photos/2FFpKEOTojR68mHTaGWJQUZYpoL8CCJD7K6KtS9U.png b/storage/app/photos/2FFpKEOTojR68mHTaGWJQUZYpoL8CCJD7K6KtS9U.png new file mode 100644 index 0000000..aa7af3d Binary files /dev/null and b/storage/app/photos/2FFpKEOTojR68mHTaGWJQUZYpoL8CCJD7K6KtS9U.png differ diff --git a/storage/app/photos/2POG4XYado.webp b/storage/app/photos/2POG4XYado.webp new file mode 100644 index 0000000..9dccc80 Binary files /dev/null and b/storage/app/photos/2POG4XYado.webp differ diff --git a/storage/app/photos/2XBfmyMjJnquvHZSK2bCbRtt3gf22Lmop0pWEHan.png b/storage/app/photos/2XBfmyMjJnquvHZSK2bCbRtt3gf22Lmop0pWEHan.png new file mode 100644 index 0000000..76a1f15 Binary files /dev/null and b/storage/app/photos/2XBfmyMjJnquvHZSK2bCbRtt3gf22Lmop0pWEHan.png differ diff --git a/storage/app/photos/2kzXfCoULDMGhX0rgIZsQYGKKzQLfl2LPgTlk4hk.png b/storage/app/photos/2kzXfCoULDMGhX0rgIZsQYGKKzQLfl2LPgTlk4hk.png new file mode 100644 index 0000000..5b3304c Binary files /dev/null and b/storage/app/photos/2kzXfCoULDMGhX0rgIZsQYGKKzQLfl2LPgTlk4hk.png differ diff --git a/storage/app/photos/2q9pvuIveb.webp b/storage/app/photos/2q9pvuIveb.webp new file mode 100644 index 0000000..46e709a Binary files /dev/null and b/storage/app/photos/2q9pvuIveb.webp differ diff --git a/storage/app/photos/2xi0VbTcoS.webp b/storage/app/photos/2xi0VbTcoS.webp new file mode 100644 index 0000000..19ab3ac Binary files /dev/null and b/storage/app/photos/2xi0VbTcoS.webp differ diff --git a/storage/app/photos/309XVmhMKr7EGumlPJQC2Qdh0pcez8f3asNHfESh.png b/storage/app/photos/309XVmhMKr7EGumlPJQC2Qdh0pcez8f3asNHfESh.png new file mode 100644 index 0000000..9efee34 Binary files /dev/null and b/storage/app/photos/309XVmhMKr7EGumlPJQC2Qdh0pcez8f3asNHfESh.png differ diff --git a/storage/app/photos/397iMqEFEJPYUrSw96bxy5dntZM4voED4qoueOnQ.jpg b/storage/app/photos/397iMqEFEJPYUrSw96bxy5dntZM4voED4qoueOnQ.jpg new file mode 100644 index 0000000..ff5a480 Binary files /dev/null and b/storage/app/photos/397iMqEFEJPYUrSw96bxy5dntZM4voED4qoueOnQ.jpg differ diff --git a/storage/app/photos/3CbHF3Hj9FJscFfr7LJ4eYlV6xgBohNyi5BwdUYn.png b/storage/app/photos/3CbHF3Hj9FJscFfr7LJ4eYlV6xgBohNyi5BwdUYn.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/3CbHF3Hj9FJscFfr7LJ4eYlV6xgBohNyi5BwdUYn.png differ diff --git a/storage/app/photos/3XCRodct9x.webp b/storage/app/photos/3XCRodct9x.webp new file mode 100644 index 0000000..95dbbfd Binary files /dev/null and b/storage/app/photos/3XCRodct9x.webp differ diff --git a/storage/app/photos/3ZzBAqRLsDS5Z0dtAXxGHMmbsOyyvgndHLSfny9v.png b/storage/app/photos/3ZzBAqRLsDS5Z0dtAXxGHMmbsOyyvgndHLSfny9v.png new file mode 100644 index 0000000..75cdba2 Binary files /dev/null and b/storage/app/photos/3ZzBAqRLsDS5Z0dtAXxGHMmbsOyyvgndHLSfny9v.png differ diff --git a/storage/app/photos/3joOCEIy0QUiz6P1HQT4h3ACzWHJJUnGV66Sudl7.jpg b/storage/app/photos/3joOCEIy0QUiz6P1HQT4h3ACzWHJJUnGV66Sudl7.jpg new file mode 100644 index 0000000..c0fece4 Binary files /dev/null and b/storage/app/photos/3joOCEIy0QUiz6P1HQT4h3ACzWHJJUnGV66Sudl7.jpg differ diff --git a/storage/app/photos/3kHI79IlK51Pox1hx712i8xbIGxunjAJ1vU6yoDq.png b/storage/app/photos/3kHI79IlK51Pox1hx712i8xbIGxunjAJ1vU6yoDq.png new file mode 100644 index 0000000..68b88b8 Binary files /dev/null and b/storage/app/photos/3kHI79IlK51Pox1hx712i8xbIGxunjAJ1vU6yoDq.png differ diff --git a/storage/app/photos/40qxkTqlFUk7TX4pXmjp91Np8OdmCPzBXTlvMe5l.png b/storage/app/photos/40qxkTqlFUk7TX4pXmjp91Np8OdmCPzBXTlvMe5l.png new file mode 100644 index 0000000..3eabc48 Binary files /dev/null and b/storage/app/photos/40qxkTqlFUk7TX4pXmjp91Np8OdmCPzBXTlvMe5l.png differ diff --git a/storage/app/photos/4MPt0ipvDT2bHbYCPUKxsz1mF0WYw4rGBBLKBaO5.png b/storage/app/photos/4MPt0ipvDT2bHbYCPUKxsz1mF0WYw4rGBBLKBaO5.png new file mode 100644 index 0000000..7153294 Binary files /dev/null and b/storage/app/photos/4MPt0ipvDT2bHbYCPUKxsz1mF0WYw4rGBBLKBaO5.png differ diff --git a/storage/app/photos/4epajGoRP8LgcsVEDg21wFeINuL9zh3eZFm43KrX.png b/storage/app/photos/4epajGoRP8LgcsVEDg21wFeINuL9zh3eZFm43KrX.png new file mode 100644 index 0000000..7788e46 Binary files /dev/null and b/storage/app/photos/4epajGoRP8LgcsVEDg21wFeINuL9zh3eZFm43KrX.png differ diff --git a/storage/app/photos/4zQCheUHtbn8IqWZje66EF73UG343yj9XMhnQJIy.png b/storage/app/photos/4zQCheUHtbn8IqWZje66EF73UG343yj9XMhnQJIy.png new file mode 100644 index 0000000..7656b52 Binary files /dev/null and b/storage/app/photos/4zQCheUHtbn8IqWZje66EF73UG343yj9XMhnQJIy.png differ diff --git a/storage/app/photos/5CqwK0yEpD6TXbR8ntv7x7BMXPGgLK8GC5jdeDuB.jpg b/storage/app/photos/5CqwK0yEpD6TXbR8ntv7x7BMXPGgLK8GC5jdeDuB.jpg new file mode 100644 index 0000000..73166fb Binary files /dev/null and b/storage/app/photos/5CqwK0yEpD6TXbR8ntv7x7BMXPGgLK8GC5jdeDuB.jpg differ diff --git a/storage/app/photos/5UVnTIWGTgC1CphvYJU1pPWdYxv9rH7xnmNIj92P.jpg b/storage/app/photos/5UVnTIWGTgC1CphvYJU1pPWdYxv9rH7xnmNIj92P.jpg new file mode 100644 index 0000000..21e2a9c Binary files /dev/null and b/storage/app/photos/5UVnTIWGTgC1CphvYJU1pPWdYxv9rH7xnmNIj92P.jpg differ diff --git a/storage/app/photos/5iSJtxOwgajQOHRRRkymYB3chWOtPwSJ6WBX7c5Z.png b/storage/app/photos/5iSJtxOwgajQOHRRRkymYB3chWOtPwSJ6WBX7c5Z.png new file mode 100644 index 0000000..0a7952e Binary files /dev/null and b/storage/app/photos/5iSJtxOwgajQOHRRRkymYB3chWOtPwSJ6WBX7c5Z.png differ diff --git a/storage/app/photos/5m3ubHKGOs.webp b/storage/app/photos/5m3ubHKGOs.webp new file mode 100644 index 0000000..7026e78 Binary files /dev/null and b/storage/app/photos/5m3ubHKGOs.webp differ diff --git a/storage/app/photos/5oi4rCTnSAzc1F8rRhDFbMgT9ADGA1riz61atWdO.png b/storage/app/photos/5oi4rCTnSAzc1F8rRhDFbMgT9ADGA1riz61atWdO.png new file mode 100644 index 0000000..6f7b437 Binary files /dev/null and b/storage/app/photos/5oi4rCTnSAzc1F8rRhDFbMgT9ADGA1riz61atWdO.png differ diff --git a/storage/app/photos/65hjmxKDO9.webp b/storage/app/photos/65hjmxKDO9.webp new file mode 100644 index 0000000..13dc189 Binary files /dev/null and b/storage/app/photos/65hjmxKDO9.webp differ diff --git a/storage/app/photos/6MAsUmCmwi.webp b/storage/app/photos/6MAsUmCmwi.webp new file mode 100644 index 0000000..e60b3de Binary files /dev/null and b/storage/app/photos/6MAsUmCmwi.webp differ diff --git a/storage/app/photos/6WNbJJ5hg20U.webp b/storage/app/photos/6WNbJJ5hg20U.webp new file mode 100644 index 0000000..22d76ea Binary files /dev/null and b/storage/app/photos/6WNbJJ5hg20U.webp differ diff --git a/storage/app/photos/6ih7ZJ0ws49FnYEGzf56uuHMfn6TimzTBYHcCJmP.png b/storage/app/photos/6ih7ZJ0ws49FnYEGzf56uuHMfn6TimzTBYHcCJmP.png new file mode 100644 index 0000000..4ea6aa7 Binary files /dev/null and b/storage/app/photos/6ih7ZJ0ws49FnYEGzf56uuHMfn6TimzTBYHcCJmP.png differ diff --git a/storage/app/photos/6sruviyWsS.webp b/storage/app/photos/6sruviyWsS.webp new file mode 100644 index 0000000..653af1b Binary files /dev/null and b/storage/app/photos/6sruviyWsS.webp differ diff --git a/storage/app/photos/74LXtsyar7arJtfSFmoK5oBxxeLxLGxxDEUr9yqI.jpg b/storage/app/photos/74LXtsyar7arJtfSFmoK5oBxxeLxLGxxDEUr9yqI.jpg new file mode 100644 index 0000000..931b95d Binary files /dev/null and b/storage/app/photos/74LXtsyar7arJtfSFmoK5oBxxeLxLGxxDEUr9yqI.jpg differ diff --git a/storage/app/photos/782slpaI3h3YvkT3LgDc9xU1LrCfXgXBhnFTzjcQ.png b/storage/app/photos/782slpaI3h3YvkT3LgDc9xU1LrCfXgXBhnFTzjcQ.png new file mode 100644 index 0000000..9a0f53a Binary files /dev/null and b/storage/app/photos/782slpaI3h3YvkT3LgDc9xU1LrCfXgXBhnFTzjcQ.png differ diff --git a/storage/app/photos/7Adcpfi9FNhV8D1y2NnlvtluQLFY0LyYCVrcQcZK.png b/storage/app/photos/7Adcpfi9FNhV8D1y2NnlvtluQLFY0LyYCVrcQcZK.png new file mode 100644 index 0000000..64de5b5 Binary files /dev/null and b/storage/app/photos/7Adcpfi9FNhV8D1y2NnlvtluQLFY0LyYCVrcQcZK.png differ diff --git a/storage/app/photos/7GH08Z1o2CgceAn6AJFsRf8IlhZDpOpxO31qw1Tq.png b/storage/app/photos/7GH08Z1o2CgceAn6AJFsRf8IlhZDpOpxO31qw1Tq.png new file mode 100644 index 0000000..80f78a8 Binary files /dev/null and b/storage/app/photos/7GH08Z1o2CgceAn6AJFsRf8IlhZDpOpxO31qw1Tq.png differ diff --git a/storage/app/photos/7HEZoG3vaC.webp b/storage/app/photos/7HEZoG3vaC.webp new file mode 100644 index 0000000..70dba82 Binary files /dev/null and b/storage/app/photos/7HEZoG3vaC.webp differ diff --git a/storage/app/photos/7R0mNiAzPZK8C1p09QrQZVezR2sGcBQSZQWYzGRc.png b/storage/app/photos/7R0mNiAzPZK8C1p09QrQZVezR2sGcBQSZQWYzGRc.png new file mode 100644 index 0000000..36c1b9a Binary files /dev/null and b/storage/app/photos/7R0mNiAzPZK8C1p09QrQZVezR2sGcBQSZQWYzGRc.png differ diff --git a/storage/app/photos/7h1DcVebJ8.webp b/storage/app/photos/7h1DcVebJ8.webp new file mode 100644 index 0000000..62dab05 Binary files /dev/null and b/storage/app/photos/7h1DcVebJ8.webp differ diff --git a/storage/app/photos/7rj1dJnRG8.webp b/storage/app/photos/7rj1dJnRG8.webp new file mode 100644 index 0000000..f191e02 Binary files /dev/null and b/storage/app/photos/7rj1dJnRG8.webp differ diff --git a/storage/app/photos/8FNieOYTzq.webp b/storage/app/photos/8FNieOYTzq.webp new file mode 100644 index 0000000..b83c558 Binary files /dev/null and b/storage/app/photos/8FNieOYTzq.webp differ diff --git a/storage/app/photos/8WnaVExsCw.webp b/storage/app/photos/8WnaVExsCw.webp new file mode 100644 index 0000000..10dfe2d Binary files /dev/null and b/storage/app/photos/8WnaVExsCw.webp differ diff --git a/storage/app/photos/8bFOKesVpIk0uI9K1yH9Sa7O1Pt1YqkGIZp19ehc.png b/storage/app/photos/8bFOKesVpIk0uI9K1yH9Sa7O1Pt1YqkGIZp19ehc.png new file mode 100644 index 0000000..1a29a83 Binary files /dev/null and b/storage/app/photos/8bFOKesVpIk0uI9K1yH9Sa7O1Pt1YqkGIZp19ehc.png differ diff --git a/storage/app/photos/8gsV4iNNCP.webp b/storage/app/photos/8gsV4iNNCP.webp new file mode 100644 index 0000000..223cf65 Binary files /dev/null and b/storage/app/photos/8gsV4iNNCP.webp differ diff --git a/storage/app/photos/8mm5zBDH4ahqHYleoxVQiOYiIvV13Pmi56plsRTZ.png b/storage/app/photos/8mm5zBDH4ahqHYleoxVQiOYiIvV13Pmi56plsRTZ.png new file mode 100644 index 0000000..e29d840 Binary files /dev/null and b/storage/app/photos/8mm5zBDH4ahqHYleoxVQiOYiIvV13Pmi56plsRTZ.png differ diff --git a/storage/app/photos/9FJY4EfJbB2HVbtBdnNHkOTiK8EDJxI9eiUScu4z.png b/storage/app/photos/9FJY4EfJbB2HVbtBdnNHkOTiK8EDJxI9eiUScu4z.png new file mode 100644 index 0000000..eaf4462 Binary files /dev/null and b/storage/app/photos/9FJY4EfJbB2HVbtBdnNHkOTiK8EDJxI9eiUScu4z.png differ diff --git a/storage/app/photos/9MrazeFmJDkr6T6ptfNWBBx4Uzenx0TjgOyREGcL.png b/storage/app/photos/9MrazeFmJDkr6T6ptfNWBBx4Uzenx0TjgOyREGcL.png new file mode 100644 index 0000000..7a25044 Binary files /dev/null and b/storage/app/photos/9MrazeFmJDkr6T6ptfNWBBx4Uzenx0TjgOyREGcL.png differ diff --git a/storage/app/photos/9TEsI2xhYclysz259VsyrUDej5KCvthKujHrH5IR.png b/storage/app/photos/9TEsI2xhYclysz259VsyrUDej5KCvthKujHrH5IR.png new file mode 100644 index 0000000..425d7ac Binary files /dev/null and b/storage/app/photos/9TEsI2xhYclysz259VsyrUDej5KCvthKujHrH5IR.png differ diff --git a/storage/app/photos/A667UdBq1p.webp b/storage/app/photos/A667UdBq1p.webp new file mode 100644 index 0000000..0c96644 Binary files /dev/null and b/storage/app/photos/A667UdBq1p.webp differ diff --git a/storage/app/photos/A6ymWBWRTS.webp b/storage/app/photos/A6ymWBWRTS.webp new file mode 100644 index 0000000..bc4c9a7 Binary files /dev/null and b/storage/app/photos/A6ymWBWRTS.webp differ diff --git a/storage/app/photos/A7ydAxsRSuWNyifslO5Rb0oaLjfcNpi27Z8O5YfO.jpg b/storage/app/photos/A7ydAxsRSuWNyifslO5Rb0oaLjfcNpi27Z8O5YfO.jpg new file mode 100644 index 0000000..214e4a4 Binary files /dev/null and b/storage/app/photos/A7ydAxsRSuWNyifslO5Rb0oaLjfcNpi27Z8O5YfO.jpg differ diff --git a/storage/app/photos/AMMDIxBDJv7Hu78j0GETBlck9ebKrxahb8EjE3zg.png b/storage/app/photos/AMMDIxBDJv7Hu78j0GETBlck9ebKrxahb8EjE3zg.png new file mode 100644 index 0000000..f2870c0 Binary files /dev/null and b/storage/app/photos/AMMDIxBDJv7Hu78j0GETBlck9ebKrxahb8EjE3zg.png differ diff --git a/storage/app/photos/AYUrkVTWt9f9osHypjUX7ROWcmj2wsJleYFoFTXu.png b/storage/app/photos/AYUrkVTWt9f9osHypjUX7ROWcmj2wsJleYFoFTXu.png new file mode 100644 index 0000000..7be32d3 Binary files /dev/null and b/storage/app/photos/AYUrkVTWt9f9osHypjUX7ROWcmj2wsJleYFoFTXu.png differ diff --git a/storage/app/photos/Ar3Gf1dRRMPO2Rrs6ny1a6OEhpjKi3JjuVJFkJ52.png b/storage/app/photos/Ar3Gf1dRRMPO2Rrs6ny1a6OEhpjKi3JjuVJFkJ52.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/Ar3Gf1dRRMPO2Rrs6ny1a6OEhpjKi3JjuVJFkJ52.png differ diff --git a/storage/app/photos/Au6vNLE70N.webp b/storage/app/photos/Au6vNLE70N.webp new file mode 100644 index 0000000..274276c Binary files /dev/null and b/storage/app/photos/Au6vNLE70N.webp differ diff --git a/storage/app/photos/B3QDhlBcMZvg9qfsort2dmFWPwJpXVenFA7IE1fh.png b/storage/app/photos/B3QDhlBcMZvg9qfsort2dmFWPwJpXVenFA7IE1fh.png new file mode 100644 index 0000000..a26ec4c Binary files /dev/null and b/storage/app/photos/B3QDhlBcMZvg9qfsort2dmFWPwJpXVenFA7IE1fh.png differ diff --git a/storage/app/photos/B9VjoVlVHDaRWPoVHhoR6WiaLrdhRjJu4e9ZE6mP.png b/storage/app/photos/B9VjoVlVHDaRWPoVHhoR6WiaLrdhRjJu4e9ZE6mP.png new file mode 100644 index 0000000..a22ede9 Binary files /dev/null and b/storage/app/photos/B9VjoVlVHDaRWPoVHhoR6WiaLrdhRjJu4e9ZE6mP.png differ diff --git a/storage/app/photos/BDqszob5zLKLe5tXXaCofn0eX5Cbobw9bicaGcQ9.png b/storage/app/photos/BDqszob5zLKLe5tXXaCofn0eX5Cbobw9bicaGcQ9.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/BDqszob5zLKLe5tXXaCofn0eX5Cbobw9bicaGcQ9.png differ diff --git a/storage/app/photos/BEtePOFFbVe6T0pgl8hZH9X0mYKmq7rdCBSMgAD7.png b/storage/app/photos/BEtePOFFbVe6T0pgl8hZH9X0mYKmq7rdCBSMgAD7.png new file mode 100644 index 0000000..c61f150 Binary files /dev/null and b/storage/app/photos/BEtePOFFbVe6T0pgl8hZH9X0mYKmq7rdCBSMgAD7.png differ diff --git a/storage/app/photos/BMDN92gDAUwuD4BB5NXiuxYuWiq4pPnxZW52d93O.jpg b/storage/app/photos/BMDN92gDAUwuD4BB5NXiuxYuWiq4pPnxZW52d93O.jpg new file mode 100644 index 0000000..842ddc5 Binary files /dev/null and b/storage/app/photos/BMDN92gDAUwuD4BB5NXiuxYuWiq4pPnxZW52d93O.jpg differ diff --git a/storage/app/photos/BQ05M4afS9ZPI7dglzIVBPKNZXizVU01HQDrcp2E.jpg b/storage/app/photos/BQ05M4afS9ZPI7dglzIVBPKNZXizVU01HQDrcp2E.jpg new file mode 100644 index 0000000..a226083 Binary files /dev/null and b/storage/app/photos/BQ05M4afS9ZPI7dglzIVBPKNZXizVU01HQDrcp2E.jpg differ diff --git a/storage/app/photos/BZfYwvQv1p.webp b/storage/app/photos/BZfYwvQv1p.webp new file mode 100644 index 0000000..1623611 Binary files /dev/null and b/storage/app/photos/BZfYwvQv1p.webp differ diff --git a/storage/app/photos/BeKVfG6MfbJ6Pp39RstwdqApswNAiaj9MCDC6ScJ.webp b/storage/app/photos/BeKVfG6MfbJ6Pp39RstwdqApswNAiaj9MCDC6ScJ.webp new file mode 100644 index 0000000..82582c8 Binary files /dev/null and b/storage/app/photos/BeKVfG6MfbJ6Pp39RstwdqApswNAiaj9MCDC6ScJ.webp differ diff --git a/storage/app/photos/BeWTs30clYFUmEvHCd8igQIv4YPK2lA5KGUZr3wr.jpg b/storage/app/photos/BeWTs30clYFUmEvHCd8igQIv4YPK2lA5KGUZr3wr.jpg new file mode 100644 index 0000000..82da1b9 Binary files /dev/null and b/storage/app/photos/BeWTs30clYFUmEvHCd8igQIv4YPK2lA5KGUZr3wr.jpg differ diff --git a/storage/app/photos/C4L6xWAYdCCo3XGfbvvM87q0wd1uaTLjYIYa0LJF.png b/storage/app/photos/C4L6xWAYdCCo3XGfbvvM87q0wd1uaTLjYIYa0LJF.png new file mode 100644 index 0000000..6ac0638 Binary files /dev/null and b/storage/app/photos/C4L6xWAYdCCo3XGfbvvM87q0wd1uaTLjYIYa0LJF.png differ diff --git a/storage/app/photos/C6w8VOdYDCBSqKtH8Azp9Pl23QVQdzi042nV6a3K.png b/storage/app/photos/C6w8VOdYDCBSqKtH8Azp9Pl23QVQdzi042nV6a3K.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/C6w8VOdYDCBSqKtH8Azp9Pl23QVQdzi042nV6a3K.png differ diff --git a/storage/app/photos/CK2X29MnyW6kxL3ROfaF0UGTzdn68qv23WADnKaw.png b/storage/app/photos/CK2X29MnyW6kxL3ROfaF0UGTzdn68qv23WADnKaw.png new file mode 100644 index 0000000..22bc248 Binary files /dev/null and b/storage/app/photos/CK2X29MnyW6kxL3ROfaF0UGTzdn68qv23WADnKaw.png differ diff --git a/storage/app/photos/CSSl1A4flP.webp b/storage/app/photos/CSSl1A4flP.webp new file mode 100644 index 0000000..46e709a Binary files /dev/null and b/storage/app/photos/CSSl1A4flP.webp differ diff --git a/storage/app/photos/ClP1AFujkEeGvCLfHk3kcAMmiDhiM2e2QvWe9ozM.png b/storage/app/photos/ClP1AFujkEeGvCLfHk3kcAMmiDhiM2e2QvWe9ozM.png new file mode 100644 index 0000000..98e5965 Binary files /dev/null and b/storage/app/photos/ClP1AFujkEeGvCLfHk3kcAMmiDhiM2e2QvWe9ozM.png differ diff --git a/storage/app/photos/D1Q1Vfv1Z8yKtr5mK1ghStrlGnttuUWS5xhe6nN0.png b/storage/app/photos/D1Q1Vfv1Z8yKtr5mK1ghStrlGnttuUWS5xhe6nN0.png new file mode 100644 index 0000000..38c4ccd Binary files /dev/null and b/storage/app/photos/D1Q1Vfv1Z8yKtr5mK1ghStrlGnttuUWS5xhe6nN0.png differ diff --git a/storage/app/photos/D1vwlygng3k6i7Kad3gZYBubGYeLPxhzd1J0sORv.jpg b/storage/app/photos/D1vwlygng3k6i7Kad3gZYBubGYeLPxhzd1J0sORv.jpg new file mode 100644 index 0000000..61b6830 Binary files /dev/null and b/storage/app/photos/D1vwlygng3k6i7Kad3gZYBubGYeLPxhzd1J0sORv.jpg differ diff --git a/storage/app/photos/D8Cs9ycfJ5.webp b/storage/app/photos/D8Cs9ycfJ5.webp new file mode 100644 index 0000000..3cd052a Binary files /dev/null and b/storage/app/photos/D8Cs9ycfJ5.webp differ diff --git a/storage/app/photos/D9JBneV75ru7oq7llFopDWtswByLasK6TOFcMJJQ.png b/storage/app/photos/D9JBneV75ru7oq7llFopDWtswByLasK6TOFcMJJQ.png new file mode 100644 index 0000000..b7de9e8 Binary files /dev/null and b/storage/app/photos/D9JBneV75ru7oq7llFopDWtswByLasK6TOFcMJJQ.png differ diff --git a/storage/app/photos/DBGOALULR3.webp b/storage/app/photos/DBGOALULR3.webp new file mode 100644 index 0000000..68724b0 Binary files /dev/null and b/storage/app/photos/DBGOALULR3.webp differ diff --git a/storage/app/photos/DVoDsMvDOkLHIIZyAyVdZx7q0ePiFmBrgshYCVP4.png b/storage/app/photos/DVoDsMvDOkLHIIZyAyVdZx7q0ePiFmBrgshYCVP4.png new file mode 100644 index 0000000..5b29399 Binary files /dev/null and b/storage/app/photos/DVoDsMvDOkLHIIZyAyVdZx7q0ePiFmBrgshYCVP4.png differ diff --git a/storage/app/photos/DWvobhigXCBx0dXnyJysvXUiFAnriE5Y1q5bzP0K.png b/storage/app/photos/DWvobhigXCBx0dXnyJysvXUiFAnriE5Y1q5bzP0K.png new file mode 100644 index 0000000..045c0fb Binary files /dev/null and b/storage/app/photos/DWvobhigXCBx0dXnyJysvXUiFAnriE5Y1q5bzP0K.png differ diff --git a/storage/app/photos/DmtO1V0p7b6qDx6ClI3Cah8MiZ2LPzx8bOUuSdr2.png b/storage/app/photos/DmtO1V0p7b6qDx6ClI3Cah8MiZ2LPzx8bOUuSdr2.png new file mode 100644 index 0000000..5e62a5a Binary files /dev/null and b/storage/app/photos/DmtO1V0p7b6qDx6ClI3Cah8MiZ2LPzx8bOUuSdr2.png differ diff --git a/storage/app/photos/DwSLBewZqfm75S4lQIvb6FVdgGaeh16Lvv5UtIKx.png b/storage/app/photos/DwSLBewZqfm75S4lQIvb6FVdgGaeh16Lvv5UtIKx.png new file mode 100644 index 0000000..0a87a70 Binary files /dev/null and b/storage/app/photos/DwSLBewZqfm75S4lQIvb6FVdgGaeh16Lvv5UtIKx.png differ diff --git a/storage/app/photos/E6bcqkQ73wgTtzYE7OVZcnx1z50aaXqL2nVMBKNz.png b/storage/app/photos/E6bcqkQ73wgTtzYE7OVZcnx1z50aaXqL2nVMBKNz.png new file mode 100644 index 0000000..473be0d Binary files /dev/null and b/storage/app/photos/E6bcqkQ73wgTtzYE7OVZcnx1z50aaXqL2nVMBKNz.png differ diff --git a/storage/app/photos/EFDZcwOe00F48dFZELReiB291mlV162SJLObg9r2.png b/storage/app/photos/EFDZcwOe00F48dFZELReiB291mlV162SJLObg9r2.png new file mode 100644 index 0000000..aa7af3d Binary files /dev/null and b/storage/app/photos/EFDZcwOe00F48dFZELReiB291mlV162SJLObg9r2.png differ diff --git a/storage/app/photos/EPDZN52eZwd4Fo3gV3pCTlvWJJYPLz6iE7lk1rPC.png b/storage/app/photos/EPDZN52eZwd4Fo3gV3pCTlvWJJYPLz6iE7lk1rPC.png new file mode 100644 index 0000000..f85194b Binary files /dev/null and b/storage/app/photos/EPDZN52eZwd4Fo3gV3pCTlvWJJYPLz6iE7lk1rPC.png differ diff --git a/storage/app/photos/EPL8Wkxb5D.webp b/storage/app/photos/EPL8Wkxb5D.webp new file mode 100644 index 0000000..cccf546 Binary files /dev/null and b/storage/app/photos/EPL8Wkxb5D.webp differ diff --git a/storage/app/photos/EPy0FejlnAPAIGRSBVIUDxgPIxotbVNalgPFGoYw.png b/storage/app/photos/EPy0FejlnAPAIGRSBVIUDxgPIxotbVNalgPFGoYw.png new file mode 100644 index 0000000..d87a0ee Binary files /dev/null and b/storage/app/photos/EPy0FejlnAPAIGRSBVIUDxgPIxotbVNalgPFGoYw.png differ diff --git a/storage/app/photos/EnCEDndjfxFCTxwDdlltPFoiTCB23PFbrKhb6hmL.png b/storage/app/photos/EnCEDndjfxFCTxwDdlltPFoiTCB23PFbrKhb6hmL.png new file mode 100644 index 0000000..68b88b8 Binary files /dev/null and b/storage/app/photos/EnCEDndjfxFCTxwDdlltPFoiTCB23PFbrKhb6hmL.png differ diff --git a/storage/app/photos/Es5TrfNNoP5F4PUCnssl1Vq3lZRrvNzZkUyZIDZy.png b/storage/app/photos/Es5TrfNNoP5F4PUCnssl1Vq3lZRrvNzZkUyZIDZy.png new file mode 100644 index 0000000..e451a50 Binary files /dev/null and b/storage/app/photos/Es5TrfNNoP5F4PUCnssl1Vq3lZRrvNzZkUyZIDZy.png differ diff --git a/storage/app/photos/EsnkJ69rPb.webp b/storage/app/photos/EsnkJ69rPb.webp new file mode 100644 index 0000000..f480976 Binary files /dev/null and b/storage/app/photos/EsnkJ69rPb.webp differ diff --git a/storage/app/photos/FGaqrg3BuK.webp b/storage/app/photos/FGaqrg3BuK.webp new file mode 100644 index 0000000..1dfbd1b Binary files /dev/null and b/storage/app/photos/FGaqrg3BuK.webp differ diff --git a/storage/app/photos/FHCTwlP7vaPqlj3KQh52rZ7FAm7i4kGeSjHQan2V.png b/storage/app/photos/FHCTwlP7vaPqlj3KQh52rZ7FAm7i4kGeSjHQan2V.png new file mode 100644 index 0000000..6bbc39c Binary files /dev/null and b/storage/app/photos/FHCTwlP7vaPqlj3KQh52rZ7FAm7i4kGeSjHQan2V.png differ diff --git a/storage/app/photos/FOqqDFUDYq7FYE3Vw90Aj80iLnIxLrzQutoQsmQD.png b/storage/app/photos/FOqqDFUDYq7FYE3Vw90Aj80iLnIxLrzQutoQsmQD.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/FOqqDFUDYq7FYE3Vw90Aj80iLnIxLrzQutoQsmQD.png differ diff --git a/storage/app/photos/FSsGyM7MAgKKxw6hAyEciW5d00wCeksXUzsmE7Df.jpg b/storage/app/photos/FSsGyM7MAgKKxw6hAyEciW5d00wCeksXUzsmE7Df.jpg new file mode 100644 index 0000000..e4e9536 Binary files /dev/null and b/storage/app/photos/FSsGyM7MAgKKxw6hAyEciW5d00wCeksXUzsmE7Df.jpg differ diff --git a/storage/app/photos/FW0jiztObR.webp b/storage/app/photos/FW0jiztObR.webp new file mode 100644 index 0000000..069e27e Binary files /dev/null and b/storage/app/photos/FW0jiztObR.webp differ diff --git a/storage/app/photos/FXpok6FW5BlFZGGvkRUxzMFNWHYhkhQnxrWhPcYz.png b/storage/app/photos/FXpok6FW5BlFZGGvkRUxzMFNWHYhkhQnxrWhPcYz.png new file mode 100644 index 0000000..bd0bb5e Binary files /dev/null and b/storage/app/photos/FXpok6FW5BlFZGGvkRUxzMFNWHYhkhQnxrWhPcYz.png differ diff --git a/storage/app/photos/FYHIqOJ5liZ3wrJX6e14OLTw3JvoWcCDUP7czieo.png b/storage/app/photos/FYHIqOJ5liZ3wrJX6e14OLTw3JvoWcCDUP7czieo.png new file mode 100644 index 0000000..adf5b35 Binary files /dev/null and b/storage/app/photos/FYHIqOJ5liZ3wrJX6e14OLTw3JvoWcCDUP7czieo.png differ diff --git a/storage/app/photos/FraD7j98hQ.webp b/storage/app/photos/FraD7j98hQ.webp new file mode 100644 index 0000000..469745d Binary files /dev/null and b/storage/app/photos/FraD7j98hQ.webp differ diff --git a/storage/app/photos/Frcf6v0e5oJSik1zTgxoWfBRteKkjJlu3DNRBda9.png b/storage/app/photos/Frcf6v0e5oJSik1zTgxoWfBRteKkjJlu3DNRBda9.png new file mode 100644 index 0000000..25beb92 Binary files /dev/null and b/storage/app/photos/Frcf6v0e5oJSik1zTgxoWfBRteKkjJlu3DNRBda9.png differ diff --git a/storage/app/photos/FrdgJoEBxG.webp b/storage/app/photos/FrdgJoEBxG.webp new file mode 100644 index 0000000..ee76e97 Binary files /dev/null and b/storage/app/photos/FrdgJoEBxG.webp differ diff --git a/storage/app/photos/FxhmiGzSYg.webp b/storage/app/photos/FxhmiGzSYg.webp new file mode 100644 index 0000000..d6a72bd Binary files /dev/null and b/storage/app/photos/FxhmiGzSYg.webp differ diff --git a/storage/app/photos/G6uSMB1n61zGdC3Vrioruxbu59lWqT0NfHPSqhFu.png b/storage/app/photos/G6uSMB1n61zGdC3Vrioruxbu59lWqT0NfHPSqhFu.png new file mode 100644 index 0000000..6c28b45 Binary files /dev/null and b/storage/app/photos/G6uSMB1n61zGdC3Vrioruxbu59lWqT0NfHPSqhFu.png differ diff --git a/storage/app/photos/Gb50IveyOLKFroAp9yhT4GTB50MXfKaeD5CYgFln.png b/storage/app/photos/Gb50IveyOLKFroAp9yhT4GTB50MXfKaeD5CYgFln.png new file mode 100644 index 0000000..0c2773c Binary files /dev/null and b/storage/app/photos/Gb50IveyOLKFroAp9yhT4GTB50MXfKaeD5CYgFln.png differ diff --git a/storage/app/photos/GcZ3I9POekw95rm5kb0U3PL69naZ7vm1pUxlO3CF.png b/storage/app/photos/GcZ3I9POekw95rm5kb0U3PL69naZ7vm1pUxlO3CF.png new file mode 100644 index 0000000..159992d Binary files /dev/null and b/storage/app/photos/GcZ3I9POekw95rm5kb0U3PL69naZ7vm1pUxlO3CF.png differ diff --git a/storage/app/photos/GgKWDSHLmd.webp b/storage/app/photos/GgKWDSHLmd.webp new file mode 100644 index 0000000..3be4eed Binary files /dev/null and b/storage/app/photos/GgKWDSHLmd.webp differ diff --git a/storage/app/photos/H34MpIVNNI7qtIRxVjX9VKUe1qyN2OyQGCMUV5Vi.png b/storage/app/photos/H34MpIVNNI7qtIRxVjX9VKUe1qyN2OyQGCMUV5Vi.png new file mode 100644 index 0000000..1ef3a01 Binary files /dev/null and b/storage/app/photos/H34MpIVNNI7qtIRxVjX9VKUe1qyN2OyQGCMUV5Vi.png differ diff --git a/storage/app/photos/H3qgzgj0NB.webp b/storage/app/photos/H3qgzgj0NB.webp new file mode 100644 index 0000000..45af6f5 Binary files /dev/null and b/storage/app/photos/H3qgzgj0NB.webp differ diff --git a/storage/app/photos/HC3QZFhu4vxlu9PKtotVsantcYRHa4MsXj3nLHdy.png b/storage/app/photos/HC3QZFhu4vxlu9PKtotVsantcYRHa4MsXj3nLHdy.png new file mode 100644 index 0000000..f391503 Binary files /dev/null and b/storage/app/photos/HC3QZFhu4vxlu9PKtotVsantcYRHa4MsXj3nLHdy.png differ diff --git a/storage/app/photos/HNjc1M3lk4OALzuXFqJaoQDbqtZW0fLVQRtbu6G8.png b/storage/app/photos/HNjc1M3lk4OALzuXFqJaoQDbqtZW0fLVQRtbu6G8.png new file mode 100644 index 0000000..df481f9 Binary files /dev/null and b/storage/app/photos/HNjc1M3lk4OALzuXFqJaoQDbqtZW0fLVQRtbu6G8.png differ diff --git a/storage/app/photos/HeuiWeSM6X.webp b/storage/app/photos/HeuiWeSM6X.webp new file mode 100644 index 0000000..9feed9e Binary files /dev/null and b/storage/app/photos/HeuiWeSM6X.webp differ diff --git a/storage/app/photos/HfGwlQn1xv.webp b/storage/app/photos/HfGwlQn1xv.webp new file mode 100644 index 0000000..2e38995 Binary files /dev/null and b/storage/app/photos/HfGwlQn1xv.webp differ diff --git a/storage/app/photos/Hg5OuW80Z9IpnYfPZIOvcx6V4h3iBJSZNeITGt3s.jpg b/storage/app/photos/Hg5OuW80Z9IpnYfPZIOvcx6V4h3iBJSZNeITGt3s.jpg new file mode 100644 index 0000000..15e8b94 Binary files /dev/null and b/storage/app/photos/Hg5OuW80Z9IpnYfPZIOvcx6V4h3iBJSZNeITGt3s.jpg differ diff --git a/storage/app/photos/HlUNhcTOjhniLh45LyBTQAvfxEtZVeUeiDaUUmtf.png b/storage/app/photos/HlUNhcTOjhniLh45LyBTQAvfxEtZVeUeiDaUUmtf.png new file mode 100644 index 0000000..9d870d5 Binary files /dev/null and b/storage/app/photos/HlUNhcTOjhniLh45LyBTQAvfxEtZVeUeiDaUUmtf.png differ diff --git a/storage/app/photos/HwavjogVVJC9Ta8PPZ8oP0TmyJW1s8oR90MWwaie.png b/storage/app/photos/HwavjogVVJC9Ta8PPZ8oP0TmyJW1s8oR90MWwaie.png new file mode 100644 index 0000000..0ccd301 Binary files /dev/null and b/storage/app/photos/HwavjogVVJC9Ta8PPZ8oP0TmyJW1s8oR90MWwaie.png differ diff --git a/storage/app/photos/I8dPs7D5W5s7QHzVp3mDRlbQX7OnUiSMoqQwN2di.png b/storage/app/photos/I8dPs7D5W5s7QHzVp3mDRlbQX7OnUiSMoqQwN2di.png new file mode 100644 index 0000000..1dd35eb Binary files /dev/null and b/storage/app/photos/I8dPs7D5W5s7QHzVp3mDRlbQX7OnUiSMoqQwN2di.png differ diff --git a/storage/app/photos/ISKfqiZ8O5Z9vmWpxxFjJbRrMNY3QlicwZgrN4pO.png b/storage/app/photos/ISKfqiZ8O5Z9vmWpxxFjJbRrMNY3QlicwZgrN4pO.png new file mode 100644 index 0000000..9defa10 Binary files /dev/null and b/storage/app/photos/ISKfqiZ8O5Z9vmWpxxFjJbRrMNY3QlicwZgrN4pO.png differ diff --git a/storage/app/photos/IsD6HM1svwAnW8UKzCqiz4d52TYOmtN0azG2eAb5.png b/storage/app/photos/IsD6HM1svwAnW8UKzCqiz4d52TYOmtN0azG2eAb5.png new file mode 100644 index 0000000..e06cca3 Binary files /dev/null and b/storage/app/photos/IsD6HM1svwAnW8UKzCqiz4d52TYOmtN0azG2eAb5.png differ diff --git a/storage/app/photos/IsFUYpv2PrrJM2MEDESGPLnQ5vmCze7sbbGRUuQd.jpg b/storage/app/photos/IsFUYpv2PrrJM2MEDESGPLnQ5vmCze7sbbGRUuQd.jpg new file mode 100644 index 0000000..bc20e44 Binary files /dev/null and b/storage/app/photos/IsFUYpv2PrrJM2MEDESGPLnQ5vmCze7sbbGRUuQd.jpg differ diff --git a/storage/app/photos/Ix8V5YFjI2gMttFLScobY2tzw7P8SYw0CcxmRr9Q.png b/storage/app/photos/Ix8V5YFjI2gMttFLScobY2tzw7P8SYw0CcxmRr9Q.png new file mode 100644 index 0000000..1308990 Binary files /dev/null and b/storage/app/photos/Ix8V5YFjI2gMttFLScobY2tzw7P8SYw0CcxmRr9Q.png differ diff --git a/storage/app/photos/IyLGvJxb0M7d2ktzWi8qYWYlyg55wZv16nVNWbdD.png b/storage/app/photos/IyLGvJxb0M7d2ktzWi8qYWYlyg55wZv16nVNWbdD.png new file mode 100644 index 0000000..acd81ef Binary files /dev/null and b/storage/app/photos/IyLGvJxb0M7d2ktzWi8qYWYlyg55wZv16nVNWbdD.png differ diff --git a/storage/app/photos/J3qSGn1SwQYyLzdpqiHAHmHCZDqJoIhOva94xfH3.jpg b/storage/app/photos/J3qSGn1SwQYyLzdpqiHAHmHCZDqJoIhOva94xfH3.jpg new file mode 100644 index 0000000..280f2e6 Binary files /dev/null and b/storage/app/photos/J3qSGn1SwQYyLzdpqiHAHmHCZDqJoIhOva94xfH3.jpg differ diff --git a/storage/app/photos/JIouymiYHENxHOX3kGcxeGtXZP2t2nhJYXOmEwz6.png b/storage/app/photos/JIouymiYHENxHOX3kGcxeGtXZP2t2nhJYXOmEwz6.png new file mode 100644 index 0000000..518b6b4 Binary files /dev/null and b/storage/app/photos/JIouymiYHENxHOX3kGcxeGtXZP2t2nhJYXOmEwz6.png differ diff --git a/storage/app/photos/JLFmzuMTTa.webp b/storage/app/photos/JLFmzuMTTa.webp new file mode 100644 index 0000000..774a0db Binary files /dev/null and b/storage/app/photos/JLFmzuMTTa.webp differ diff --git a/storage/app/photos/JQofUBpfQ6kEynq0ZxYQf8ULCPkIzDetuSPJcw4S.jpg b/storage/app/photos/JQofUBpfQ6kEynq0ZxYQf8ULCPkIzDetuSPJcw4S.jpg new file mode 100644 index 0000000..d4cfeb4 Binary files /dev/null and b/storage/app/photos/JQofUBpfQ6kEynq0ZxYQf8ULCPkIzDetuSPJcw4S.jpg differ diff --git a/storage/app/photos/JTxPrEvDSbsfq2Asxfnjvj6ovuHqo9BElv9oDeBB.png b/storage/app/photos/JTxPrEvDSbsfq2Asxfnjvj6ovuHqo9BElv9oDeBB.png new file mode 100644 index 0000000..c6f0fb0 Binary files /dev/null and b/storage/app/photos/JTxPrEvDSbsfq2Asxfnjvj6ovuHqo9BElv9oDeBB.png differ diff --git a/storage/app/photos/JZi5xlYyDR.webp b/storage/app/photos/JZi5xlYyDR.webp new file mode 100644 index 0000000..67c0454 Binary files /dev/null and b/storage/app/photos/JZi5xlYyDR.webp differ diff --git a/storage/app/photos/JhK3XnzhvMmmx9bSIFPueEAtnXdkJA8lU9Dn0Hps.png b/storage/app/photos/JhK3XnzhvMmmx9bSIFPueEAtnXdkJA8lU9Dn0Hps.png new file mode 100644 index 0000000..f52707e Binary files /dev/null and b/storage/app/photos/JhK3XnzhvMmmx9bSIFPueEAtnXdkJA8lU9Dn0Hps.png differ diff --git a/storage/app/photos/K75TV67VB8fX6PEqDmEzmOqPd4mt8Qqfa7ncYge2.png b/storage/app/photos/K75TV67VB8fX6PEqDmEzmOqPd4mt8Qqfa7ncYge2.png new file mode 100644 index 0000000..5b58920 Binary files /dev/null and b/storage/app/photos/K75TV67VB8fX6PEqDmEzmOqPd4mt8Qqfa7ncYge2.png differ diff --git a/storage/app/photos/KAmMCVJy14fF.webp b/storage/app/photos/KAmMCVJy14fF.webp new file mode 100644 index 0000000..01e42b7 Binary files /dev/null and b/storage/app/photos/KAmMCVJy14fF.webp differ diff --git a/storage/app/photos/KFHE5HtbimPdYu0mE9BpgebomvOQ6nvC6bY1CkvJ.png b/storage/app/photos/KFHE5HtbimPdYu0mE9BpgebomvOQ6nvC6bY1CkvJ.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/KFHE5HtbimPdYu0mE9BpgebomvOQ6nvC6bY1CkvJ.png differ diff --git a/storage/app/photos/KVEd8remlF.webp b/storage/app/photos/KVEd8remlF.webp new file mode 100644 index 0000000..9f7aac9 Binary files /dev/null and b/storage/app/photos/KVEd8remlF.webp differ diff --git a/storage/app/photos/KYjNetCRLb.webp b/storage/app/photos/KYjNetCRLb.webp new file mode 100644 index 0000000..09d8f33 Binary files /dev/null and b/storage/app/photos/KYjNetCRLb.webp differ diff --git a/storage/app/photos/Ke31YFtH94em7IYQVbQFsyE6EHCqIQUfL3OdBE7U.png b/storage/app/photos/Ke31YFtH94em7IYQVbQFsyE6EHCqIQUfL3OdBE7U.png new file mode 100644 index 0000000..84e45ce Binary files /dev/null and b/storage/app/photos/Ke31YFtH94em7IYQVbQFsyE6EHCqIQUfL3OdBE7U.png differ diff --git a/storage/app/photos/Kszq2N8MhcvAXp8NRGLD7PiC6kX98s1er9h5UCXf.png b/storage/app/photos/Kszq2N8MhcvAXp8NRGLD7PiC6kX98s1er9h5UCXf.png new file mode 100644 index 0000000..caeae7a Binary files /dev/null and b/storage/app/photos/Kszq2N8MhcvAXp8NRGLD7PiC6kX98s1er9h5UCXf.png differ diff --git a/storage/app/photos/L6PuEIikhp.webp b/storage/app/photos/L6PuEIikhp.webp new file mode 100644 index 0000000..37c1924 Binary files /dev/null and b/storage/app/photos/L6PuEIikhp.webp differ diff --git a/storage/app/photos/LBBWH2yTgNJIboMxrVZhkCft72956ynLIXT2FH61.png b/storage/app/photos/LBBWH2yTgNJIboMxrVZhkCft72956ynLIXT2FH61.png new file mode 100644 index 0000000..97856c8 Binary files /dev/null and b/storage/app/photos/LBBWH2yTgNJIboMxrVZhkCft72956ynLIXT2FH61.png differ diff --git a/storage/app/photos/LHKGHhTKESZClDF8Kx5NUHilPVdcP9B1bIALBo1V.jpg b/storage/app/photos/LHKGHhTKESZClDF8Kx5NUHilPVdcP9B1bIALBo1V.jpg new file mode 100644 index 0000000..d4cfeb4 Binary files /dev/null and b/storage/app/photos/LHKGHhTKESZClDF8Kx5NUHilPVdcP9B1bIALBo1V.jpg differ diff --git a/storage/app/photos/LafTdvbbwx9OEQbuHxePT8jD7yTEw5ZxfUpG0bi5.png b/storage/app/photos/LafTdvbbwx9OEQbuHxePT8jD7yTEw5ZxfUpG0bi5.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/LafTdvbbwx9OEQbuHxePT8jD7yTEw5ZxfUpG0bi5.png differ diff --git a/storage/app/photos/LdbCe2gAysQBDADtNNpQRgdemxXyRnZbcSoggelt.webp b/storage/app/photos/LdbCe2gAysQBDADtNNpQRgdemxXyRnZbcSoggelt.webp new file mode 100644 index 0000000..9fa60df Binary files /dev/null and b/storage/app/photos/LdbCe2gAysQBDADtNNpQRgdemxXyRnZbcSoggelt.webp differ diff --git a/storage/app/photos/LgSTB06c0x.webp b/storage/app/photos/LgSTB06c0x.webp new file mode 100644 index 0000000..f61e720 Binary files /dev/null and b/storage/app/photos/LgSTB06c0x.webp differ diff --git a/storage/app/photos/LlNqDlLF1qkia7oVqx4d6lcZyvCMKUr6b316RoCI.png b/storage/app/photos/LlNqDlLF1qkia7oVqx4d6lcZyvCMKUr6b316RoCI.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/LlNqDlLF1qkia7oVqx4d6lcZyvCMKUr6b316RoCI.png differ diff --git a/storage/app/photos/LsZI9toqGB.webp b/storage/app/photos/LsZI9toqGB.webp new file mode 100644 index 0000000..46e709a Binary files /dev/null and b/storage/app/photos/LsZI9toqGB.webp differ diff --git a/storage/app/photos/LwqxcAsUugu0xNHctMYGWqpAwTiV6L6FEk0ISYfA.mp4 b/storage/app/photos/LwqxcAsUugu0xNHctMYGWqpAwTiV6L6FEk0ISYfA.mp4 new file mode 100644 index 0000000..d43e73b Binary files /dev/null and b/storage/app/photos/LwqxcAsUugu0xNHctMYGWqpAwTiV6L6FEk0ISYfA.mp4 differ diff --git a/storage/app/photos/M7E879XHBuqF0GaHs9U0q2fzoAElqkNPhshDcCiY.png b/storage/app/photos/M7E879XHBuqF0GaHs9U0q2fzoAElqkNPhshDcCiY.png new file mode 100644 index 0000000..8f48bf0 Binary files /dev/null and b/storage/app/photos/M7E879XHBuqF0GaHs9U0q2fzoAElqkNPhshDcCiY.png differ diff --git a/storage/app/photos/ME4cHihfIx0WHSd2qdJbZe6j2QNhyTR0NnJtK9qL.jpg b/storage/app/photos/ME4cHihfIx0WHSd2qdJbZe6j2QNhyTR0NnJtK9qL.jpg new file mode 100644 index 0000000..b3ae5cb Binary files /dev/null and b/storage/app/photos/ME4cHihfIx0WHSd2qdJbZe6j2QNhyTR0NnJtK9qL.jpg differ diff --git a/storage/app/photos/MGIxMQi3eZVQ.webp b/storage/app/photos/MGIxMQi3eZVQ.webp new file mode 100644 index 0000000..da742e8 Binary files /dev/null and b/storage/app/photos/MGIxMQi3eZVQ.webp differ diff --git a/storage/app/photos/MGKjgmlvdL.webp b/storage/app/photos/MGKjgmlvdL.webp new file mode 100644 index 0000000..46e709a Binary files /dev/null and b/storage/app/photos/MGKjgmlvdL.webp differ diff --git a/storage/app/photos/MIDeoYInvQ.webp b/storage/app/photos/MIDeoYInvQ.webp new file mode 100644 index 0000000..ae044c9 Binary files /dev/null and b/storage/app/photos/MIDeoYInvQ.webp differ diff --git a/storage/app/photos/Mc0CcfuqARKZKT8luR4HqDjzUFFKvXrbKK6UNVtU.png b/storage/app/photos/Mc0CcfuqARKZKT8luR4HqDjzUFFKvXrbKK6UNVtU.png new file mode 100644 index 0000000..89b25da Binary files /dev/null and b/storage/app/photos/Mc0CcfuqARKZKT8luR4HqDjzUFFKvXrbKK6UNVtU.png differ diff --git a/storage/app/photos/MqQkvcWTmP8lecNfnqtw8z6UlpoZRGMp8jwprdHD.png b/storage/app/photos/MqQkvcWTmP8lecNfnqtw8z6UlpoZRGMp8jwprdHD.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/MqQkvcWTmP8lecNfnqtw8z6UlpoZRGMp8jwprdHD.png differ diff --git a/storage/app/photos/Mxm1nk2TuT.webp b/storage/app/photos/Mxm1nk2TuT.webp new file mode 100644 index 0000000..32cc1ea Binary files /dev/null and b/storage/app/photos/Mxm1nk2TuT.webp differ diff --git a/storage/app/photos/N06YiZezAB.webp b/storage/app/photos/N06YiZezAB.webp new file mode 100644 index 0000000..1421d53 Binary files /dev/null and b/storage/app/photos/N06YiZezAB.webp differ diff --git a/storage/app/photos/NIq3qQfC8aU6VFfsDiARNC5BbOF9UM4BonPbVV0d.png b/storage/app/photos/NIq3qQfC8aU6VFfsDiARNC5BbOF9UM4BonPbVV0d.png new file mode 100644 index 0000000..be5a390 Binary files /dev/null and b/storage/app/photos/NIq3qQfC8aU6VFfsDiARNC5BbOF9UM4BonPbVV0d.png differ diff --git a/storage/app/photos/NbBLe9kms5.webp b/storage/app/photos/NbBLe9kms5.webp new file mode 100644 index 0000000..d9be395 Binary files /dev/null and b/storage/app/photos/NbBLe9kms5.webp differ diff --git a/storage/app/photos/Nc6sWP6UV9.webp b/storage/app/photos/Nc6sWP6UV9.webp new file mode 100644 index 0000000..d580992 Binary files /dev/null and b/storage/app/photos/Nc6sWP6UV9.webp differ diff --git a/storage/app/photos/NiVKVNYauPrkyHK7KmFTUwleIhZqRuxgOHdmOFBx.jpg b/storage/app/photos/NiVKVNYauPrkyHK7KmFTUwleIhZqRuxgOHdmOFBx.jpg new file mode 100644 index 0000000..ae07dd3 Binary files /dev/null and b/storage/app/photos/NiVKVNYauPrkyHK7KmFTUwleIhZqRuxgOHdmOFBx.jpg differ diff --git a/storage/app/photos/NpmQSqAWtPMfCvupgxixWNyykcsgxprsah6w7bKm.png b/storage/app/photos/NpmQSqAWtPMfCvupgxixWNyykcsgxprsah6w7bKm.png new file mode 100644 index 0000000..1dd35eb Binary files /dev/null and b/storage/app/photos/NpmQSqAWtPMfCvupgxixWNyykcsgxprsah6w7bKm.png differ diff --git a/storage/app/photos/O1Vdc83SPV.webp b/storage/app/photos/O1Vdc83SPV.webp new file mode 100644 index 0000000..0d96e19 Binary files /dev/null and b/storage/app/photos/O1Vdc83SPV.webp differ diff --git a/storage/app/photos/O5iqoT0es1kDrAzUR6RnjA0hqrX7FRlVpOQF6sFa.jpg b/storage/app/photos/O5iqoT0es1kDrAzUR6RnjA0hqrX7FRlVpOQF6sFa.jpg new file mode 100644 index 0000000..d707d2c Binary files /dev/null and b/storage/app/photos/O5iqoT0es1kDrAzUR6RnjA0hqrX7FRlVpOQF6sFa.jpg differ diff --git a/storage/app/photos/O6CvvNTj4516NtpSGPG9OSFzWeBONDj2MK1qEhNx.png b/storage/app/photos/O6CvvNTj4516NtpSGPG9OSFzWeBONDj2MK1qEhNx.png new file mode 100644 index 0000000..f391503 Binary files /dev/null and b/storage/app/photos/O6CvvNTj4516NtpSGPG9OSFzWeBONDj2MK1qEhNx.png differ diff --git a/storage/app/photos/OEKPJSSyYlA9XaN1G4pH3QPHTOHxy6llOSXJc40I.png b/storage/app/photos/OEKPJSSyYlA9XaN1G4pH3QPHTOHxy6llOSXJc40I.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/OEKPJSSyYlA9XaN1G4pH3QPHTOHxy6llOSXJc40I.png differ diff --git a/storage/app/photos/OG2bWs4DjG.webp b/storage/app/photos/OG2bWs4DjG.webp new file mode 100644 index 0000000..e4df666 Binary files /dev/null and b/storage/app/photos/OG2bWs4DjG.webp differ diff --git a/storage/app/photos/OPsltoXurb.webp b/storage/app/photos/OPsltoXurb.webp new file mode 100644 index 0000000..e216e31 Binary files /dev/null and b/storage/app/photos/OPsltoXurb.webp differ diff --git a/storage/app/photos/OiNv3Xmmj0Q5SAIghYtugxan0O6n78UWp3O3YhBP.png b/storage/app/photos/OiNv3Xmmj0Q5SAIghYtugxan0O6n78UWp3O3YhBP.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/OiNv3Xmmj0Q5SAIghYtugxan0O6n78UWp3O3YhBP.png differ diff --git a/storage/app/photos/PGpq4lU6o4.webp b/storage/app/photos/PGpq4lU6o4.webp new file mode 100644 index 0000000..13ed093 Binary files /dev/null and b/storage/app/photos/PGpq4lU6o4.webp differ diff --git a/storage/app/photos/PO8jW4932qF0n8DGnBT33IiUo9s6dbRZXRnizLGm.png b/storage/app/photos/PO8jW4932qF0n8DGnBT33IiUo9s6dbRZXRnizLGm.png new file mode 100644 index 0000000..5b3304c Binary files /dev/null and b/storage/app/photos/PO8jW4932qF0n8DGnBT33IiUo9s6dbRZXRnizLGm.png differ diff --git a/storage/app/photos/PqbHjl73m1.webp b/storage/app/photos/PqbHjl73m1.webp new file mode 100644 index 0000000..81f9deb Binary files /dev/null and b/storage/app/photos/PqbHjl73m1.webp differ diff --git a/storage/app/photos/Ptyw3J4kApavBkB1jFchuxJiKhk0CTBAUx0aNPYj.png b/storage/app/photos/Ptyw3J4kApavBkB1jFchuxJiKhk0CTBAUx0aNPYj.png new file mode 100644 index 0000000..4ea6aa7 Binary files /dev/null and b/storage/app/photos/Ptyw3J4kApavBkB1jFchuxJiKhk0CTBAUx0aNPYj.png differ diff --git a/storage/app/photos/PvXmdtl6WBqSiM4fUxdwr61LYjHXNy9ZFyFNS4My.png b/storage/app/photos/PvXmdtl6WBqSiM4fUxdwr61LYjHXNy9ZFyFNS4My.png new file mode 100644 index 0000000..05be71e Binary files /dev/null and b/storage/app/photos/PvXmdtl6WBqSiM4fUxdwr61LYjHXNy9ZFyFNS4My.png differ diff --git a/storage/app/photos/PvqTFPnXR22JNZTvFPb9LZuTewMZIXW5lW3kyLwN.png b/storage/app/photos/PvqTFPnXR22JNZTvFPb9LZuTewMZIXW5lW3kyLwN.png new file mode 100644 index 0000000..427af29 Binary files /dev/null and b/storage/app/photos/PvqTFPnXR22JNZTvFPb9LZuTewMZIXW5lW3kyLwN.png differ diff --git a/storage/app/photos/PxgA4rsS4E.webp b/storage/app/photos/PxgA4rsS4E.webp new file mode 100644 index 0000000..d35fa06 Binary files /dev/null and b/storage/app/photos/PxgA4rsS4E.webp differ diff --git a/storage/app/photos/PzU7HEZNQj.webp b/storage/app/photos/PzU7HEZNQj.webp new file mode 100644 index 0000000..fa3a1c5 Binary files /dev/null and b/storage/app/photos/PzU7HEZNQj.webp differ diff --git a/storage/app/photos/Q4bTPlUcpT.webp b/storage/app/photos/Q4bTPlUcpT.webp new file mode 100644 index 0000000..9acda6d Binary files /dev/null and b/storage/app/photos/Q4bTPlUcpT.webp differ diff --git a/storage/app/photos/QY0ZcPHsi5Nra8moTjFV2rw9zpxzZbQw8QqqTkaP.png b/storage/app/photos/QY0ZcPHsi5Nra8moTjFV2rw9zpxzZbQw8QqqTkaP.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/QY0ZcPHsi5Nra8moTjFV2rw9zpxzZbQw8QqqTkaP.png differ diff --git a/storage/app/photos/Qb8DSh40ZnPeZaWSsXwfAjhLuDSHUYuILeBVW3br.png b/storage/app/photos/Qb8DSh40ZnPeZaWSsXwfAjhLuDSHUYuILeBVW3br.png new file mode 100644 index 0000000..ed21a3a Binary files /dev/null and b/storage/app/photos/Qb8DSh40ZnPeZaWSsXwfAjhLuDSHUYuILeBVW3br.png differ diff --git a/storage/app/photos/QhhtxUhVge.webp b/storage/app/photos/QhhtxUhVge.webp new file mode 100644 index 0000000..50b8a4b Binary files /dev/null and b/storage/app/photos/QhhtxUhVge.webp differ diff --git a/storage/app/photos/QlCBA7hypNi6uU6SWBWX93HcWlfGrd5WdBjpUG13.png b/storage/app/photos/QlCBA7hypNi6uU6SWBWX93HcWlfGrd5WdBjpUG13.png new file mode 100644 index 0000000..e97614e Binary files /dev/null and b/storage/app/photos/QlCBA7hypNi6uU6SWBWX93HcWlfGrd5WdBjpUG13.png differ diff --git a/storage/app/photos/Qo4yreeXOX.webp b/storage/app/photos/Qo4yreeXOX.webp new file mode 100644 index 0000000..92abd37 Binary files /dev/null and b/storage/app/photos/Qo4yreeXOX.webp differ diff --git a/storage/app/photos/QyMuOGf8Lq27x0On2Efbr4dGcD5P6hJoWHfoCp1K.png b/storage/app/photos/QyMuOGf8Lq27x0On2Efbr4dGcD5P6hJoWHfoCp1K.png new file mode 100644 index 0000000..427af29 Binary files /dev/null and b/storage/app/photos/QyMuOGf8Lq27x0On2Efbr4dGcD5P6hJoWHfoCp1K.png differ diff --git a/storage/app/photos/R4veldxlNLmfBCYkrF0qfykHBzKahULSOi6cEJo3.jpg b/storage/app/photos/R4veldxlNLmfBCYkrF0qfykHBzKahULSOi6cEJo3.jpg new file mode 100644 index 0000000..078c988 Binary files /dev/null and b/storage/app/photos/R4veldxlNLmfBCYkrF0qfykHBzKahULSOi6cEJo3.jpg differ diff --git a/storage/app/photos/RAfIxNncJ2Aif06eIRGKas1ImYPx6ZTosEdrQhCm.png b/storage/app/photos/RAfIxNncJ2Aif06eIRGKas1ImYPx6ZTosEdrQhCm.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/RAfIxNncJ2Aif06eIRGKas1ImYPx6ZTosEdrQhCm.png differ diff --git a/storage/app/photos/RIu5ql9pkA.webp b/storage/app/photos/RIu5ql9pkA.webp new file mode 100644 index 0000000..3675667 Binary files /dev/null and b/storage/app/photos/RIu5ql9pkA.webp differ diff --git a/storage/app/photos/RNDgjmZj2AVfKKQSCIV8b6fVPE7cLtQvCZRarlW5.png b/storage/app/photos/RNDgjmZj2AVfKKQSCIV8b6fVPE7cLtQvCZRarlW5.png new file mode 100644 index 0000000..6fe4596 Binary files /dev/null and b/storage/app/photos/RNDgjmZj2AVfKKQSCIV8b6fVPE7cLtQvCZRarlW5.png differ diff --git a/storage/app/photos/RNiHv2rBdAgM2FYZ85BOamTV3K0I2SFWAAnWRCdY.jpg b/storage/app/photos/RNiHv2rBdAgM2FYZ85BOamTV3K0I2SFWAAnWRCdY.jpg new file mode 100644 index 0000000..21e2a9c Binary files /dev/null and b/storage/app/photos/RNiHv2rBdAgM2FYZ85BOamTV3K0I2SFWAAnWRCdY.jpg differ diff --git a/storage/app/photos/RV0Na3S7tRcy7zF0lnGd0RPKKFGQvQmytxjVhMwG.jpg b/storage/app/photos/RV0Na3S7tRcy7zF0lnGd0RPKKFGQvQmytxjVhMwG.jpg new file mode 100644 index 0000000..ecdc689 Binary files /dev/null and b/storage/app/photos/RV0Na3S7tRcy7zF0lnGd0RPKKFGQvQmytxjVhMwG.jpg differ diff --git a/storage/app/photos/RfO04ZiDS2vHGDnFhm24WwiaOvdvfRpa8r4s4tfx.png b/storage/app/photos/RfO04ZiDS2vHGDnFhm24WwiaOvdvfRpa8r4s4tfx.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/RfO04ZiDS2vHGDnFhm24WwiaOvdvfRpa8r4s4tfx.png differ diff --git a/storage/app/photos/RfPwhSAEIFvpnpcAdFfJ9FhzSsHu4Zh0HZypmJJW.png b/storage/app/photos/RfPwhSAEIFvpnpcAdFfJ9FhzSsHu4Zh0HZypmJJW.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/RfPwhSAEIFvpnpcAdFfJ9FhzSsHu4Zh0HZypmJJW.png differ diff --git a/storage/app/photos/RsYgvQuL9E1ExvFPOXlJdVizIP73qusezktCjzAf.jpg b/storage/app/photos/RsYgvQuL9E1ExvFPOXlJdVizIP73qusezktCjzAf.jpg new file mode 100644 index 0000000..f9a563d Binary files /dev/null and b/storage/app/photos/RsYgvQuL9E1ExvFPOXlJdVizIP73qusezktCjzAf.jpg differ diff --git a/storage/app/photos/S1udvkaG8I.webp b/storage/app/photos/S1udvkaG8I.webp new file mode 100644 index 0000000..0d7ec10 Binary files /dev/null and b/storage/app/photos/S1udvkaG8I.webp differ diff --git a/storage/app/photos/S3HRCt4jqNAGqLl5ro8tbmZFRIMyppmDhJXDIS20.png b/storage/app/photos/S3HRCt4jqNAGqLl5ro8tbmZFRIMyppmDhJXDIS20.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/S3HRCt4jqNAGqLl5ro8tbmZFRIMyppmDhJXDIS20.png differ diff --git a/storage/app/photos/S3h5UfKKlmEmcIGYfxxquEPOvCBLBf9aGKpQ0oHE.png b/storage/app/photos/S3h5UfKKlmEmcIGYfxxquEPOvCBLBf9aGKpQ0oHE.png new file mode 100644 index 0000000..f996ed5 Binary files /dev/null and b/storage/app/photos/S3h5UfKKlmEmcIGYfxxquEPOvCBLBf9aGKpQ0oHE.png differ diff --git a/storage/app/photos/S7AJW6bj3v.webp b/storage/app/photos/S7AJW6bj3v.webp new file mode 100644 index 0000000..ab44c20 Binary files /dev/null and b/storage/app/photos/S7AJW6bj3v.webp differ diff --git a/storage/app/photos/SFC4mv7hI4.webp b/storage/app/photos/SFC4mv7hI4.webp new file mode 100644 index 0000000..fb3f28e Binary files /dev/null and b/storage/app/photos/SFC4mv7hI4.webp differ diff --git a/storage/app/photos/SIRwtTf8mtBTs5jiEjeVMMCEFUjE3ClVl563KulN.png b/storage/app/photos/SIRwtTf8mtBTs5jiEjeVMMCEFUjE3ClVl563KulN.png new file mode 100644 index 0000000..c186daa Binary files /dev/null and b/storage/app/photos/SIRwtTf8mtBTs5jiEjeVMMCEFUjE3ClVl563KulN.png differ diff --git a/storage/app/photos/SQcIcnCKrX.webp b/storage/app/photos/SQcIcnCKrX.webp new file mode 100644 index 0000000..066c405 Binary files /dev/null and b/storage/app/photos/SQcIcnCKrX.webp differ diff --git a/storage/app/photos/SQk563pAjynaLeLe8yE8XoEDdDcR4y9R5cAieMGc.png b/storage/app/photos/SQk563pAjynaLeLe8yE8XoEDdDcR4y9R5cAieMGc.png new file mode 100644 index 0000000..389cabe Binary files /dev/null and b/storage/app/photos/SQk563pAjynaLeLe8yE8XoEDdDcR4y9R5cAieMGc.png differ diff --git a/storage/app/photos/SR1A53fJ9YuRo7KQ5XRsHVYapFZXlvBhTsxMJqNg.png b/storage/app/photos/SR1A53fJ9YuRo7KQ5XRsHVYapFZXlvBhTsxMJqNg.png new file mode 100644 index 0000000..d4bfb19 Binary files /dev/null and b/storage/app/photos/SR1A53fJ9YuRo7KQ5XRsHVYapFZXlvBhTsxMJqNg.png differ diff --git a/storage/app/photos/SRaDZe8F9b.webp b/storage/app/photos/SRaDZe8F9b.webp new file mode 100644 index 0000000..d205165 Binary files /dev/null and b/storage/app/photos/SRaDZe8F9b.webp differ diff --git a/storage/app/photos/SbbvuZwUp3.webp b/storage/app/photos/SbbvuZwUp3.webp new file mode 100644 index 0000000..50b8a4b Binary files /dev/null and b/storage/app/photos/SbbvuZwUp3.webp differ diff --git a/storage/app/photos/Se6Nn4NA7C.webp b/storage/app/photos/Se6Nn4NA7C.webp new file mode 100644 index 0000000..13dab85 Binary files /dev/null and b/storage/app/photos/Se6Nn4NA7C.webp differ diff --git a/storage/app/photos/ShOInzzKWz.webp b/storage/app/photos/ShOInzzKWz.webp new file mode 100644 index 0000000..2f665ed Binary files /dev/null and b/storage/app/photos/ShOInzzKWz.webp differ diff --git a/storage/app/photos/Ss8a8Rm5B4.webp b/storage/app/photos/Ss8a8Rm5B4.webp new file mode 100644 index 0000000..966cafd Binary files /dev/null and b/storage/app/photos/Ss8a8Rm5B4.webp differ diff --git a/storage/app/photos/T1T5Q0AMzR.webp b/storage/app/photos/T1T5Q0AMzR.webp new file mode 100644 index 0000000..34567bd Binary files /dev/null and b/storage/app/photos/T1T5Q0AMzR.webp differ diff --git a/storage/app/photos/T8knuwNZjc7fwAr9GwikEBHJLJSx9XhGZAihmQCh.png b/storage/app/photos/T8knuwNZjc7fwAr9GwikEBHJLJSx9XhGZAihmQCh.png new file mode 100644 index 0000000..1258d06 Binary files /dev/null and b/storage/app/photos/T8knuwNZjc7fwAr9GwikEBHJLJSx9XhGZAihmQCh.png differ diff --git a/storage/app/photos/TIETYyMdnJZeGU0rhEssvPds2goHPt1YkeF5czaQ.png b/storage/app/photos/TIETYyMdnJZeGU0rhEssvPds2goHPt1YkeF5czaQ.png new file mode 100644 index 0000000..37ab746 Binary files /dev/null and b/storage/app/photos/TIETYyMdnJZeGU0rhEssvPds2goHPt1YkeF5czaQ.png differ diff --git a/storage/app/photos/TIFMbe4d34.webp b/storage/app/photos/TIFMbe4d34.webp new file mode 100644 index 0000000..a0422cb Binary files /dev/null and b/storage/app/photos/TIFMbe4d34.webp differ diff --git a/storage/app/photos/TQ9CNzGhgfeFXGC5pIpnINFuV5fA9Jhwa4SPgM1u.png b/storage/app/photos/TQ9CNzGhgfeFXGC5pIpnINFuV5fA9Jhwa4SPgM1u.png new file mode 100644 index 0000000..21b589e Binary files /dev/null and b/storage/app/photos/TQ9CNzGhgfeFXGC5pIpnINFuV5fA9Jhwa4SPgM1u.png differ diff --git a/storage/app/photos/TlTtb5Dk0dLLHNlyGu9P4XYilwz3ksGIsYFZuaCK.png b/storage/app/photos/TlTtb5Dk0dLLHNlyGu9P4XYilwz3ksGIsYFZuaCK.png new file mode 100644 index 0000000..927699d Binary files /dev/null and b/storage/app/photos/TlTtb5Dk0dLLHNlyGu9P4XYilwz3ksGIsYFZuaCK.png differ diff --git a/storage/app/photos/TmqP8T8SC9wnLlQWIYRwo9BOTVLPotjhryOJ5Qa6.jpg b/storage/app/photos/TmqP8T8SC9wnLlQWIYRwo9BOTVLPotjhryOJ5Qa6.jpg new file mode 100644 index 0000000..5f6c8d8 Binary files /dev/null and b/storage/app/photos/TmqP8T8SC9wnLlQWIYRwo9BOTVLPotjhryOJ5Qa6.jpg differ diff --git a/storage/app/photos/Tw89hOL8Nf.webp b/storage/app/photos/Tw89hOL8Nf.webp new file mode 100644 index 0000000..13dc189 Binary files /dev/null and b/storage/app/photos/Tw89hOL8Nf.webp differ diff --git a/storage/app/photos/TxXR8v4QNX.webp b/storage/app/photos/TxXR8v4QNX.webp new file mode 100644 index 0000000..d8f4c72 Binary files /dev/null and b/storage/app/photos/TxXR8v4QNX.webp differ diff --git a/storage/app/photos/U1i4xRxfhHMx66LtJdw1rAoVJe9tZ8sqXDwrHUdi.png b/storage/app/photos/U1i4xRxfhHMx66LtJdw1rAoVJe9tZ8sqXDwrHUdi.png new file mode 100644 index 0000000..0a78d62 Binary files /dev/null and b/storage/app/photos/U1i4xRxfhHMx66LtJdw1rAoVJe9tZ8sqXDwrHUdi.png differ diff --git a/storage/app/photos/UBdwGLtbWz3lUBHMXgMkX9Vz4mFFCNvjnr2uDXox.png b/storage/app/photos/UBdwGLtbWz3lUBHMXgMkX9Vz4mFFCNvjnr2uDXox.png new file mode 100644 index 0000000..d5a2d9c Binary files /dev/null and b/storage/app/photos/UBdwGLtbWz3lUBHMXgMkX9Vz4mFFCNvjnr2uDXox.png differ diff --git a/storage/app/photos/UFJ4dz8oJgyMr1DfA5mYR99v9Y6G2FsiSwiUqOq8.jpg b/storage/app/photos/UFJ4dz8oJgyMr1DfA5mYR99v9Y6G2FsiSwiUqOq8.jpg new file mode 100644 index 0000000..2a051dd Binary files /dev/null and b/storage/app/photos/UFJ4dz8oJgyMr1DfA5mYR99v9Y6G2FsiSwiUqOq8.jpg differ diff --git a/storage/app/photos/UGaTUEp9Ww5Y6hns1A6Cu3gVzBtTIsj2ryMvauFP.png b/storage/app/photos/UGaTUEp9Ww5Y6hns1A6Cu3gVzBtTIsj2ryMvauFP.png new file mode 100644 index 0000000..aa7af3d Binary files /dev/null and b/storage/app/photos/UGaTUEp9Ww5Y6hns1A6Cu3gVzBtTIsj2ryMvauFP.png differ diff --git a/storage/app/photos/UZ1aBw7dE8VSLA3EnuJC5V5sSLfnZU5LHcJwdw2I.png b/storage/app/photos/UZ1aBw7dE8VSLA3EnuJC5V5sSLfnZU5LHcJwdw2I.png new file mode 100644 index 0000000..7156dc1 Binary files /dev/null and b/storage/app/photos/UZ1aBw7dE8VSLA3EnuJC5V5sSLfnZU5LHcJwdw2I.png differ diff --git a/storage/app/photos/Ue1713Y890.webp b/storage/app/photos/Ue1713Y890.webp new file mode 100644 index 0000000..d0e26c4 Binary files /dev/null and b/storage/app/photos/Ue1713Y890.webp differ diff --git a/storage/app/photos/UtaPqpIRE461lue19iTTB9xJeR8cKxBUm5kXWHfz.png b/storage/app/photos/UtaPqpIRE461lue19iTTB9xJeR8cKxBUm5kXWHfz.png new file mode 100644 index 0000000..e5d407d Binary files /dev/null and b/storage/app/photos/UtaPqpIRE461lue19iTTB9xJeR8cKxBUm5kXWHfz.png differ diff --git a/storage/app/photos/UxMj6mCbAV.webp b/storage/app/photos/UxMj6mCbAV.webp new file mode 100644 index 0000000..b6bcdd1 Binary files /dev/null and b/storage/app/photos/UxMj6mCbAV.webp differ diff --git a/storage/app/photos/V1a1kQhE2tWhw6BRGzLVZa3SJtgUuJKvYHvwqTmc.png b/storage/app/photos/V1a1kQhE2tWhw6BRGzLVZa3SJtgUuJKvYHvwqTmc.png new file mode 100644 index 0000000..76adc92 Binary files /dev/null and b/storage/app/photos/V1a1kQhE2tWhw6BRGzLVZa3SJtgUuJKvYHvwqTmc.png differ diff --git a/storage/app/photos/VRxozA3RFBaHkix1xk4Fd3Wb5NaHL69JYCZneBXS.png b/storage/app/photos/VRxozA3RFBaHkix1xk4Fd3Wb5NaHL69JYCZneBXS.png new file mode 100644 index 0000000..2d14073 Binary files /dev/null and b/storage/app/photos/VRxozA3RFBaHkix1xk4Fd3Wb5NaHL69JYCZneBXS.png differ diff --git a/storage/app/photos/VcPeNY5eeb.webp b/storage/app/photos/VcPeNY5eeb.webp new file mode 100644 index 0000000..d0098a1 Binary files /dev/null and b/storage/app/photos/VcPeNY5eeb.webp differ diff --git a/storage/app/photos/VmFpUt6t5l.webp b/storage/app/photos/VmFpUt6t5l.webp new file mode 100644 index 0000000..4653200 Binary files /dev/null and b/storage/app/photos/VmFpUt6t5l.webp differ diff --git a/storage/app/photos/Vt2kZ4C6Ejl5fxGpLZ35xnaDLzfgoH1XRaFZd0Gu.jpg b/storage/app/photos/Vt2kZ4C6Ejl5fxGpLZ35xnaDLzfgoH1XRaFZd0Gu.jpg new file mode 100644 index 0000000..869d0d4 Binary files /dev/null and b/storage/app/photos/Vt2kZ4C6Ejl5fxGpLZ35xnaDLzfgoH1XRaFZd0Gu.jpg differ diff --git a/storage/app/photos/WIql12n04smT0X1R2xP2lwBXdlK9Lcdh4W0T4Utb.png b/storage/app/photos/WIql12n04smT0X1R2xP2lwBXdlK9Lcdh4W0T4Utb.png new file mode 100644 index 0000000..63c2414 Binary files /dev/null and b/storage/app/photos/WIql12n04smT0X1R2xP2lwBXdlK9Lcdh4W0T4Utb.png differ diff --git a/storage/app/photos/Wtl6yU0yFo.webp b/storage/app/photos/Wtl6yU0yFo.webp new file mode 100644 index 0000000..19ab3ac Binary files /dev/null and b/storage/app/photos/Wtl6yU0yFo.webp differ diff --git a/storage/app/photos/X8pGgcvMR08mqo8BXP86ArCk3zlvumbjftexxUWZ.png b/storage/app/photos/X8pGgcvMR08mqo8BXP86ArCk3zlvumbjftexxUWZ.png new file mode 100644 index 0000000..613cc23 Binary files /dev/null and b/storage/app/photos/X8pGgcvMR08mqo8BXP86ArCk3zlvumbjftexxUWZ.png differ diff --git a/storage/app/photos/XEIcy6DjSTRNZXOsI8g1aIX1vbOLiT153CjTsThp.png b/storage/app/photos/XEIcy6DjSTRNZXOsI8g1aIX1vbOLiT153CjTsThp.png new file mode 100644 index 0000000..fc568cf Binary files /dev/null and b/storage/app/photos/XEIcy6DjSTRNZXOsI8g1aIX1vbOLiT153CjTsThp.png differ diff --git a/storage/app/photos/XV6VczZSOAYKjz5QUlPI0HLCc3xdyo8yaNP1aANY.png b/storage/app/photos/XV6VczZSOAYKjz5QUlPI0HLCc3xdyo8yaNP1aANY.png new file mode 100644 index 0000000..aa7af3d Binary files /dev/null and b/storage/app/photos/XV6VczZSOAYKjz5QUlPI0HLCc3xdyo8yaNP1aANY.png differ diff --git a/storage/app/photos/XX1rikkAiL.webp b/storage/app/photos/XX1rikkAiL.webp new file mode 100644 index 0000000..e2ee263 Binary files /dev/null and b/storage/app/photos/XX1rikkAiL.webp differ diff --git a/storage/app/photos/XXY9j0v3aJRsF5zYPCh7KgejkdOk37ppeSa4kzAQ.png b/storage/app/photos/XXY9j0v3aJRsF5zYPCh7KgejkdOk37ppeSa4kzAQ.png new file mode 100644 index 0000000..af4e8d5 Binary files /dev/null and b/storage/app/photos/XXY9j0v3aJRsF5zYPCh7KgejkdOk37ppeSa4kzAQ.png differ diff --git a/storage/app/photos/XkZpeUK4zD.webp b/storage/app/photos/XkZpeUK4zD.webp new file mode 100644 index 0000000..56b54de Binary files /dev/null and b/storage/app/photos/XkZpeUK4zD.webp differ diff --git a/storage/app/photos/XstHRWT0RqzCfPENPOpTDybwKHunM9R7PNvgscNq.png b/storage/app/photos/XstHRWT0RqzCfPENPOpTDybwKHunM9R7PNvgscNq.png new file mode 100644 index 0000000..ac66ffd Binary files /dev/null and b/storage/app/photos/XstHRWT0RqzCfPENPOpTDybwKHunM9R7PNvgscNq.png differ diff --git a/storage/app/photos/XxA0RbjGZhoV0tMBMOcaq4p8Zb8jvnWMod9490sO.png b/storage/app/photos/XxA0RbjGZhoV0tMBMOcaq4p8Zb8jvnWMod9490sO.png new file mode 100644 index 0000000..e5596a7 Binary files /dev/null and b/storage/app/photos/XxA0RbjGZhoV0tMBMOcaq4p8Zb8jvnWMod9490sO.png differ diff --git a/storage/app/photos/Y7rBcQzwpq.webp b/storage/app/photos/Y7rBcQzwpq.webp new file mode 100644 index 0000000..6670991 Binary files /dev/null and b/storage/app/photos/Y7rBcQzwpq.webp differ diff --git a/storage/app/photos/YAsNTun6lFsLLMfZCtmM1q1PIfIyuCMvv4Rmdm8B.png b/storage/app/photos/YAsNTun6lFsLLMfZCtmM1q1PIfIyuCMvv4Rmdm8B.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/YAsNTun6lFsLLMfZCtmM1q1PIfIyuCMvv4Rmdm8B.png differ diff --git a/storage/app/photos/YMvvllq8IM.webp b/storage/app/photos/YMvvllq8IM.webp new file mode 100644 index 0000000..2141dd6 Binary files /dev/null and b/storage/app/photos/YMvvllq8IM.webp differ diff --git a/storage/app/photos/YZseBATr2U.webp b/storage/app/photos/YZseBATr2U.webp new file mode 100644 index 0000000..876dd2f Binary files /dev/null and b/storage/app/photos/YZseBATr2U.webp differ diff --git a/storage/app/photos/YnA2OwOI1ys1TFJJCQa6hoVzn1RcfmJKGbPGeMdc.png b/storage/app/photos/YnA2OwOI1ys1TFJJCQa6hoVzn1RcfmJKGbPGeMdc.png new file mode 100644 index 0000000..ba2722d Binary files /dev/null and b/storage/app/photos/YnA2OwOI1ys1TFJJCQa6hoVzn1RcfmJKGbPGeMdc.png differ diff --git a/storage/app/photos/ZNieqp5AwHfeJO3pLsYsNI4PZoUkZgbkXsLznQFp.jpg b/storage/app/photos/ZNieqp5AwHfeJO3pLsYsNI4PZoUkZgbkXsLznQFp.jpg new file mode 100644 index 0000000..c537638 Binary files /dev/null and b/storage/app/photos/ZNieqp5AwHfeJO3pLsYsNI4PZoUkZgbkXsLznQFp.jpg differ diff --git a/storage/app/photos/ZR2i5rV3Yq.webp b/storage/app/photos/ZR2i5rV3Yq.webp new file mode 100644 index 0000000..057c1e1 Binary files /dev/null and b/storage/app/photos/ZR2i5rV3Yq.webp differ diff --git a/storage/app/photos/ZTwTQgLOEP2RrwX0bN6pMW72mtdOI5aRWKNql6hI.png b/storage/app/photos/ZTwTQgLOEP2RrwX0bN6pMW72mtdOI5aRWKNql6hI.png new file mode 100644 index 0000000..231ccd0 Binary files /dev/null and b/storage/app/photos/ZTwTQgLOEP2RrwX0bN6pMW72mtdOI5aRWKNql6hI.png differ diff --git a/storage/app/photos/ZrSQ0rjN7w6rsjRUSXKsTPkGorZBh2ZhIepR0B3E.png b/storage/app/photos/ZrSQ0rjN7w6rsjRUSXKsTPkGorZBh2ZhIepR0B3E.png new file mode 100644 index 0000000..a7f574d Binary files /dev/null and b/storage/app/photos/ZrSQ0rjN7w6rsjRUSXKsTPkGorZBh2ZhIepR0B3E.png differ diff --git a/storage/app/photos/Zzkj1wUP68.webp b/storage/app/photos/Zzkj1wUP68.webp new file mode 100644 index 0000000..6041703 Binary files /dev/null and b/storage/app/photos/Zzkj1wUP68.webp differ diff --git a/storage/app/photos/a2Y4UZRfyICNjpw8kM3wXion4rMScfVU5PEuUXcw.jpg b/storage/app/photos/a2Y4UZRfyICNjpw8kM3wXion4rMScfVU5PEuUXcw.jpg new file mode 100644 index 0000000..f9a563d Binary files /dev/null and b/storage/app/photos/a2Y4UZRfyICNjpw8kM3wXion4rMScfVU5PEuUXcw.jpg differ diff --git a/storage/app/photos/a7B6y1RjhI.webp b/storage/app/photos/a7B6y1RjhI.webp new file mode 100644 index 0000000..ce9012f Binary files /dev/null and b/storage/app/photos/a7B6y1RjhI.webp differ diff --git a/storage/app/photos/a8NKrMHHAr79tLo6FbvEKEv2fFTmQssYIODw4Ps5.jpg b/storage/app/photos/a8NKrMHHAr79tLo6FbvEKEv2fFTmQssYIODw4Ps5.jpg new file mode 100644 index 0000000..f9a563d Binary files /dev/null and b/storage/app/photos/a8NKrMHHAr79tLo6FbvEKEv2fFTmQssYIODw4Ps5.jpg differ diff --git a/storage/app/photos/a8xFOP1nUU0r3VEdG8KQdhA2fuo0aQhPNSbkNVNm.png b/storage/app/photos/a8xFOP1nUU0r3VEdG8KQdhA2fuo0aQhPNSbkNVNm.png new file mode 100644 index 0000000..dd9123e Binary files /dev/null and b/storage/app/photos/a8xFOP1nUU0r3VEdG8KQdhA2fuo0aQhPNSbkNVNm.png differ diff --git a/storage/app/photos/aOoVoPzq1O.webp b/storage/app/photos/aOoVoPzq1O.webp new file mode 100644 index 0000000..a66e70b Binary files /dev/null and b/storage/app/photos/aOoVoPzq1O.webp differ diff --git a/storage/app/photos/bLzQquPh15.webp b/storage/app/photos/bLzQquPh15.webp new file mode 100644 index 0000000..513af78 Binary files /dev/null and b/storage/app/photos/bLzQquPh15.webp differ diff --git a/storage/app/photos/bNpe8OjAjY.webp b/storage/app/photos/bNpe8OjAjY.webp new file mode 100644 index 0000000..e216e31 Binary files /dev/null and b/storage/app/photos/bNpe8OjAjY.webp differ diff --git a/storage/app/photos/bVdjVXS7Ek.webp b/storage/app/photos/bVdjVXS7Ek.webp new file mode 100644 index 0000000..fa4585d Binary files /dev/null and b/storage/app/photos/bVdjVXS7Ek.webp differ diff --git a/storage/app/photos/bYl4ck3SedaHiMC7FEqO0PYS716cgOLwbPDfxhYy.png b/storage/app/photos/bYl4ck3SedaHiMC7FEqO0PYS716cgOLwbPDfxhYy.png new file mode 100644 index 0000000..c07167c Binary files /dev/null and b/storage/app/photos/bYl4ck3SedaHiMC7FEqO0PYS716cgOLwbPDfxhYy.png differ diff --git a/storage/app/photos/bim0lIktFc.webp b/storage/app/photos/bim0lIktFc.webp new file mode 100644 index 0000000..b418ad0 Binary files /dev/null and b/storage/app/photos/bim0lIktFc.webp differ diff --git a/storage/app/photos/blBX9eRTB0.webp b/storage/app/photos/blBX9eRTB0.webp new file mode 100644 index 0000000..10dfe2d Binary files /dev/null and b/storage/app/photos/blBX9eRTB0.webp differ diff --git a/storage/app/photos/brC7EDWUFYzxdtwbcbCloT6qYkJRhjEGkdIxZn9l.png b/storage/app/photos/brC7EDWUFYzxdtwbcbCloT6qYkJRhjEGkdIxZn9l.png new file mode 100644 index 0000000..7d432a5 Binary files /dev/null and b/storage/app/photos/brC7EDWUFYzxdtwbcbCloT6qYkJRhjEGkdIxZn9l.png differ diff --git a/storage/app/photos/c6pQBdrGmDKu9nx47woMbwRQ6zFrZ9ur8HGPouqR.png b/storage/app/photos/c6pQBdrGmDKu9nx47woMbwRQ6zFrZ9ur8HGPouqR.png new file mode 100644 index 0000000..1dd35eb Binary files /dev/null and b/storage/app/photos/c6pQBdrGmDKu9nx47woMbwRQ6zFrZ9ur8HGPouqR.png differ diff --git a/storage/app/photos/cF88G5hOV31DzWdnShBXiUDvPF6FtBjFsS045Fff.jpg b/storage/app/photos/cF88G5hOV31DzWdnShBXiUDvPF6FtBjFsS045Fff.jpg new file mode 100644 index 0000000..b5cf2d6 Binary files /dev/null and b/storage/app/photos/cF88G5hOV31DzWdnShBXiUDvPF6FtBjFsS045Fff.jpg differ diff --git a/storage/app/photos/cSwZBdaXLEkHu8LVeMyDB1TU3TaQWQ7eBHZRa6J9.jpg b/storage/app/photos/cSwZBdaXLEkHu8LVeMyDB1TU3TaQWQ7eBHZRa6J9.jpg new file mode 100644 index 0000000..d707d2c Binary files /dev/null and b/storage/app/photos/cSwZBdaXLEkHu8LVeMyDB1TU3TaQWQ7eBHZRa6J9.jpg differ diff --git a/storage/app/photos/ccBZSMJQ4DUE5aXBTjx6iDOITqpeRI6lgdbOGwCO.jpg b/storage/app/photos/ccBZSMJQ4DUE5aXBTjx6iDOITqpeRI6lgdbOGwCO.jpg new file mode 100644 index 0000000..5f81105 Binary files /dev/null and b/storage/app/photos/ccBZSMJQ4DUE5aXBTjx6iDOITqpeRI6lgdbOGwCO.jpg differ diff --git a/storage/app/photos/ccGTwv4RYQPHegT4kIljp521Ec2FJmaxITkEjXxJ.png b/storage/app/photos/ccGTwv4RYQPHegT4kIljp521Ec2FJmaxITkEjXxJ.png new file mode 100644 index 0000000..747c822 Binary files /dev/null and b/storage/app/photos/ccGTwv4RYQPHegT4kIljp521Ec2FJmaxITkEjXxJ.png differ diff --git a/storage/app/photos/cgBU4TwYGV.webp b/storage/app/photos/cgBU4TwYGV.webp new file mode 100644 index 0000000..13f91cf Binary files /dev/null and b/storage/app/photos/cgBU4TwYGV.webp differ diff --git a/storage/app/photos/cvGPkRNBWKShjWUdHDVxAr5CjepddWqp2a4FqVFy.png b/storage/app/photos/cvGPkRNBWKShjWUdHDVxAr5CjepddWqp2a4FqVFy.png new file mode 100644 index 0000000..82f8b16 Binary files /dev/null and b/storage/app/photos/cvGPkRNBWKShjWUdHDVxAr5CjepddWqp2a4FqVFy.png differ diff --git a/storage/app/photos/cx4OuwuIMt.webp b/storage/app/photos/cx4OuwuIMt.webp new file mode 100644 index 0000000..a72d668 Binary files /dev/null and b/storage/app/photos/cx4OuwuIMt.webp differ diff --git a/storage/app/photos/cxQnpPiEoYVllC3Qbap5qOnkaNu4gL7Nj1liOCHt.png b/storage/app/photos/cxQnpPiEoYVllC3Qbap5qOnkaNu4gL7Nj1liOCHt.png new file mode 100644 index 0000000..736d5d0 Binary files /dev/null and b/storage/app/photos/cxQnpPiEoYVllC3Qbap5qOnkaNu4gL7Nj1liOCHt.png differ diff --git a/storage/app/photos/d0409ZRZDe.webp b/storage/app/photos/d0409ZRZDe.webp new file mode 100644 index 0000000..8634b20 Binary files /dev/null and b/storage/app/photos/d0409ZRZDe.webp differ diff --git a/storage/app/photos/d2iURtAHwwyoaPExd0RpRDNhFYfylcKcUBul987Z.png b/storage/app/photos/d2iURtAHwwyoaPExd0RpRDNhFYfylcKcUBul987Z.png new file mode 100644 index 0000000..aa7a1b6 Binary files /dev/null and b/storage/app/photos/d2iURtAHwwyoaPExd0RpRDNhFYfylcKcUBul987Z.png differ diff --git a/storage/app/photos/dMiMJPXpmAUNPHOPpBaufjpxrlgk7VLZlVw1laLn.png b/storage/app/photos/dMiMJPXpmAUNPHOPpBaufjpxrlgk7VLZlVw1laLn.png new file mode 100644 index 0000000..113eed0 Binary files /dev/null and b/storage/app/photos/dMiMJPXpmAUNPHOPpBaufjpxrlgk7VLZlVw1laLn.png differ diff --git a/storage/app/photos/dUQwdb5T8lMGVaM5WlbgaEln4bJvbspiG4ebgJF1.png b/storage/app/photos/dUQwdb5T8lMGVaM5WlbgaEln4bJvbspiG4ebgJF1.png new file mode 100644 index 0000000..7b814d6 Binary files /dev/null and b/storage/app/photos/dUQwdb5T8lMGVaM5WlbgaEln4bJvbspiG4ebgJF1.png differ diff --git a/storage/app/photos/da7q5qLhK5oAqKcXz9SbrIwuxzoIltter5rqJF3H.png b/storage/app/photos/da7q5qLhK5oAqKcXz9SbrIwuxzoIltter5rqJF3H.png new file mode 100644 index 0000000..1dd35eb Binary files /dev/null and b/storage/app/photos/da7q5qLhK5oAqKcXz9SbrIwuxzoIltter5rqJF3H.png differ diff --git a/storage/app/photos/dnUWYYznAtENshz6W2g0HUdk1TlGkLzaLDWqEGBD.png b/storage/app/photos/dnUWYYznAtENshz6W2g0HUdk1TlGkLzaLDWqEGBD.png new file mode 100644 index 0000000..073a3c4 Binary files /dev/null and b/storage/app/photos/dnUWYYznAtENshz6W2g0HUdk1TlGkLzaLDWqEGBD.png differ diff --git a/storage/app/photos/doN7VjAEWk.webp b/storage/app/photos/doN7VjAEWk.webp new file mode 100644 index 0000000..58ceb5b Binary files /dev/null and b/storage/app/photos/doN7VjAEWk.webp differ diff --git a/storage/app/photos/drPDxvrryowjOTS3EXxeFs3vdjHwKa3NeXzH5bOf.png b/storage/app/photos/drPDxvrryowjOTS3EXxeFs3vdjHwKa3NeXzH5bOf.png new file mode 100644 index 0000000..ff9902b Binary files /dev/null and b/storage/app/photos/drPDxvrryowjOTS3EXxeFs3vdjHwKa3NeXzH5bOf.png differ diff --git a/storage/app/photos/duIJ8Fypd5Tq07IQj0kCFGYejTs6LhF9LMzMDl7M.png b/storage/app/photos/duIJ8Fypd5Tq07IQj0kCFGYejTs6LhF9LMzMDl7M.png new file mode 100644 index 0000000..7811be9 Binary files /dev/null and b/storage/app/photos/duIJ8Fypd5Tq07IQj0kCFGYejTs6LhF9LMzMDl7M.png differ diff --git a/storage/app/photos/dz1hfq9zDC.webp b/storage/app/photos/dz1hfq9zDC.webp new file mode 100644 index 0000000..ab44c20 Binary files /dev/null and b/storage/app/photos/dz1hfq9zDC.webp differ diff --git a/storage/app/photos/e3dTEqUO0EKbOvePo2H8c0Qu2wv2ajAckuqqgy9L.png b/storage/app/photos/e3dTEqUO0EKbOvePo2H8c0Qu2wv2ajAckuqqgy9L.png new file mode 100644 index 0000000..5f09cff Binary files /dev/null and b/storage/app/photos/e3dTEqUO0EKbOvePo2H8c0Qu2wv2ajAckuqqgy9L.png differ diff --git a/storage/app/photos/e8zFsIzqm1.webp b/storage/app/photos/e8zFsIzqm1.webp new file mode 100644 index 0000000..b525b56 Binary files /dev/null and b/storage/app/photos/e8zFsIzqm1.webp differ diff --git a/storage/app/photos/eK3jN4GByV.webp b/storage/app/photos/eK3jN4GByV.webp new file mode 100644 index 0000000..588bf4b Binary files /dev/null and b/storage/app/photos/eK3jN4GByV.webp differ diff --git a/storage/app/photos/eKdki0q0DgweJe86aB4F8VwQ4m5JHxrdSSggrttr.jpg b/storage/app/photos/eKdki0q0DgweJe86aB4F8VwQ4m5JHxrdSSggrttr.jpg new file mode 100644 index 0000000..71b8eca Binary files /dev/null and b/storage/app/photos/eKdki0q0DgweJe86aB4F8VwQ4m5JHxrdSSggrttr.jpg differ diff --git a/storage/app/photos/eWhSjJtbz2.webp b/storage/app/photos/eWhSjJtbz2.webp new file mode 100644 index 0000000..5db1990 Binary files /dev/null and b/storage/app/photos/eWhSjJtbz2.webp differ diff --git a/storage/app/photos/ec7ldlsmEeWXhpimkoMClVr6nx3mkPI2heO8FprD.png b/storage/app/photos/ec7ldlsmEeWXhpimkoMClVr6nx3mkPI2heO8FprD.png new file mode 100644 index 0000000..66610cd Binary files /dev/null and b/storage/app/photos/ec7ldlsmEeWXhpimkoMClVr6nx3mkPI2heO8FprD.png differ diff --git a/storage/app/photos/ejcNmHyFfQ0DeD5aFsLT0xkwRJmkDqnA5ZmEhx7K.png b/storage/app/photos/ejcNmHyFfQ0DeD5aFsLT0xkwRJmkDqnA5ZmEhx7K.png new file mode 100644 index 0000000..6be45d0 Binary files /dev/null and b/storage/app/photos/ejcNmHyFfQ0DeD5aFsLT0xkwRJmkDqnA5ZmEhx7K.png differ diff --git a/storage/app/photos/ekwnriNnFYeve5ibKqbtA95FW25pghgyi59cB1hQ.png b/storage/app/photos/ekwnriNnFYeve5ibKqbtA95FW25pghgyi59cB1hQ.png new file mode 100644 index 0000000..aff8ed2 Binary files /dev/null and b/storage/app/photos/ekwnriNnFYeve5ibKqbtA95FW25pghgyi59cB1hQ.png differ diff --git a/storage/app/photos/euLCEQnfr6.webp b/storage/app/photos/euLCEQnfr6.webp new file mode 100644 index 0000000..2f665ed Binary files /dev/null and b/storage/app/photos/euLCEQnfr6.webp differ diff --git a/storage/app/photos/f16FUT8TOjUIxHRnnpXT14292yZrcrkfEnKTa8UQ.jpg b/storage/app/photos/f16FUT8TOjUIxHRnnpXT14292yZrcrkfEnKTa8UQ.jpg new file mode 100644 index 0000000..5fe7976 Binary files /dev/null and b/storage/app/photos/f16FUT8TOjUIxHRnnpXT14292yZrcrkfEnKTa8UQ.jpg differ diff --git a/storage/app/photos/f7y9QSHoAzuxgKQJTDh6wrCcd2fkHEbDUlJXl7Mo.png b/storage/app/photos/f7y9QSHoAzuxgKQJTDh6wrCcd2fkHEbDUlJXl7Mo.png new file mode 100644 index 0000000..a0cbfac Binary files /dev/null and b/storage/app/photos/f7y9QSHoAzuxgKQJTDh6wrCcd2fkHEbDUlJXl7Mo.png differ diff --git a/storage/app/photos/f8u1tN8kZ4.webp b/storage/app/photos/f8u1tN8kZ4.webp new file mode 100644 index 0000000..2453c69 Binary files /dev/null and b/storage/app/photos/f8u1tN8kZ4.webp differ diff --git a/storage/app/photos/fMCL6u7XF3.webp b/storage/app/photos/fMCL6u7XF3.webp new file mode 100644 index 0000000..6a567c2 Binary files /dev/null and b/storage/app/photos/fMCL6u7XF3.webp differ diff --git a/storage/app/photos/fR5E9G4pXv.webp b/storage/app/photos/fR5E9G4pXv.webp new file mode 100644 index 0000000..7b0cdd1 Binary files /dev/null and b/storage/app/photos/fR5E9G4pXv.webp differ diff --git a/storage/app/photos/fgo4HLPKU8MFVHq4vlSve6LXEE4HvCYxdBx7huM7.png b/storage/app/photos/fgo4HLPKU8MFVHq4vlSve6LXEE4HvCYxdBx7huM7.png new file mode 100644 index 0000000..1515c5b Binary files /dev/null and b/storage/app/photos/fgo4HLPKU8MFVHq4vlSve6LXEE4HvCYxdBx7huM7.png differ diff --git a/storage/app/photos/fnGhx6oZC6wc74KaQQ0QWDHYbiwScu0xhVssLxqA.png b/storage/app/photos/fnGhx6oZC6wc74KaQQ0QWDHYbiwScu0xhVssLxqA.png new file mode 100644 index 0000000..d514688 Binary files /dev/null and b/storage/app/photos/fnGhx6oZC6wc74KaQQ0QWDHYbiwScu0xhVssLxqA.png differ diff --git a/storage/app/photos/fu6tnwN5FKeIKCznbFkXp7lUGrLlgmdMZccM34Do.png b/storage/app/photos/fu6tnwN5FKeIKCznbFkXp7lUGrLlgmdMZccM34Do.png new file mode 100644 index 0000000..4fc1ced Binary files /dev/null and b/storage/app/photos/fu6tnwN5FKeIKCznbFkXp7lUGrLlgmdMZccM34Do.png differ diff --git a/storage/app/photos/fvhqI7nMv5.webp b/storage/app/photos/fvhqI7nMv5.webp new file mode 100644 index 0000000..31a238f Binary files /dev/null and b/storage/app/photos/fvhqI7nMv5.webp differ diff --git a/storage/app/photos/fzUiSwUubNTrOXypOcRvcnRdIKRH1qtckcZG6ekl.jpg b/storage/app/photos/fzUiSwUubNTrOXypOcRvcnRdIKRH1qtckcZG6ekl.jpg new file mode 100644 index 0000000..e91a5e4 Binary files /dev/null and b/storage/app/photos/fzUiSwUubNTrOXypOcRvcnRdIKRH1qtckcZG6ekl.jpg differ diff --git a/storage/app/photos/g12lyyCUijDVW6KrukqU1pFpnGRFpaieLDpx3D1Q.png b/storage/app/photos/g12lyyCUijDVW6KrukqU1pFpnGRFpaieLDpx3D1Q.png new file mode 100644 index 0000000..45a9763 Binary files /dev/null and b/storage/app/photos/g12lyyCUijDVW6KrukqU1pFpnGRFpaieLDpx3D1Q.png differ diff --git a/storage/app/photos/g1xLU3fqGl.webp b/storage/app/photos/g1xLU3fqGl.webp new file mode 100644 index 0000000..1f0d523 Binary files /dev/null and b/storage/app/photos/g1xLU3fqGl.webp differ diff --git a/storage/app/photos/ghFhnaIFsv.webp b/storage/app/photos/ghFhnaIFsv.webp new file mode 100644 index 0000000..675cba3 Binary files /dev/null and b/storage/app/photos/ghFhnaIFsv.webp differ diff --git a/storage/app/photos/gr1b69NQqs.webp b/storage/app/photos/gr1b69NQqs.webp new file mode 100644 index 0000000..361a333 Binary files /dev/null and b/storage/app/photos/gr1b69NQqs.webp differ diff --git a/storage/app/photos/gvnfJ6vvetZ0Oqo6zzLWyiEW29up16bFrOxKEcx1.png b/storage/app/photos/gvnfJ6vvetZ0Oqo6zzLWyiEW29up16bFrOxKEcx1.png new file mode 100644 index 0000000..088039f Binary files /dev/null and b/storage/app/photos/gvnfJ6vvetZ0Oqo6zzLWyiEW29up16bFrOxKEcx1.png differ diff --git a/storage/app/photos/h9HvF39CyZ.webp b/storage/app/photos/h9HvF39CyZ.webp new file mode 100644 index 0000000..d54d75f Binary files /dev/null and b/storage/app/photos/h9HvF39CyZ.webp differ diff --git a/storage/app/photos/hHPqHVJPAk.webp b/storage/app/photos/hHPqHVJPAk.webp new file mode 100644 index 0000000..609e6cb Binary files /dev/null and b/storage/app/photos/hHPqHVJPAk.webp differ diff --git a/storage/app/photos/hNbOtJ6Oz9.webp b/storage/app/photos/hNbOtJ6Oz9.webp new file mode 100644 index 0000000..788696d Binary files /dev/null and b/storage/app/photos/hNbOtJ6Oz9.webp differ diff --git a/storage/app/photos/hiGQf49COS.webp b/storage/app/photos/hiGQf49COS.webp new file mode 100644 index 0000000..5e54357 Binary files /dev/null and b/storage/app/photos/hiGQf49COS.webp differ diff --git a/storage/app/photos/hoE1as7KOBC2cEUbautR3Ytd7l1hzr4ZrdsE5pVV.png b/storage/app/photos/hoE1as7KOBC2cEUbautR3Ytd7l1hzr4ZrdsE5pVV.png new file mode 100644 index 0000000..7bef6b8 Binary files /dev/null and b/storage/app/photos/hoE1as7KOBC2cEUbautR3Ytd7l1hzr4ZrdsE5pVV.png differ diff --git a/storage/app/photos/hpcguNG4sKdgVZtd0aYctGVRpJKJqYWKQw4TWAge.png b/storage/app/photos/hpcguNG4sKdgVZtd0aYctGVRpJKJqYWKQw4TWAge.png new file mode 100644 index 0000000..ace17e0 Binary files /dev/null and b/storage/app/photos/hpcguNG4sKdgVZtd0aYctGVRpJKJqYWKQw4TWAge.png differ diff --git a/storage/app/photos/hqzMvfeyOG5K37kljhO5Yx0pVoISvMYUfTGL6Pk4.png b/storage/app/photos/hqzMvfeyOG5K37kljhO5Yx0pVoISvMYUfTGL6Pk4.png new file mode 100644 index 0000000..aa5b168 Binary files /dev/null and b/storage/app/photos/hqzMvfeyOG5K37kljhO5Yx0pVoISvMYUfTGL6Pk4.png differ diff --git a/storage/app/photos/hyS2P5ruRBr6AMDTE5T3BXqihD1gg5szsIHP9Vdu.jpg b/storage/app/photos/hyS2P5ruRBr6AMDTE5T3BXqihD1gg5szsIHP9Vdu.jpg new file mode 100644 index 0000000..e4e9536 Binary files /dev/null and b/storage/app/photos/hyS2P5ruRBr6AMDTE5T3BXqihD1gg5szsIHP9Vdu.jpg differ diff --git a/storage/app/photos/i2owuSVR0ghTvTRGkeAfTHXLgPbfgcxx3xrCKED1.png b/storage/app/photos/i2owuSVR0ghTvTRGkeAfTHXLgPbfgcxx3xrCKED1.png new file mode 100644 index 0000000..c25304a Binary files /dev/null and b/storage/app/photos/i2owuSVR0ghTvTRGkeAfTHXLgPbfgcxx3xrCKED1.png differ diff --git a/storage/app/photos/i4fKQpyBsbHTeg8jcZq7JhyrDbNyRPxlu1nrD1W4.png b/storage/app/photos/i4fKQpyBsbHTeg8jcZq7JhyrDbNyRPxlu1nrD1W4.png new file mode 100644 index 0000000..045c0fb Binary files /dev/null and b/storage/app/photos/i4fKQpyBsbHTeg8jcZq7JhyrDbNyRPxlu1nrD1W4.png differ diff --git a/storage/app/photos/i5mntDrYO6JVeHp0CbFu56MqdsCbg46835rJap4E.png b/storage/app/photos/i5mntDrYO6JVeHp0CbFu56MqdsCbg46835rJap4E.png new file mode 100644 index 0000000..3822d36 Binary files /dev/null and b/storage/app/photos/i5mntDrYO6JVeHp0CbFu56MqdsCbg46835rJap4E.png differ diff --git a/storage/app/photos/iOM09Rc5NrWPIAzQ1E51awrs59tLaS6Ke4Cjhe2I.jpg b/storage/app/photos/iOM09Rc5NrWPIAzQ1E51awrs59tLaS6Ke4Cjhe2I.jpg new file mode 100644 index 0000000..3ecb0dc Binary files /dev/null and b/storage/app/photos/iOM09Rc5NrWPIAzQ1E51awrs59tLaS6Ke4Cjhe2I.jpg differ diff --git a/storage/app/photos/iXYFFt9OYpsG0oOZhztmLKjS0BZd2np0P9wYHhsK.png b/storage/app/photos/iXYFFt9OYpsG0oOZhztmLKjS0BZd2np0P9wYHhsK.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/iXYFFt9OYpsG0oOZhztmLKjS0BZd2np0P9wYHhsK.png differ diff --git a/storage/app/photos/ii3ZHTwzTNI9dxM5hzlO7QCfjGsl8jsayIDmTNwS.png b/storage/app/photos/ii3ZHTwzTNI9dxM5hzlO7QCfjGsl8jsayIDmTNwS.png new file mode 100644 index 0000000..65c67c4 Binary files /dev/null and b/storage/app/photos/ii3ZHTwzTNI9dxM5hzlO7QCfjGsl8jsayIDmTNwS.png differ diff --git a/storage/app/photos/inRapfujbc.webp b/storage/app/photos/inRapfujbc.webp new file mode 100644 index 0000000..9014272 Binary files /dev/null and b/storage/app/photos/inRapfujbc.webp differ diff --git a/storage/app/photos/iwLNizO65SFpE02cfrSxhqeFodx7EeTWyWXA8pyp.jpg b/storage/app/photos/iwLNizO65SFpE02cfrSxhqeFodx7EeTWyWXA8pyp.jpg new file mode 100644 index 0000000..15d9a5d Binary files /dev/null and b/storage/app/photos/iwLNizO65SFpE02cfrSxhqeFodx7EeTWyWXA8pyp.jpg differ diff --git a/storage/app/photos/jHlWxV8JSS7IwKlZurequUNheoZF4I1vQgClqkWc.png b/storage/app/photos/jHlWxV8JSS7IwKlZurequUNheoZF4I1vQgClqkWc.png new file mode 100644 index 0000000..747c822 Binary files /dev/null and b/storage/app/photos/jHlWxV8JSS7IwKlZurequUNheoZF4I1vQgClqkWc.png differ diff --git a/storage/app/photos/jXwpyZThv2.webp b/storage/app/photos/jXwpyZThv2.webp new file mode 100644 index 0000000..e9f909f Binary files /dev/null and b/storage/app/photos/jXwpyZThv2.webp differ diff --git a/storage/app/photos/jfikZPlTxUenHOO7ohN5dYSrW9PPjYCS16jOtNQ3.png b/storage/app/photos/jfikZPlTxUenHOO7ohN5dYSrW9PPjYCS16jOtNQ3.png new file mode 100644 index 0000000..85eca94 Binary files /dev/null and b/storage/app/photos/jfikZPlTxUenHOO7ohN5dYSrW9PPjYCS16jOtNQ3.png differ diff --git a/storage/app/photos/jmIOizw81mlTCV83spkO5r0pEn1lAfTRYpkiBctL.png b/storage/app/photos/jmIOizw81mlTCV83spkO5r0pEn1lAfTRYpkiBctL.png new file mode 100644 index 0000000..747c822 Binary files /dev/null and b/storage/app/photos/jmIOizw81mlTCV83spkO5r0pEn1lAfTRYpkiBctL.png differ diff --git a/storage/app/photos/kRAGNxL3G1jSKHaVDwPvGtzsTYTqDPJ2r9Swmt2I.png b/storage/app/photos/kRAGNxL3G1jSKHaVDwPvGtzsTYTqDPJ2r9Swmt2I.png new file mode 100644 index 0000000..a9dd6ea Binary files /dev/null and b/storage/app/photos/kRAGNxL3G1jSKHaVDwPvGtzsTYTqDPJ2r9Swmt2I.png differ diff --git a/storage/app/photos/kTXvjvFZe5.webp b/storage/app/photos/kTXvjvFZe5.webp new file mode 100644 index 0000000..92ea135 Binary files /dev/null and b/storage/app/photos/kTXvjvFZe5.webp differ diff --git a/storage/app/photos/kWIDR8FS8iodfjuKxmyRnuiplMCvQnXoo3MBCDRO.png b/storage/app/photos/kWIDR8FS8iodfjuKxmyRnuiplMCvQnXoo3MBCDRO.png new file mode 100644 index 0000000..2a6b07b Binary files /dev/null and b/storage/app/photos/kWIDR8FS8iodfjuKxmyRnuiplMCvQnXoo3MBCDRO.png differ diff --git a/storage/app/photos/kkLWoPh7s6gPPGDjvhb2rLElF2Y0WMFzyCrj3PZW.png b/storage/app/photos/kkLWoPh7s6gPPGDjvhb2rLElF2Y0WMFzyCrj3PZW.png new file mode 100644 index 0000000..b5de30d Binary files /dev/null and b/storage/app/photos/kkLWoPh7s6gPPGDjvhb2rLElF2Y0WMFzyCrj3PZW.png differ diff --git a/storage/app/photos/kq9l5Hf2MJLNcfqNysmV1BooPOrRaIX28AzJxbR2.png b/storage/app/photos/kq9l5Hf2MJLNcfqNysmV1BooPOrRaIX28AzJxbR2.png new file mode 100644 index 0000000..0f4259e Binary files /dev/null and b/storage/app/photos/kq9l5Hf2MJLNcfqNysmV1BooPOrRaIX28AzJxbR2.png differ diff --git a/storage/app/photos/ks41Z1BqOlMxNjDV2P7pHaTBt9lCGyS3sltLitFq.png b/storage/app/photos/ks41Z1BqOlMxNjDV2P7pHaTBt9lCGyS3sltLitFq.png new file mode 100644 index 0000000..6955847 Binary files /dev/null and b/storage/app/photos/ks41Z1BqOlMxNjDV2P7pHaTBt9lCGyS3sltLitFq.png differ diff --git a/storage/app/photos/l6QFJILWRIfMOdH28TIRdS8sgQnGmJNDyGmUXa5g.png b/storage/app/photos/l6QFJILWRIfMOdH28TIRdS8sgQnGmJNDyGmUXa5g.png new file mode 100644 index 0000000..e29d869 Binary files /dev/null and b/storage/app/photos/l6QFJILWRIfMOdH28TIRdS8sgQnGmJNDyGmUXa5g.png differ diff --git a/storage/app/photos/lIGZnTBXwW.webp b/storage/app/photos/lIGZnTBXwW.webp new file mode 100644 index 0000000..6e2520c Binary files /dev/null and b/storage/app/photos/lIGZnTBXwW.webp differ diff --git a/storage/app/photos/lVCdHD6d4g.webp b/storage/app/photos/lVCdHD6d4g.webp new file mode 100644 index 0000000..b1b9c90 Binary files /dev/null and b/storage/app/photos/lVCdHD6d4g.webp differ diff --git a/storage/app/photos/lVyk3hdUHC2xf4bdCT61rwaJXXQ49e5ryx2cBPOr.png b/storage/app/photos/lVyk3hdUHC2xf4bdCT61rwaJXXQ49e5ryx2cBPOr.png new file mode 100644 index 0000000..7961977 Binary files /dev/null and b/storage/app/photos/lVyk3hdUHC2xf4bdCT61rwaJXXQ49e5ryx2cBPOr.png differ diff --git a/storage/app/photos/lzBFQ0hdNt.webp b/storage/app/photos/lzBFQ0hdNt.webp new file mode 100644 index 0000000..ea7742d Binary files /dev/null and b/storage/app/photos/lzBFQ0hdNt.webp differ diff --git a/storage/app/photos/m2p49p90m3yBFuw0DvrLnen3EVmUWDGiGoBWShmy.png b/storage/app/photos/m2p49p90m3yBFuw0DvrLnen3EVmUWDGiGoBWShmy.png new file mode 100644 index 0000000..7bab018 Binary files /dev/null and b/storage/app/photos/m2p49p90m3yBFuw0DvrLnen3EVmUWDGiGoBWShmy.png differ diff --git a/storage/app/photos/mGUj1GRAWhD8po3uIsTnXpHtkrGh5FPzAN5T3UtD.png b/storage/app/photos/mGUj1GRAWhD8po3uIsTnXpHtkrGh5FPzAN5T3UtD.png new file mode 100644 index 0000000..43ef810 Binary files /dev/null and b/storage/app/photos/mGUj1GRAWhD8po3uIsTnXpHtkrGh5FPzAN5T3UtD.png differ diff --git a/storage/app/photos/mlQGiAwOvl.webp b/storage/app/photos/mlQGiAwOvl.webp new file mode 100644 index 0000000..930bd1e Binary files /dev/null and b/storage/app/photos/mlQGiAwOvl.webp differ diff --git a/storage/app/photos/mp4I9IH2k5n87flARDKwcOlQ9Hfii0pWr30b7wYB.png b/storage/app/photos/mp4I9IH2k5n87flARDKwcOlQ9Hfii0pWr30b7wYB.png new file mode 100644 index 0000000..7fa4a33 Binary files /dev/null and b/storage/app/photos/mp4I9IH2k5n87flARDKwcOlQ9Hfii0pWr30b7wYB.png differ diff --git a/storage/app/photos/mzkv7fWVcNjSq6NNbCQYQJrhOTmCE9Bdz7hMIADm.png b/storage/app/photos/mzkv7fWVcNjSq6NNbCQYQJrhOTmCE9Bdz7hMIADm.png new file mode 100644 index 0000000..b1004fb Binary files /dev/null and b/storage/app/photos/mzkv7fWVcNjSq6NNbCQYQJrhOTmCE9Bdz7hMIADm.png differ diff --git a/storage/app/photos/nNXT7hr6x3DwQpt34Meumay1Bgv0AFdGkMPLIQFt.png b/storage/app/photos/nNXT7hr6x3DwQpt34Meumay1Bgv0AFdGkMPLIQFt.png new file mode 100644 index 0000000..d34bbc1 Binary files /dev/null and b/storage/app/photos/nNXT7hr6x3DwQpt34Meumay1Bgv0AFdGkMPLIQFt.png differ diff --git a/storage/app/photos/nocepFI1gC.webp b/storage/app/photos/nocepFI1gC.webp new file mode 100644 index 0000000..7b0cdd1 Binary files /dev/null and b/storage/app/photos/nocepFI1gC.webp differ diff --git a/storage/app/photos/ntFnWKbFs0.webp b/storage/app/photos/ntFnWKbFs0.webp new file mode 100644 index 0000000..07171ae Binary files /dev/null and b/storage/app/photos/ntFnWKbFs0.webp differ diff --git a/storage/app/photos/oBaKM44NjU.webp b/storage/app/photos/oBaKM44NjU.webp new file mode 100644 index 0000000..06336c5 Binary files /dev/null and b/storage/app/photos/oBaKM44NjU.webp differ diff --git a/storage/app/photos/oazGH0aZEEjS1Rn8TNTIB3AP342CWfz9GB7sQRvb.png b/storage/app/photos/oazGH0aZEEjS1Rn8TNTIB3AP342CWfz9GB7sQRvb.png new file mode 100644 index 0000000..a1c5764 Binary files /dev/null and b/storage/app/photos/oazGH0aZEEjS1Rn8TNTIB3AP342CWfz9GB7sQRvb.png differ diff --git a/storage/app/photos/og8qcUlrAdjEfPOPVqo8leWI4iRMuoXMCBhD28k5.png b/storage/app/photos/og8qcUlrAdjEfPOPVqo8leWI4iRMuoXMCBhD28k5.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/og8qcUlrAdjEfPOPVqo8leWI4iRMuoXMCBhD28k5.png differ diff --git a/storage/app/photos/omtKlw7rnj.webp b/storage/app/photos/omtKlw7rnj.webp new file mode 100644 index 0000000..895fd3e Binary files /dev/null and b/storage/app/photos/omtKlw7rnj.webp differ diff --git a/storage/app/photos/osFeJc1Qtl.webp b/storage/app/photos/osFeJc1Qtl.webp new file mode 100644 index 0000000..5fa40d6 Binary files /dev/null and b/storage/app/photos/osFeJc1Qtl.webp differ diff --git a/storage/app/photos/oyTdumpOAk.webp b/storage/app/photos/oyTdumpOAk.webp new file mode 100644 index 0000000..609e6cb Binary files /dev/null and b/storage/app/photos/oyTdumpOAk.webp differ diff --git a/storage/app/photos/p1PmNR51uC.webp b/storage/app/photos/p1PmNR51uC.webp new file mode 100644 index 0000000..9f90bd2 Binary files /dev/null and b/storage/app/photos/p1PmNR51uC.webp differ diff --git a/storage/app/photos/p5QzbbZbIq.webp b/storage/app/photos/p5QzbbZbIq.webp new file mode 100644 index 0000000..6a54539 Binary files /dev/null and b/storage/app/photos/p5QzbbZbIq.webp differ diff --git a/storage/app/photos/pQVuTWJkuJ.webp b/storage/app/photos/pQVuTWJkuJ.webp new file mode 100644 index 0000000..c682122 Binary files /dev/null and b/storage/app/photos/pQVuTWJkuJ.webp differ diff --git a/storage/app/photos/pVGPspGooT.webp b/storage/app/photos/pVGPspGooT.webp new file mode 100644 index 0000000..e4e352b Binary files /dev/null and b/storage/app/photos/pVGPspGooT.webp differ diff --git a/storage/app/photos/pYy34cIbW0.webp b/storage/app/photos/pYy34cIbW0.webp new file mode 100644 index 0000000..5fa40d6 Binary files /dev/null and b/storage/app/photos/pYy34cIbW0.webp differ diff --git a/storage/app/photos/pjuqf5YkI7XyOD00D5rucqri7UtofiZuEo2l9u19.png b/storage/app/photos/pjuqf5YkI7XyOD00D5rucqri7UtofiZuEo2l9u19.png new file mode 100644 index 0000000..69dfc65 Binary files /dev/null and b/storage/app/photos/pjuqf5YkI7XyOD00D5rucqri7UtofiZuEo2l9u19.png differ diff --git a/storage/app/photos/pmJoHXL9UH.webp b/storage/app/photos/pmJoHXL9UH.webp new file mode 100644 index 0000000..9daacdc Binary files /dev/null and b/storage/app/photos/pmJoHXL9UH.webp differ diff --git a/storage/app/photos/qBYr7RVhee.webp b/storage/app/photos/qBYr7RVhee.webp new file mode 100644 index 0000000..7224b8f Binary files /dev/null and b/storage/app/photos/qBYr7RVhee.webp differ diff --git a/storage/app/photos/qBp0m9pTTu.webp b/storage/app/photos/qBp0m9pTTu.webp new file mode 100644 index 0000000..00d516c Binary files /dev/null and b/storage/app/photos/qBp0m9pTTu.webp differ diff --git a/storage/app/photos/qOToutFzTxxf8vwUXUzTqf0RPkvH9lOp8HZUcLFo.png b/storage/app/photos/qOToutFzTxxf8vwUXUzTqf0RPkvH9lOp8HZUcLFo.png new file mode 100644 index 0000000..a85238f Binary files /dev/null and b/storage/app/photos/qOToutFzTxxf8vwUXUzTqf0RPkvH9lOp8HZUcLFo.png differ diff --git a/storage/app/photos/qQB0Gi8LWV.webp b/storage/app/photos/qQB0Gi8LWV.webp new file mode 100644 index 0000000..81f9deb Binary files /dev/null and b/storage/app/photos/qQB0Gi8LWV.webp differ diff --git a/storage/app/photos/qRvmjokvlltgXZsguO97Qor2AWDbfGBKqusXn1Uq.jpg b/storage/app/photos/qRvmjokvlltgXZsguO97Qor2AWDbfGBKqusXn1Uq.jpg new file mode 100644 index 0000000..82da1b9 Binary files /dev/null and b/storage/app/photos/qRvmjokvlltgXZsguO97Qor2AWDbfGBKqusXn1Uq.jpg differ diff --git a/storage/app/photos/qdKBlNkeiP.webp b/storage/app/photos/qdKBlNkeiP.webp new file mode 100644 index 0000000..98b1848 Binary files /dev/null and b/storage/app/photos/qdKBlNkeiP.webp differ diff --git a/storage/app/photos/rDJMygZxNHL2jUgUREFeJASMCYeXRQzZBqLvx5zM.png b/storage/app/photos/rDJMygZxNHL2jUgUREFeJASMCYeXRQzZBqLvx5zM.png new file mode 100644 index 0000000..1b1d69e Binary files /dev/null and b/storage/app/photos/rDJMygZxNHL2jUgUREFeJASMCYeXRQzZBqLvx5zM.png differ diff --git a/storage/app/photos/rKjY1L0F59KwBD6aKhQm4fw3Z1i5QGXyN5H0N95L.png b/storage/app/photos/rKjY1L0F59KwBD6aKhQm4fw3Z1i5QGXyN5H0N95L.png new file mode 100644 index 0000000..91d942d Binary files /dev/null and b/storage/app/photos/rKjY1L0F59KwBD6aKhQm4fw3Z1i5QGXyN5H0N95L.png differ diff --git a/storage/app/photos/rNXRM7m7cr.webp b/storage/app/photos/rNXRM7m7cr.webp new file mode 100644 index 0000000..9d8402a Binary files /dev/null and b/storage/app/photos/rNXRM7m7cr.webp differ diff --git a/storage/app/photos/rRhrcMq6ZdOIvbYhpZ3s74ccSMFDJusgSzQM8WGL.png b/storage/app/photos/rRhrcMq6ZdOIvbYhpZ3s74ccSMFDJusgSzQM8WGL.png new file mode 100644 index 0000000..473be0d Binary files /dev/null and b/storage/app/photos/rRhrcMq6ZdOIvbYhpZ3s74ccSMFDJusgSzQM8WGL.png differ diff --git a/storage/app/photos/rUqpxRiGAaZR7t753VjjVuw4RijbRvsfWnEKx1iU.png b/storage/app/photos/rUqpxRiGAaZR7t753VjjVuw4RijbRvsfWnEKx1iU.png new file mode 100644 index 0000000..2952136 Binary files /dev/null and b/storage/app/photos/rUqpxRiGAaZR7t753VjjVuw4RijbRvsfWnEKx1iU.png differ diff --git a/storage/app/photos/rVC5v1iLT2cswbpgttPQG1mScZd8DI898WFlLmMy.png b/storage/app/photos/rVC5v1iLT2cswbpgttPQG1mScZd8DI898WFlLmMy.png new file mode 100644 index 0000000..1b80926 Binary files /dev/null and b/storage/app/photos/rVC5v1iLT2cswbpgttPQG1mScZd8DI898WFlLmMy.png differ diff --git a/storage/app/photos/rWeEIjiKXD.webp b/storage/app/photos/rWeEIjiKXD.webp new file mode 100644 index 0000000..a242dbb Binary files /dev/null and b/storage/app/photos/rWeEIjiKXD.webp differ diff --git a/storage/app/photos/rq1lTGUl5YtbbwdzNb7CTywYFnJ3wP2CUwfkRuNm.png b/storage/app/photos/rq1lTGUl5YtbbwdzNb7CTywYFnJ3wP2CUwfkRuNm.png new file mode 100644 index 0000000..1dd35eb Binary files /dev/null and b/storage/app/photos/rq1lTGUl5YtbbwdzNb7CTywYFnJ3wP2CUwfkRuNm.png differ diff --git a/storage/app/photos/ruktjvHnuUbdUWepk6OkDmFV0lVKqiYsNeegDbBv.png b/storage/app/photos/ruktjvHnuUbdUWepk6OkDmFV0lVKqiYsNeegDbBv.png new file mode 100644 index 0000000..747c822 Binary files /dev/null and b/storage/app/photos/ruktjvHnuUbdUWepk6OkDmFV0lVKqiYsNeegDbBv.png differ diff --git a/storage/app/photos/sEcwhllQwfDYmxxB4EWiIIoz2ixnylEejqXKsmHk.png b/storage/app/photos/sEcwhllQwfDYmxxB4EWiIIoz2ixnylEejqXKsmHk.png new file mode 100644 index 0000000..880c5f7 Binary files /dev/null and b/storage/app/photos/sEcwhllQwfDYmxxB4EWiIIoz2ixnylEejqXKsmHk.png differ diff --git a/storage/app/photos/sEoC8j6ygPZtD8ncHUyTjLteSc5rcXpx9BAy8Ure.png b/storage/app/photos/sEoC8j6ygPZtD8ncHUyTjLteSc5rcXpx9BAy8Ure.png new file mode 100644 index 0000000..f1c67ca Binary files /dev/null and b/storage/app/photos/sEoC8j6ygPZtD8ncHUyTjLteSc5rcXpx9BAy8Ure.png differ diff --git a/storage/app/photos/sPjCyrbWaK.webp b/storage/app/photos/sPjCyrbWaK.webp new file mode 100644 index 0000000..6225396 Binary files /dev/null and b/storage/app/photos/sPjCyrbWaK.webp differ diff --git a/storage/app/photos/sR6f1UinY7FnfCWhtMsbxxHDj2zgybMaXyWzzFKO.png b/storage/app/photos/sR6f1UinY7FnfCWhtMsbxxHDj2zgybMaXyWzzFKO.png new file mode 100644 index 0000000..e09daaa Binary files /dev/null and b/storage/app/photos/sR6f1UinY7FnfCWhtMsbxxHDj2zgybMaXyWzzFKO.png differ diff --git a/storage/app/photos/sgYiqaOEfVJoy1xKC2Y3Z1nbRr3k5Zye22xWz4Ph.png b/storage/app/photos/sgYiqaOEfVJoy1xKC2Y3Z1nbRr3k5Zye22xWz4Ph.png new file mode 100644 index 0000000..11b1a09 Binary files /dev/null and b/storage/app/photos/sgYiqaOEfVJoy1xKC2Y3Z1nbRr3k5Zye22xWz4Ph.png differ diff --git a/storage/app/photos/szY2sf4lFaHcOcrkQz0cCmtc4rNgCX85LwMGAO5b.png b/storage/app/photos/szY2sf4lFaHcOcrkQz0cCmtc4rNgCX85LwMGAO5b.png new file mode 100644 index 0000000..1dd35eb Binary files /dev/null and b/storage/app/photos/szY2sf4lFaHcOcrkQz0cCmtc4rNgCX85LwMGAO5b.png differ diff --git a/storage/app/photos/t5uy86ubg5rm6XFDcaYxyhk75rUsonFLY8Ic4qIL.jpg b/storage/app/photos/t5uy86ubg5rm6XFDcaYxyhk75rUsonFLY8Ic4qIL.jpg new file mode 100644 index 0000000..7587e32 Binary files /dev/null and b/storage/app/photos/t5uy86ubg5rm6XFDcaYxyhk75rUsonFLY8Ic4qIL.jpg differ diff --git a/storage/app/photos/t7IsgNZPC7.webp b/storage/app/photos/t7IsgNZPC7.webp new file mode 100644 index 0000000..3a1bbbb Binary files /dev/null and b/storage/app/photos/t7IsgNZPC7.webp differ diff --git a/storage/app/photos/t7UMSkKxxK.webp b/storage/app/photos/t7UMSkKxxK.webp new file mode 100644 index 0000000..5f85099 Binary files /dev/null and b/storage/app/photos/t7UMSkKxxK.webp differ diff --git a/storage/app/photos/tArURUorCK.webp b/storage/app/photos/tArURUorCK.webp new file mode 100644 index 0000000..9acda6d Binary files /dev/null and b/storage/app/photos/tArURUorCK.webp differ diff --git a/storage/app/photos/tExX1H9sfEjU3ndg5TMSn4tvXpGJcTG1K8xlYluZ.png b/storage/app/photos/tExX1H9sfEjU3ndg5TMSn4tvXpGJcTG1K8xlYluZ.png new file mode 100644 index 0000000..747c822 Binary files /dev/null and b/storage/app/photos/tExX1H9sfEjU3ndg5TMSn4tvXpGJcTG1K8xlYluZ.png differ diff --git a/storage/app/photos/tKToegrFCc.webp b/storage/app/photos/tKToegrFCc.webp new file mode 100644 index 0000000..de50c9b Binary files /dev/null and b/storage/app/photos/tKToegrFCc.webp differ diff --git a/storage/app/photos/tOY4EEP5Bn.webp b/storage/app/photos/tOY4EEP5Bn.webp new file mode 100644 index 0000000..ac4bceb Binary files /dev/null and b/storage/app/photos/tOY4EEP5Bn.webp differ diff --git a/storage/app/photos/tXaS4Eb4Oq9UZP9NV7b5LPnP9ZKjglX1yiLWftUy.png b/storage/app/photos/tXaS4Eb4Oq9UZP9NV7b5LPnP9ZKjglX1yiLWftUy.png new file mode 100644 index 0000000..fc568cf Binary files /dev/null and b/storage/app/photos/tXaS4Eb4Oq9UZP9NV7b5LPnP9ZKjglX1yiLWftUy.png differ diff --git a/storage/app/photos/tfVfvHy3eRXLKVhY892SsjUTNJ1SAHUuW7d95A50.png b/storage/app/photos/tfVfvHy3eRXLKVhY892SsjUTNJ1SAHUuW7d95A50.png new file mode 100644 index 0000000..a061250 Binary files /dev/null and b/storage/app/photos/tfVfvHy3eRXLKVhY892SsjUTNJ1SAHUuW7d95A50.png differ diff --git a/storage/app/photos/tjxeKCyxaMcH34kF1jdoX7sn2IRAOfO6vrHiawYb.png b/storage/app/photos/tjxeKCyxaMcH34kF1jdoX7sn2IRAOfO6vrHiawYb.png new file mode 100644 index 0000000..0927398 Binary files /dev/null and b/storage/app/photos/tjxeKCyxaMcH34kF1jdoX7sn2IRAOfO6vrHiawYb.png differ diff --git a/storage/app/photos/u1eoSaZufrKB2nhvfaQgaKHVbIBikP1mnzr2Djpg.png b/storage/app/photos/u1eoSaZufrKB2nhvfaQgaKHVbIBikP1mnzr2Djpg.png new file mode 100644 index 0000000..762a824 Binary files /dev/null and b/storage/app/photos/u1eoSaZufrKB2nhvfaQgaKHVbIBikP1mnzr2Djpg.png differ diff --git a/storage/app/photos/u4FpBW15OHRENf7TMtbWQQIO09CWZjg5QNPRZqSX.png b/storage/app/photos/u4FpBW15OHRENf7TMtbWQQIO09CWZjg5QNPRZqSX.png new file mode 100644 index 0000000..433f2ab Binary files /dev/null and b/storage/app/photos/u4FpBW15OHRENf7TMtbWQQIO09CWZjg5QNPRZqSX.png differ diff --git a/storage/app/photos/u5ctpJbEMaCdbDogs3jbqTNvm860mJ4CMzduEGwa.png b/storage/app/photos/u5ctpJbEMaCdbDogs3jbqTNvm860mJ4CMzduEGwa.png new file mode 100644 index 0000000..747c822 Binary files /dev/null and b/storage/app/photos/u5ctpJbEMaCdbDogs3jbqTNvm860mJ4CMzduEGwa.png differ diff --git a/storage/app/photos/u9GWSqposG.webp b/storage/app/photos/u9GWSqposG.webp new file mode 100644 index 0000000..3e59733 Binary files /dev/null and b/storage/app/photos/u9GWSqposG.webp differ diff --git a/storage/app/photos/uQgAhfgfD2LfDRV3qkZa46GGt55Iw0VFvpSUHnGF.png b/storage/app/photos/uQgAhfgfD2LfDRV3qkZa46GGt55Iw0VFvpSUHnGF.png new file mode 100644 index 0000000..5b6417f Binary files /dev/null and b/storage/app/photos/uQgAhfgfD2LfDRV3qkZa46GGt55Iw0VFvpSUHnGF.png differ diff --git a/storage/app/photos/uW0ZUAtSey.webp b/storage/app/photos/uW0ZUAtSey.webp new file mode 100644 index 0000000..675baa6 Binary files /dev/null and b/storage/app/photos/uW0ZUAtSey.webp differ diff --git a/storage/app/photos/uob6XXD9cehraHWJsNTk4ztlhwfoiU3Kyo4JK0Qv.png b/storage/app/photos/uob6XXD9cehraHWJsNTk4ztlhwfoiU3Kyo4JK0Qv.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/uob6XXD9cehraHWJsNTk4ztlhwfoiU3Kyo4JK0Qv.png differ diff --git a/storage/app/photos/uyLeM9v3Bo3T3EOnwgCXLy4NGdlPI8Avsp4uVHZo.png b/storage/app/photos/uyLeM9v3Bo3T3EOnwgCXLy4NGdlPI8Avsp4uVHZo.png new file mode 100644 index 0000000..09cd87b Binary files /dev/null and b/storage/app/photos/uyLeM9v3Bo3T3EOnwgCXLy4NGdlPI8Avsp4uVHZo.png differ diff --git a/storage/app/photos/uyQRz5A5QVOrnUqNiwllL52rAkL8xrgPL2Hh4ReR.png b/storage/app/photos/uyQRz5A5QVOrnUqNiwllL52rAkL8xrgPL2Hh4ReR.png new file mode 100644 index 0000000..1591173 Binary files /dev/null and b/storage/app/photos/uyQRz5A5QVOrnUqNiwllL52rAkL8xrgPL2Hh4ReR.png differ diff --git a/storage/app/photos/v0yCGPvX1PMdrnqI0Yxv7vlgNWnC4kTfLenyhUSF.png b/storage/app/photos/v0yCGPvX1PMdrnqI0Yxv7vlgNWnC4kTfLenyhUSF.png new file mode 100644 index 0000000..584318c Binary files /dev/null and b/storage/app/photos/v0yCGPvX1PMdrnqI0Yxv7vlgNWnC4kTfLenyhUSF.png differ diff --git a/storage/app/photos/v2K3Qwr0srjE3NXeX1cEIHCEuMEwMbElhlmE1E1Q.png b/storage/app/photos/v2K3Qwr0srjE3NXeX1cEIHCEuMEwMbElhlmE1E1Q.png new file mode 100644 index 0000000..0804b41 Binary files /dev/null and b/storage/app/photos/v2K3Qwr0srjE3NXeX1cEIHCEuMEwMbElhlmE1E1Q.png differ diff --git a/storage/app/photos/vN7U2nQG9C.webp b/storage/app/photos/vN7U2nQG9C.webp new file mode 100644 index 0000000..14da341 Binary files /dev/null and b/storage/app/photos/vN7U2nQG9C.webp differ diff --git a/storage/app/photos/vqIOlezGSF9frlsP2ACgt6jLmP74mp4OdVv7zdfn.jpg b/storage/app/photos/vqIOlezGSF9frlsP2ACgt6jLmP74mp4OdVv7zdfn.jpg new file mode 100644 index 0000000..e91a5e4 Binary files /dev/null and b/storage/app/photos/vqIOlezGSF9frlsP2ACgt6jLmP74mp4OdVv7zdfn.jpg differ diff --git a/storage/app/photos/vtfxydASMaCZBx0lSYzjXVOQedKrs67RFmESGbL5.png b/storage/app/photos/vtfxydASMaCZBx0lSYzjXVOQedKrs67RFmESGbL5.png new file mode 100644 index 0000000..85eca94 Binary files /dev/null and b/storage/app/photos/vtfxydASMaCZBx0lSYzjXVOQedKrs67RFmESGbL5.png differ diff --git a/storage/app/photos/vtqsdYzpjGfHgrH7IU0LoyoeOjAEqd8MGmEsyafQ.png b/storage/app/photos/vtqsdYzpjGfHgrH7IU0LoyoeOjAEqd8MGmEsyafQ.png new file mode 100644 index 0000000..9d33986 Binary files /dev/null and b/storage/app/photos/vtqsdYzpjGfHgrH7IU0LoyoeOjAEqd8MGmEsyafQ.png differ diff --git a/storage/app/photos/vwbD0WmWVgAU05WBZkkpzNJbcrzKTQBIpiF0jk0N.png b/storage/app/photos/vwbD0WmWVgAU05WBZkkpzNJbcrzKTQBIpiF0jk0N.png new file mode 100644 index 0000000..ec9dde1 Binary files /dev/null and b/storage/app/photos/vwbD0WmWVgAU05WBZkkpzNJbcrzKTQBIpiF0jk0N.png differ diff --git a/storage/app/photos/vzW5bFoAgMOXmal2dJhNVQ2tZt4YNoL6gPV4rPUt.png b/storage/app/photos/vzW5bFoAgMOXmal2dJhNVQ2tZt4YNoL6gPV4rPUt.png new file mode 100644 index 0000000..32baa7c Binary files /dev/null and b/storage/app/photos/vzW5bFoAgMOXmal2dJhNVQ2tZt4YNoL6gPV4rPUt.png differ diff --git a/storage/app/photos/w8FFaLtNICK5pezFrfHi1hZt1CstZGeteqJM3lAp.png b/storage/app/photos/w8FFaLtNICK5pezFrfHi1hZt1CstZGeteqJM3lAp.png new file mode 100644 index 0000000..e94fcc0 Binary files /dev/null and b/storage/app/photos/w8FFaLtNICK5pezFrfHi1hZt1CstZGeteqJM3lAp.png differ diff --git a/storage/app/photos/wEWMZel4Vb.webp b/storage/app/photos/wEWMZel4Vb.webp new file mode 100644 index 0000000..d0a05da Binary files /dev/null and b/storage/app/photos/wEWMZel4Vb.webp differ diff --git a/storage/app/photos/wJ336pD9Z4bYbUSgLSveuxYC4KoqliV9uGf6wHPW.png b/storage/app/photos/wJ336pD9Z4bYbUSgLSveuxYC4KoqliV9uGf6wHPW.png new file mode 100644 index 0000000..fdcd085 Binary files /dev/null and b/storage/app/photos/wJ336pD9Z4bYbUSgLSveuxYC4KoqliV9uGf6wHPW.png differ diff --git a/storage/app/photos/wbKJQ7THTT.webp b/storage/app/photos/wbKJQ7THTT.webp new file mode 100644 index 0000000..13dab85 Binary files /dev/null and b/storage/app/photos/wbKJQ7THTT.webp differ diff --git a/storage/app/photos/wf3kqawP9tkzC8vVlm3ynwjXtX6pERN8A24XBDRU.png b/storage/app/photos/wf3kqawP9tkzC8vVlm3ynwjXtX6pERN8A24XBDRU.png new file mode 100644 index 0000000..747c822 Binary files /dev/null and b/storage/app/photos/wf3kqawP9tkzC8vVlm3ynwjXtX6pERN8A24XBDRU.png differ diff --git a/storage/app/photos/wlK6NqHQ8vFrcotd2wlKoiAC2Z7Dkxhdwk2jbOt3.png b/storage/app/photos/wlK6NqHQ8vFrcotd2wlKoiAC2Z7Dkxhdwk2jbOt3.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/wlK6NqHQ8vFrcotd2wlKoiAC2Z7Dkxhdwk2jbOt3.png differ diff --git a/storage/app/photos/wqe67Gn9vL3EVklpmlkdOtRaaJTzff2w3b2wa4N9.png b/storage/app/photos/wqe67Gn9vL3EVklpmlkdOtRaaJTzff2w3b2wa4N9.png new file mode 100644 index 0000000..ff66253 Binary files /dev/null and b/storage/app/photos/wqe67Gn9vL3EVklpmlkdOtRaaJTzff2w3b2wa4N9.png differ diff --git a/storage/app/photos/x97OssnmjQ7RmVuNzhCC3SvRC9d0Zi34Y7cbMGBD.png b/storage/app/photos/x97OssnmjQ7RmVuNzhCC3SvRC9d0Zi34Y7cbMGBD.png new file mode 100644 index 0000000..69df8a4 Binary files /dev/null and b/storage/app/photos/x97OssnmjQ7RmVuNzhCC3SvRC9d0Zi34Y7cbMGBD.png differ diff --git a/storage/app/photos/xBeNarAAMnX1Hl9XxrAJeonwxEeeU7mbHPAnR7bw.png b/storage/app/photos/xBeNarAAMnX1Hl9XxrAJeonwxEeeU7mbHPAnR7bw.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/xBeNarAAMnX1Hl9XxrAJeonwxEeeU7mbHPAnR7bw.png differ diff --git a/storage/app/photos/xKkpiV48KJLfpLVpteE3lCJaS6xgmP7NPbczAVlw.jpg b/storage/app/photos/xKkpiV48KJLfpLVpteE3lCJaS6xgmP7NPbczAVlw.jpg new file mode 100644 index 0000000..3d73cb7 Binary files /dev/null and b/storage/app/photos/xKkpiV48KJLfpLVpteE3lCJaS6xgmP7NPbczAVlw.jpg differ diff --git a/storage/app/photos/xMl97eAEzf.webp b/storage/app/photos/xMl97eAEzf.webp new file mode 100644 index 0000000..5c6eb7c Binary files /dev/null and b/storage/app/photos/xMl97eAEzf.webp differ diff --git a/storage/app/photos/xUkUe3Z1GE.webp b/storage/app/photos/xUkUe3Z1GE.webp new file mode 100644 index 0000000..f19ba98 Binary files /dev/null and b/storage/app/photos/xUkUe3Z1GE.webp differ diff --git a/storage/app/photos/xXj3cRtrCwQLc8YUMDgrqOm9AlsQ20tNdQqN6iRa.png b/storage/app/photos/xXj3cRtrCwQLc8YUMDgrqOm9AlsQ20tNdQqN6iRa.png new file mode 100644 index 0000000..f1848e6 Binary files /dev/null and b/storage/app/photos/xXj3cRtrCwQLc8YUMDgrqOm9AlsQ20tNdQqN6iRa.png differ diff --git a/storage/app/photos/xdd7N4uG3JFer8ium5NHj0JO4eqw9QehemWTSO95.png b/storage/app/photos/xdd7N4uG3JFer8ium5NHj0JO4eqw9QehemWTSO95.png new file mode 100644 index 0000000..6424745 Binary files /dev/null and b/storage/app/photos/xdd7N4uG3JFer8ium5NHj0JO4eqw9QehemWTSO95.png differ diff --git a/storage/app/photos/xfd62x7Naz5q6pn5YC983CpN8TshBFlcW9Ca5NLk.png b/storage/app/photos/xfd62x7Naz5q6pn5YC983CpN8TshBFlcW9Ca5NLk.png new file mode 100644 index 0000000..a3e3606 Binary files /dev/null and b/storage/app/photos/xfd62x7Naz5q6pn5YC983CpN8TshBFlcW9Ca5NLk.png differ diff --git a/storage/app/photos/yB1SAi6rilD45urlbDX45Pe5Y98utQxIeJaURRlq.png b/storage/app/photos/yB1SAi6rilD45urlbDX45Pe5Y98utQxIeJaURRlq.png new file mode 100644 index 0000000..3ec0b08 Binary files /dev/null and b/storage/app/photos/yB1SAi6rilD45urlbDX45Pe5Y98utQxIeJaURRlq.png differ diff --git a/storage/app/photos/yUBgzoYRl7.webp b/storage/app/photos/yUBgzoYRl7.webp new file mode 100644 index 0000000..b645b69 Binary files /dev/null and b/storage/app/photos/yUBgzoYRl7.webp differ diff --git a/storage/app/photos/yeHnifs6pW.webp b/storage/app/photos/yeHnifs6pW.webp new file mode 100644 index 0000000..2f665ed Binary files /dev/null and b/storage/app/photos/yeHnifs6pW.webp differ diff --git a/storage/app/photos/ytHE547cNgYjboEWS7Gr3c51sf2IdIjAy0KXgtWW.png b/storage/app/photos/ytHE547cNgYjboEWS7Gr3c51sf2IdIjAy0KXgtWW.png new file mode 100644 index 0000000..978c971 Binary files /dev/null and b/storage/app/photos/ytHE547cNgYjboEWS7Gr3c51sf2IdIjAy0KXgtWW.png differ diff --git a/storage/app/photos/zGDkmnXi7nzkTVSYifnb4nOlSTsbJ3Sl5s2yaoGu.png b/storage/app/photos/zGDkmnXi7nzkTVSYifnb4nOlSTsbJ3Sl5s2yaoGu.png new file mode 100644 index 0000000..415be1c Binary files /dev/null and b/storage/app/photos/zGDkmnXi7nzkTVSYifnb4nOlSTsbJ3Sl5s2yaoGu.png differ diff --git a/storage/app/photos/zZ5Z2crlBwSOIWTPggGhvcQmm6mXs6G6ZXPTNdkf.jpg b/storage/app/photos/zZ5Z2crlBwSOIWTPggGhvcQmm6mXs6G6ZXPTNdkf.jpg new file mode 100644 index 0000000..da542d9 Binary files /dev/null and b/storage/app/photos/zZ5Z2crlBwSOIWTPggGhvcQmm6mXs6G6ZXPTNdkf.jpg differ diff --git a/storage/app/photos/ze7qC02gxVsY04lDvUvxZ0yDLyNHZsSb5KRBli5A.png b/storage/app/photos/ze7qC02gxVsY04lDvUvxZ0yDLyNHZsSb5KRBli5A.png new file mode 100644 index 0000000..1d87da9 Binary files /dev/null and b/storage/app/photos/ze7qC02gxVsY04lDvUvxZ0yDLyNHZsSb5KRBli5A.png differ diff --git a/storage/app/photos/zezGI9AqNxAWpRATQOQBfsBAfIoqbUk3HE2zcWGV.png b/storage/app/photos/zezGI9AqNxAWpRATQOQBfsBAfIoqbUk3HE2zcWGV.png new file mode 100644 index 0000000..d76b0a2 Binary files /dev/null and b/storage/app/photos/zezGI9AqNxAWpRATQOQBfsBAfIoqbUk3HE2zcWGV.png differ diff --git a/storage/app/photos/zlcDHDQX3Q.webp b/storage/app/photos/zlcDHDQX3Q.webp new file mode 100644 index 0000000..0c89a7e Binary files /dev/null and b/storage/app/photos/zlcDHDQX3Q.webp differ diff --git a/storage/app/photos/zq6kddzbAgkoo1C9cDRU8KDGuKVf2ehHPPppmgs6.jpg b/storage/app/photos/zq6kddzbAgkoo1C9cDRU8KDGuKVf2ehHPPppmgs6.jpg new file mode 100644 index 0000000..56100c0 Binary files /dev/null and b/storage/app/photos/zq6kddzbAgkoo1C9cDRU8KDGuKVf2ehHPPppmgs6.jpg differ diff --git a/storage/app/photos/zqvgSPlXPe.webp b/storage/app/photos/zqvgSPlXPe.webp new file mode 100644 index 0000000..dceb37a Binary files /dev/null and b/storage/app/photos/zqvgSPlXPe.webp differ diff --git a/storage/app/storage/Q4EuuZApU9.webp b/storage/app/storage/Q4EuuZApU9.webp new file mode 100644 index 0000000..dceb37a Binary files /dev/null and b/storage/app/storage/Q4EuuZApU9.webp differ diff --git a/storage/app/storage/RqBP0xGkHpAJaCkX85EHLDjnt3v8WDzCPsaUfL9N.png b/storage/app/storage/RqBP0xGkHpAJaCkX85EHLDjnt3v8WDzCPsaUfL9N.png new file mode 100644 index 0000000..cdb1e6d Binary files /dev/null and b/storage/app/storage/RqBP0xGkHpAJaCkX85EHLDjnt3v8WDzCPsaUfL9N.png differ diff --git a/storage/app/storage/mdmBiHcYIcGT0TjqSK3uUKDEDVYYrDaxzIPzXgmQ.png b/storage/app/storage/mdmBiHcYIcGT0TjqSK3uUKDEDVYYrDaxzIPzXgmQ.png new file mode 100644 index 0000000..9ddab79 Binary files /dev/null and b/storage/app/storage/mdmBiHcYIcGT0TjqSK3uUKDEDVYYrDaxzIPzXgmQ.png differ diff --git a/storage/app/storage/yoYg3f3LXM.webp b/storage/app/storage/yoYg3f3LXM.webp new file mode 100644 index 0000000..066c405 Binary files /dev/null and b/storage/app/storage/yoYg3f3LXM.webp differ diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..0c2a35a --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,23 @@ +const defaultTheme = require('tailwindcss/defaultTheme'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', + './storage/framework/views/*.php', + './resources/views/**/*.blade.php', + ], + + theme: { + extend: { + fontFamily: { + sans: ['Proxima Nova', ...defaultTheme.fontFamily.sans], + }, + }, + }, + + plugins: [require('@tailwindcss/forms'), + require('tailwindcss-plugins/pagination')({ + color: colors['teal-dark'], + }),], +}; diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100644 index 0000000..547152f --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/Feature/Auth/AuthenticationTest.php b/tests/Feature/Auth/AuthenticationTest.php new file mode 100644 index 0000000..075a4c2 --- /dev/null +++ b/tests/Feature/Auth/AuthenticationTest.php @@ -0,0 +1,45 @@ +get('/login'); + + $response->assertStatus(200); + } + + public function test_users_can_authenticate_using_the_login_screen() + { + $user = User::factory()->create(); + + $response = $this->post('/login', [ + 'email' => $user->email, + 'password' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(RouteServiceProvider::HOME); + } + + public function test_users_can_not_authenticate_with_invalid_password() + { + $user = User::factory()->create(); + + $this->post('/login', [ + 'email' => $user->email, + 'password' => 'wrong-password', + ]); + + $this->assertGuest(); + } +} diff --git a/tests/Feature/Auth/EmailVerificationTest.php b/tests/Feature/Auth/EmailVerificationTest.php new file mode 100644 index 0000000..e61810e --- /dev/null +++ b/tests/Feature/Auth/EmailVerificationTest.php @@ -0,0 +1,65 @@ +create([ + 'email_verified_at' => null, + ]); + + $response = $this->actingAs($user)->get('/verify-email'); + + $response->assertStatus(200); + } + + public function test_email_can_be_verified() + { + $user = User::factory()->create([ + 'email_verified_at' => null, + ]); + + Event::fake(); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1($user->email)] + ); + + $response = $this->actingAs($user)->get($verificationUrl); + + Event::assertDispatched(Verified::class); + $this->assertTrue($user->fresh()->hasVerifiedEmail()); + $response->assertRedirect(RouteServiceProvider::HOME.'?verified=1'); + } + + public function test_email_is_not_verified_with_invalid_hash() + { + $user = User::factory()->create([ + 'email_verified_at' => null, + ]); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1('wrong-email')] + ); + + $this->actingAs($user)->get($verificationUrl); + + $this->assertFalse($user->fresh()->hasVerifiedEmail()); + } +} diff --git a/tests/Feature/Auth/PasswordConfirmationTest.php b/tests/Feature/Auth/PasswordConfirmationTest.php new file mode 100644 index 0000000..d2072ff --- /dev/null +++ b/tests/Feature/Auth/PasswordConfirmationTest.php @@ -0,0 +1,44 @@ +create(); + + $response = $this->actingAs($user)->get('/confirm-password'); + + $response->assertStatus(200); + } + + public function test_password_can_be_confirmed() + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'password', + ]); + + $response->assertRedirect(); + $response->assertSessionHasNoErrors(); + } + + public function test_password_is_not_confirmed_with_invalid_password() + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'wrong-password', + ]); + + $response->assertSessionHasErrors(); + } +} diff --git a/tests/Feature/Auth/PasswordResetTest.php b/tests/Feature/Auth/PasswordResetTest.php new file mode 100644 index 0000000..b2cd77a --- /dev/null +++ b/tests/Feature/Auth/PasswordResetTest.php @@ -0,0 +1,71 @@ +get('/forgot-password'); + + $response->assertStatus(200); + } + + public function test_reset_password_link_can_be_requested() + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class); + } + + public function test_reset_password_screen_can_be_rendered() + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) { + $response = $this->get('/reset-password/'.$notification->token); + + $response->assertStatus(200); + + return true; + }); + } + + public function test_password_can_be_reset_with_valid_token() + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) { + $response = $this->post('/reset-password', [ + 'token' => $notification->token, + 'email' => $user->email, + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $response->assertSessionHasNoErrors(); + + return true; + }); + } +} diff --git a/tests/Feature/Auth/RegistrationTest.php b/tests/Feature/Auth/RegistrationTest.php new file mode 100644 index 0000000..317a827 --- /dev/null +++ b/tests/Feature/Auth/RegistrationTest.php @@ -0,0 +1,32 @@ +get('/register'); + + $response->assertStatus(200); + } + + public function test_new_users_can_register() + { + $response = $this->post('/register', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(RouteServiceProvider::HOME); + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..1eafba6 --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,21 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..2932d4a --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..89f26f5 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,14 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; + +export default defineConfig({ + plugins: [ + laravel({ + input: [ + 'resources/css/app.css', + 'resources/js/app.js', + ], + refresh: true, + }), + ], +});