diff --git a/.dockerignore b/.dockerignore index d339a28f..2be37254 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,4 @@ /.git /Dockerfile /data +\.env diff --git a/.env.docker b/.env.docker index 3cc14420..55b4bb46 100644 --- a/.env.docker +++ b/.env.docker @@ -2,21 +2,12 @@ APP_NAME="OpnForm" APP_ENV=local APP_KEY= APP_DEBUG=false -APP_LOG_LEVEL=debug APP_URL=http://localhost LOG_CHANNEL=errorlog LOG_LEVEL=debug -DB_CONNECTION=pgsql -DB_HOST=127.0.0.1 -DB_PORT=5432 -DB_DATABASE=postgres -DB_USERNAME=postgres -DB_PASSWORD=postgres - -FILESYSTEM_DRIVER=s3 -FILESYSTEM_DISK=s3 +FILESYSTEM_DRIVER=local BROADCAST_CONNECTION=log CACHE_STORE=redis @@ -24,10 +15,6 @@ QUEUE_CONNECTION=redis SESSION_DRIVER=file SESSION_LIFETIME=120 -REDIS_HOST=127.0.0.1 -REDIS_PASSWORD=null -REDIS_PORT=6379 - MAIL_MAILER=log MAIL_HOST= MAIL_PORT= @@ -57,3 +44,4 @@ MUX_WORKSPACE_ID= MUX_API_TOKEN= OPEN_AI_API_KEY= +SELF_HOSTED=true \ No newline at end of file diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index 9bf6e3fd..8922b4d6 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -11,16 +11,27 @@ jobs: runs-on: ubuntu-latest steps: - name: Get tag name - run: ( echo "TAG_NAME=${GITHUB_REF#refs/*/v}"; echo "DOCKER_REPO=${{secrets.DOCKER_REPO}}") >> $GITHUB_ENV + run: | + ( + echo "TAG_NAME=${GITHUB_REF#refs/*/v}"; + echo "DOCKER_UI_REPO=${{secrets.DOCKER_UI_REPO}}" + echo "DOCKER_API_REPO=${{secrets.DOCKER_API_REPO}}" + ) >> $GITHUB_ENV - name: Check out the repo uses: actions/checkout@v3 - name: Log in to Docker Hub run: docker login -u "${{ secrets.DOCKER_USERNAME }}" -p "${{ secrets.DOCKER_ACCESS_TOKEN }}" - - - name: Build docker image - run: docker build . -t $DOCKER_REPO:latest -t $DOCKER_REPO:$TAG_NAME - - - name: Push Docker image - run: docker push $DOCKER_REPO:latest && docker push $DOCKER_REPO:$TAG_NAME + + - name: Build docker api image + run: docker build -f docker/Dockerfile.api . -t $DOCKER_API_REPO:latest -t $DOCKER_API_REPO:$TAG_NAME + + - name: Build docker ui image + run: docker build -f docker/Dockerfile.client . -t $DOCKER_UI_REPO:latest -t $DOCKER_UI_REPO:$TAG_NAME + + - name: Push Docker api image + run: docker push $DOCKER_API_REPO:latest && docker push $DOCKER_API_REPO:$TAG_NAME + + - name: Push Docker ui image + run: docker push $DOCKER_UI_REPO:latest && docker push $DOCKER_UI_REPO:$TAG_NAME diff --git a/.gitignore b/.gitignore index 3fd19b8c..49ee0c7b 100644 --- a/.gitignore +++ b/.gitignore @@ -29,5 +29,5 @@ public/.DS_Store .env.production .env.staging _ide_helper.php - +docker-compose.override.yml /.make.* diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 21500eda..00000000 --- a/Dockerfile +++ /dev/null @@ -1,98 +0,0 @@ -ARG PHP_PACKAGES="php8.1 composer php8.1-common php8.1-pgsql php8.1-redis php8.1-mbstring\ - php8.1-simplexml php8.1-bcmath php8.1-gd php8.1-curl php8.1-zip\ - php8.1-imagick php8.1-bz2 php8.1-gmp php8.1-int php8.1-pcov php8.1-soap php8.1-xsl" - -FROM node:20-alpine AS javascript-builder -WORKDIR /app - -# It's best to add as few files as possible before running the build commands -# as they will be re-run everytime one of those files changes. -# -# It's possible to run npm install with only the package.json and package-lock.json file. - -ADD client/package.json client/package-lock.json ./ -RUN npm install - -ADD client /app/ -RUN cp .env.docker .env -RUN npm run build - -# syntax=docker/dockerfile:1.3-labs -FROM --platform=linux/amd64 ubuntu:23.04 AS php-dependency-installer - -ARG PHP_PACKAGES - -RUN apt-get update \ - && apt-get install -y $PHP_PACKAGES composer - -WORKDIR /app -ADD composer.json composer.lock artisan ./ - -# NOTE: The project would build more reliably if all php files were added before running -# composer install. This would though introduce a dependency which would cause every -# dependency to be re-installed each time any php file is edited. It may be necessary in -# future to remove this 'optimisation' by moving the `RUN composer install` line after all -# the following ADD commands. - -# Running artisan requires the full php app to be installed so we need to remove the -# post-autoload command from the composer file if we want to run composer without -# adding a dependency to all the php files. -RUN sed 's_@php artisan package:discover_/bin/true_;' -i composer.json -ADD app/helpers.php /app/app/helpers.php -RUN composer install --ignore-platform-req=php - -ADD app /app/app -ADD bootstrap /app/bootstrap -ADD config /app/config -ADD database /app/database -ADD public public -ADD routes routes -ADD tests tests - -# Manually run the command we deleted from composer.json earlier -RUN php artisan package:discover --ansi - - -FROM --platform=linux/amd64 ubuntu:23.04 - -# supervisord is a process manager which will be responsible for managing the -# various server processes. These are configured in docker/supervisord.conf -CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] - -WORKDIR /app - -ARG PHP_PACKAGES - -RUN apt-get update \ - && apt-get install -y \ - supervisor nginx sudo postgresql-15 redis\ - $PHP_PACKAGES php8.1-fpm wget\ - && apt-get clean - -RUN useradd nuxt && mkdir ~nuxt && chown nuxt ~nuxt -RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.39.3/install.sh | sudo -u nuxt bash -RUN sudo -u nuxt bash -c ". ~nuxt/.nvm/nvm.sh && nvm install --no-progress 20" - -ADD docker/postgres-wrapper.sh docker/php-fpm-wrapper.sh docker/redis-wrapper.sh docker/nuxt-wrapper.sh docker/generate-api-secret.sh /usr/local/bin/ -ADD docker/php-fpm.conf /etc/php/8.1/fpm/pool.d/ -ADD docker/nginx.conf /etc/nginx/sites-enabled/default -ADD docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf - -ADD . . -ADD .env.docker .env -ADD client/.env.docker client/.env - -COPY --from=javascript-builder /app/.output/ ./nuxt/ -RUN cp -r nuxt/public . -COPY --from=php-dependency-installer /app/vendor/ ./vendor/ - -RUN chmod a+x /usr/local/bin/*.sh /app/artisan \ - && ln -s /app/artisan /usr/local/bin/artisan \ - && useradd opnform \ - && echo "daemon off;" >> /etc/nginx/nginx.conf\ - && echo "daemonize no" >> /etc/redis/redis.conf\ - && echo "appendonly yes" >> /etc/redis/redis.conf\ - && echo "dir /persist/redis/data" >> /etc/redis/redis.conf - - -EXPOSE 80 diff --git a/README.md b/README.md index a763bda0..1c66d77b 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ Github Stars Commits per month - - + + License Report a bug @@ -66,94 +66,90 @@ It takes 1 minute to try out the builder for free. You'll have high availability ## Installation +### Docker Installation ๐Ÿณ -### Docker installation ๐Ÿณ +OpnForm can be easily set up using Docker. Pre-built images are available on Docker Hub, which is the recommended method for most users. -This can be built and run locally but is also hosted publicly on docker hub at `jhumanj/opnform` and is generally best run directly from there. +#### Prerequisites +- Docker +- Docker Compose -#### Running from docker hub +#### Quick Start -``` -docker run --name opnform -v $PWD/my-opnform-data:/persist -p 80:80 jhumanj/opnform -``` +1. Clone the repository: + ``` + git clone https://github.com/JhumanJ/OpnForm.git + cd OpnForm + ``` -You should now be able to access the application by visiting http://localhost in a web browser. +2. Set up environment files: + ``` + cp .env.docker .env + cp client/.env.docker client/.env + ``` -> ๐Ÿ‘€ **Server Deployment**: If you are deploying OpnForm on a server (not locally), then you will [need to use 2 .env files](https://github.com/JhumanJ/opnform?tab=readme-ov-file#using-custom-env-files) to configure the app URLs (`APP_URL` in `.env` and both `NUXT_PUBLIC_APP_URL` & `NUXT_PUBLIC_API_BASE` in `client/.env`). +3. Start the application: + ``` + docker-compose up -d + ``` +4. Access OpnForm at http://localhost -The `-v` argument creates a local directory called `my-opnform-data` which will store your database and files so that your work is not lost when you restart the container. +> ๐ŸŒ **Server Deployment Note**: When deploying to a server, configure the app URLs in both `.env` and `client/.env` files. Set `APP_URL` in `.env`, and both `NUXT_PUBLIC_APP_URL` & `NUXT_PUBLIC_API_BASE` in `client/.env`. -The `--name` argument names the running container so that you can refer back to it later, with e.g. `docker stop opnform`. You can use any name you'd like. +#### Customization +- **Environment Variables**: Modify `.env` and `client/.env` files to customize your setup. For example, to enable email features, configure a [supported mail driver](https://laravel.com/docs/11.x/mail) in the `.env` file. -#### Using custom .env files +#### Upgrading -If you have custom env file you can use them like so: +1. Check the upgrade instructions for your target version in the documentation. +2. Update your `docker-compose.yml` file if necessary. +3. Apply changes: + ``` + docker-compose up -d + ``` -Custom Laravel .env file: -``` -docker run --name opnform -v $PWD/custom-laravel-env-file.env:/app/.env -v $PWD/my-opnform-data:/persist -p 80:80 jhumanj/opnform -``` +### Initial Login -Custom Nuxt .env file: -``` -docker run --name opnform -v $PWD/custom-nuxt-env-file.env:/app/client/.env -v $PWD/my-opnform-data:/persist -p 80:80 jhumanj/opnform -``` +After installation, use these credentials to access the admin panel: +- Email: `admin@opnform.com` +- Password: `password` -This would load load in the env file located at `my-custom-env-file.env`, note that if you are creating a .env file for use like this it's best to start from the `.env.docker` example file as there are slightly different defaults for the dockerized setup. +โš ๏ธ Change these credentials immediately after your first login. -#### Using a custom HTTP port +Note: Public registration is disabled in the self-hosted version. Use the admin account to invite additional users. -To run on port 8080 +### Building from Source -``` -docker run --name opnform -v $PWD/my-opnform-data:/persist -p 8080:80 jhumanj/opnform -``` +For development or customization, you can build the Docker images locally: -#### Building a custom docker image +1. Build the images: + ``` + docker build -t opnform-ui:local -f docker/Dockerfile.client . + docker build -t opnform-api:local -f docker/Dockerfile.api . + ``` -To build a custom docker image from your local source code use this command from the root of the source repository: +2. Create a docker-compose override file: + ``` + cp docker-compose.override.yml.example docker-compose.override.yml + ``` -``` -docker build . -t my-docker-image-name -``` + Edit the `docker-compose.override.yml` file to use your locally built images: + ```yaml + services: + api: + image: opnform-api:local + ui: + image: opnform-ui:local + ``` -This should create a new docker image tagged `my-docker-image-name` which can be run as follows: - -``` -docker run --name opnform -v $PWD/my-opnform-data:/persist -p 80:80 my-docker-image-name - -``` - -#### Upgrading docker installations - -**Please consult the upgrade instructions for the latest opnform version**, e.g. if upgrading from v1 to v2 please check the v2 instructions as the process may change in future releases. - -Normal upgrade procedure would be to stop the running container, back up your data directory (you will need this backup if you want to rollback to the old version) and then start a container running the new image with the same arguments. - -e.g. if you're running from a specific opnform version with - -```docker run --name opnform -v $PWD/my-opnform-data:/persist -p 80:80 jhumanj/opnform:1.0.0``` - -You could run: - -``` -# stop the running container -docker stop opnform -# backup the data directory -cp -r my-opnform-data my-opnform-backup -# start the new container -docker run --name opnform-2 -v $PWD/my-opnform-data:/persist -p 80:80 jhumanj/opnform:2.0.0 -``` - -Then if everything is running smoothly you can delete the old container with: -``` -docker rm opnform -``` - -If you haven't specified a version e.g. if you are using the image `jhumanj/opnform` or `jhumanj/opnform:latest` you will need to run `docker pull jhumanj/opnform` or `docker pull jhumanj/opnform:latest` before starting the new container. +3. Start the application: + ``` + docker-compose up -d + ``` +This method allows you to make changes to the source code and rebuild the images as needed. ### Using Laravel Valet This section explains how to get started locally with the project. It's most likely relevant if you're trying to work on the project. diff --git a/app/Console/Commands/InitProjectCommand.php b/app/Console/Commands/InitProjectCommand.php new file mode 100644 index 00000000..3f6f55d0 --- /dev/null +++ b/app/Console/Commands/InitProjectCommand.php @@ -0,0 +1,48 @@ +error('This command can only be run in self-hosted mode.'); + return; + } + + // Check if there are any existing users or if the ID increment is not at 0 + if (User::max('id') !== null) { + $this->error('Users already exist in the database or the User table is not empty. Aborting initialization.'); + return; + } + + User::create([ + 'name' => 'Admin', + 'email' => 'admin@opnform.com', + 'password' => bcrypt('password'), + ]); + $this->info('Admin user created with default credentials: admin@opnform.com / password'); + return 0; + } +} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index b9b38fae..65b90543 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -98,7 +98,7 @@ class RegisterController extends Controller private function checkRegistrationAllowed(array $data) { - if (config('app.self_hosted') && !array_key_exists('invite_token', $data)) { + if (config('app.self_hosted') && !array_key_exists('invite_token', $data) && (app()->environment() !== 'testing')) { response()->json(['message' => 'Registration is not allowed in self host mode'], 400)->throwResponse(); } } diff --git a/app/Http/Controllers/Forms/PublicFormController.php b/app/Http/Controllers/Forms/PublicFormController.php index 479c0ca8..e1c27fc6 100644 --- a/app/Http/Controllers/Forms/PublicFormController.php +++ b/app/Http/Controllers/Forms/PublicFormController.php @@ -75,7 +75,13 @@ class PublicFormController extends Controller ]); } - return redirect()->to(Storage::temporaryUrl($path, now()->addMinutes(5))); + $internal_url = Storage::temporaryUrl($path, now()->addMinutes(5)); + + foreach(config('filesystems.disks.s3.temporary_url_rewrites') as $from => $to) { + $internal_url = str_replace($from, $to, $internal_url); + } + + return redirect()->to($internal_url); } public function answer(AnswerFormRequest $request) diff --git a/app/Http/Controllers/Settings/ProfileController.php b/app/Http/Controllers/Settings/ProfileController.php index 368fd767..e562c704 100644 --- a/app/Http/Controllers/Settings/ProfileController.php +++ b/app/Http/Controllers/Settings/ProfileController.php @@ -3,7 +3,9 @@ namespace App\Http\Controllers\Settings; use App\Http\Controllers\Controller; +use App\Models\Workspace; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Cache; class ProfileController extends Controller { @@ -18,7 +20,7 @@ class ProfileController extends Controller $this->validate($request, [ 'name' => 'required', - 'email' => 'required|email|unique:users,email,'.$user->id, + 'email' => 'required|email|unique:users,email,' . $user->id, ]); return tap($user)->update([ @@ -26,4 +28,43 @@ class ProfileController extends Controller 'email' => strtolower($request->email), ]); } + + // For self-hosted mode, only admin can update their credentials + public function updateAdminCredentials(Request $request) + { + $request->validate([ + 'email' => 'required|email|not_in:admin@opnform.com', + 'password' => 'required|min:6|confirmed|not_in:password', + ], [ + 'email.not_in' => "Please provide email address other than 'admin@opnform.com'", + 'password.not_in' => "Please another password other than 'password'." + ]); + + ray('in', $request->password); + $user = $request->user(); + $user->update([ + 'email' => $request->email, + 'password' => bcrypt($request->password), + ]); + ray($user); + + Cache::forget('initial_user_setup_complete'); + Cache::forget('max_user_id'); + + $workspace = Workspace::create([ + 'name' => 'My Workspace', + 'icon' => '๐Ÿงช', + ]); + + $user->workspaces()->sync([ + $workspace->id => [ + 'role' => 'admin', + ], + ], false); + + return $this->success([ + 'message' => 'Congratulations, your account credentials have been updated successfully.', + 'user' => $user, + ]); + } } diff --git a/app/Http/Controllers/TemplateController.php b/app/Http/Controllers/TemplateController.php index 5cad51b1..4389703c 100644 --- a/app/Http/Controllers/TemplateController.php +++ b/app/Http/Controllers/TemplateController.php @@ -15,24 +15,26 @@ class TemplateController extends Controller $limit = (int) $request->get('limit', 0); $onlyMy = (bool) $request->get('onlymy', false); - $templates = Template::when(Auth::check(), function ($query) use ($onlyMy) { + $query = Template::query(); + + if (Auth::check()) { if ($onlyMy) { $query->where('creator_id', Auth::id()); } else { - $query->where(function ($query) { - $query->where('publicly_listed', true) - ->orWhere('creator_id', Auth::id()); + $query->where(function ($q) { + $q->where('publicly_listed', true) + ->orWhere('creator_id', Auth::id()); }); } - }) - ->when(! Auth::check(), function ($query) { - $query->where('publicly_listed', true); - }) - ->when($limit > 0, function ($query) use ($limit) { - $query->limit($limit); - }) - ->orderByDesc('created_at') - ->get(); + } else { + $query->where('publicly_listed', true); + } + + if ($limit > 0) { + $query->limit($limit); + } + + $templates = $query->orderByDesc('created_at')->get(); return FormTemplateResource::collection($templates); } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 449bab65..167493d6 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -10,6 +10,7 @@ use App\Http\Middleware\IsAdmin; use App\Http\Middleware\IsModerator; use App\Http\Middleware\IsNotSubscribed; use App\Http\Middleware\IsSubscribed; +use App\Http\Middleware\SelfHostedCredentialsMiddleware; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel @@ -60,6 +61,7 @@ class Kernel extends HttpKernel \Illuminate\Routing\Middleware\SubstituteBindings::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Session\Middleware\StartSession::class, + SelfHostedCredentialsMiddleware::class, ImpersonationMiddleware::class, ], ]; diff --git a/app/Http/Middleware/SelfHostedCredentialsMiddleware.php b/app/Http/Middleware/SelfHostedCredentialsMiddleware.php new file mode 100644 index 00000000..49f8ffc9 --- /dev/null +++ b/app/Http/Middleware/SelfHostedCredentialsMiddleware.php @@ -0,0 +1,66 @@ +environment('testing')) { + return $next($request); + } + + if (in_array($request->route()->getName(), self::ALLOWED_ROUTES)) { + return $next($request); + } + + if ( + config('app.self_hosted') && + $request->user() && + !$this->isInitialSetupComplete() + ) { + return response()->json([ + 'message' => 'You must change your credentials when in self-hosted mode', + 'type' => 'error', + ], Response::HTTP_FORBIDDEN); + } + + return $next($request); + } + + private function isInitialSetupComplete(): bool + { + return (bool) Cache::remember('initial_user_setup_complete', 60 * 60, function () { + $maxUserId = $this->getMaxUserId(); + if ($maxUserId === 0) { + return false; + } + return !User::where('email', 'admin@opnform.com')->exists(); + }); + } + + private function getMaxUserId(): int + { + return (int) Cache::remember('max_user_id', 60 * 60, function () { + return User::max('id') ?? 0; + }); + } +} diff --git a/client/.dockerignore b/client/.dockerignore new file mode 100644 index 00000000..6169efbd --- /dev/null +++ b/client/.dockerignore @@ -0,0 +1,2 @@ +/Dockerfile +/.dockerignore diff --git a/client/components/global/Navbar.vue b/client/components/global/Navbar.vue index 64218fa6..71bbf413 100644 --- a/client/components/global/Navbar.vue +++ b/client/components/global/Navbar.vue @@ -32,7 +32,7 @@ > Templates - \ No newline at end of file diff --git a/client/stores/app.js b/client/stores/app.js index 37016c44..93af4470 100644 --- a/client/stores/app.js +++ b/client/stores/app.js @@ -20,6 +20,13 @@ export const useAppStore = defineStore("app", { _cut: null, }, }), + getters: { + paidPlansEnabled: () => useRuntimeConfig().public.paidPlansEnabled, + featureBaseEnabled: () => useRuntimeConfig().public.featureBaseOrganization !== null, + selfHosted: () => useRuntimeConfig().public.selfHosted, + aiFeaturesEnabled: () => useRuntimeConfig().public.aiFeaturesEnabled, + crispEnabled: () => useRuntimeConfig().public.crispWebsiteId !== null && useRuntimeConfig().public.crispWebsiteId !== '', + }, actions: { hideNavbar() { this.navbarHidden = true diff --git a/composer.lock b/composer.lock index 1204c173..329b672f 100644 --- a/composer.lock +++ b/composer.lock @@ -463,16 +463,16 @@ }, { "name": "amphp/pipeline", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/amphp/pipeline.git", - "reference": "f1c2ce35d27ae86ead018adb803eccca7421dd9b" + "reference": "66c095673aa5b6e689e63b52d19e577459129ab3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/pipeline/zipball/f1c2ce35d27ae86ead018adb803eccca7421dd9b", - "reference": "f1c2ce35d27ae86ead018adb803eccca7421dd9b", + "url": "https://api.github.com/repos/amphp/pipeline/zipball/66c095673aa5b6e689e63b52d19e577459129ab3", + "reference": "66c095673aa5b6e689e63b52d19e577459129ab3", "shasum": "" }, "require": { @@ -518,7 +518,7 @@ ], "support": { "issues": "https://github.com/amphp/pipeline/issues", - "source": "https://github.com/amphp/pipeline/tree/v1.2.0" + "source": "https://github.com/amphp/pipeline/tree/v1.2.1" }, "funding": [ { @@ -526,7 +526,7 @@ "type": "github" } ], - "time": "2024-03-10T14:48:16+00:00" + "time": "2024-07-04T00:56:47+00:00" }, { "name": "amphp/process", @@ -867,16 +867,16 @@ }, { "name": "aws/aws-crt-php", - "version": "v1.2.5", + "version": "v1.2.6", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b" + "reference": "a63485b65b6b3367039306496d49737cf1995408" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", - "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/a63485b65b6b3367039306496d49737cf1995408", + "reference": "a63485b65b6b3367039306496d49737cf1995408", "shasum": "" }, "require": { @@ -915,22 +915,22 @@ ], "support": { "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.5" + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.6" }, - "time": "2024-04-19T21:30:56+00:00" + "time": "2024-06-13T17:21:28+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.314.3", + "version": "3.317.1", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "c9e8a31cfa07f47b7ab9ecc741845a3a9d50fc61" + "reference": "dc1e3031c2721a25beb2e8fbb175b576e3d60ab9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c9e8a31cfa07f47b7ab9ecc741845a3a9d50fc61", - "reference": "c9e8a31cfa07f47b7ab9ecc741845a3a9d50fc61", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/dc1e3031c2721a25beb2e8fbb175b576e3d60ab9", + "reference": "dc1e3031c2721a25beb2e8fbb175b576e3d60ab9", "shasum": "" }, "require": { @@ -1010,9 +1010,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.314.3" + "source": "https://github.com/aws/aws-sdk-php/tree/3.317.1" }, - "time": "2024-06-17T18:13:22+00:00" + "time": "2024-08-02T18:09:42+00:00" }, { "name": "brick/math", @@ -1145,16 +1145,16 @@ }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", "shasum": "" }, "require": { @@ -1206,7 +1206,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.2" }, "funding": [ { @@ -1222,7 +1222,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-07-12T11:35:52+00:00" }, { "name": "daverandom/libdns", @@ -1270,16 +1270,16 @@ }, { "name": "dflydev/dot-access-data", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", "shasum": "" }, "require": { @@ -1339,22 +1339,22 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" }, - "time": "2022-10-27T11:44:00+00:00" + "time": "2024-07-08T12:26:09+00:00" }, { "name": "doctrine/dbal", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "8edbce73bc1aa2251ba8c754fc440f8e02c661bc" + "reference": "50fda19f80724b55ff770bb4ff352407008e63c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/8edbce73bc1aa2251ba8c754fc440f8e02c661bc", - "reference": "8edbce73bc1aa2251ba8c754fc440f8e02c661bc", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/50fda19f80724b55ff770bb4ff352407008e63c5", + "reference": "50fda19f80724b55ff770bb4ff352407008e63c5", "shasum": "" }, "require": { @@ -1367,13 +1367,13 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "1.11.1", + "phpstan/phpstan": "1.11.5", "phpstan/phpstan-phpunit": "1.4.0", "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "10.5.20", + "phpunit/phpunit": "10.5.22", "psalm/plugin-phpunit": "0.19.0", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.9.2", + "squizlabs/php_codesniffer": "3.10.1", "symfony/cache": "^6.3.8|^7.0", "symfony/console": "^5.4|^6.3|^7.0", "vimeo/psalm": "5.24.0" @@ -1433,7 +1433,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.0.3" + "source": "https://github.com/doctrine/dbal/tree/4.0.4" }, "funding": [ { @@ -1449,7 +1449,7 @@ "type": "tidelift" } ], - "time": "2024-06-12T06:58:42+00:00" + "time": "2024-06-19T11:57:23+00:00" }, { "name": "doctrine/deprecations", @@ -1991,16 +1991,16 @@ }, { "name": "giggsey/libphonenumber-for-php", - "version": "8.13.39", + "version": "8.13.42", "source": { "type": "git", "url": "https://github.com/giggsey/libphonenumber-for-php.git", - "reference": "5a36692616dba1ec4a24217f248021b1ec9cdade" + "reference": "b7ee848bbd1958ff7464522d5c6e3688cca2a125" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/5a36692616dba1ec4a24217f248021b1ec9cdade", - "reference": "5a36692616dba1ec4a24217f248021b1ec9cdade", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/b7ee848bbd1958ff7464522d5c6e3688cca2a125", + "reference": "b7ee848bbd1958ff7464522d5c6e3688cca2a125", "shasum": "" }, "require": { @@ -2062,7 +2062,7 @@ "issues": "https://github.com/giggsey/libphonenumber-for-php/issues", "source": "https://github.com/giggsey/libphonenumber-for-php" }, - "time": "2024-06-14T12:43:12+00:00" + "time": "2024-07-29T07:19:22+00:00" }, { "name": "giggsey/locale", @@ -2120,34 +2120,34 @@ }, { "name": "google/apiclient", - "version": "v2.16.0", + "version": "v2.17.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client.git", - "reference": "017400f609c1fb71ab5ad824c50eabd4c3eaf779" + "reference": "b1f63d72c44307ec8ef7bf18f1012de35d8944ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/017400f609c1fb71ab5ad824c50eabd4c3eaf779", - "reference": "017400f609c1fb71ab5ad824c50eabd4c3eaf779", + "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/b1f63d72c44307ec8ef7bf18f1012de35d8944ed", + "reference": "b1f63d72c44307ec8ef7bf18f1012de35d8944ed", "shasum": "" }, "require": { - "firebase/php-jwt": "~6.0", + "firebase/php-jwt": "^6.0", "google/apiclient-services": "~0.350", "google/auth": "^1.37", - "guzzlehttp/guzzle": "^6.5.8||^7.4.5", - "guzzlehttp/psr7": "^1.9.1||^2.2.1", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.6", "monolog/monolog": "^2.9||^3.0", - "php": "^7.4|^8.0", + "php": "^8.0", "phpseclib/phpseclib": "^3.0.36" }, "require-dev": { "cache/filesystem-adapter": "^1.1", "composer/composer": "^1.10.23", "phpcompatibility/php-compatibility": "^9.2", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", + "phpspec/prophecy-phpunit": "^2.1", + "phpunit/phpunit": "^9.6", "squizlabs/php_codesniffer": "^3.8", "symfony/css-selector": "~2.1", "symfony/dom-crawler": "~2.1" @@ -2183,22 +2183,22 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client/issues", - "source": "https://github.com/googleapis/google-api-php-client/tree/v2.16.0" + "source": "https://github.com/googleapis/google-api-php-client/tree/v2.17.0" }, - "time": "2024-04-24T00:59:47+00:00" + "time": "2024-07-10T14:57:54+00:00" }, { "name": "google/apiclient-services", - "version": "v0.360.0", + "version": "v0.366.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "e48813050e660c7dcbe48cb6556461efe6381a54" + "reference": "edc08087aa3ca63d3b74f24d59f1d2caab39b5d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/e48813050e660c7dcbe48cb6556461efe6381a54", - "reference": "e48813050e660c7dcbe48cb6556461efe6381a54", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/edc08087aa3ca63d3b74f24d59f1d2caab39b5d9", + "reference": "edc08087aa3ca63d3b74f24d59f1d2caab39b5d9", "shasum": "" }, "require": { @@ -2227,22 +2227,22 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.360.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.366.0" }, - "time": "2024-06-17T01:06:20+00:00" + "time": "2024-07-11T01:08:44+00:00" }, { "name": "google/auth", - "version": "v1.40.0", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "bff9f2d01677e71a98394b5ac981b99523df5178" + "reference": "1043ea18fe7f5dfbf5b208ce3ee6d6b6ab8cb038" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/bff9f2d01677e71a98394b5ac981b99523df5178", - "reference": "bff9f2d01677e71a98394b5ac981b99523df5178", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/1043ea18fe7f5dfbf5b208ce3ee6d6b6ab8cb038", + "reference": "1043ea18fe7f5dfbf5b208ce3ee6d6b6ab8cb038", "shasum": "" }, "require": { @@ -2287,9 +2287,9 @@ "support": { "docs": "https://googleapis.github.io/google-auth-library-php/main/", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.40.0" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.41.0" }, - "time": "2024-05-31T19:16:15+00:00" + "time": "2024-07-10T15:21:07+00:00" }, { "name": "graham-campbell/manager", @@ -2363,24 +2363,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.2", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2" + "phpoption/phpoption": "^1.9.3" }, "require-dev": { - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "autoload": { @@ -2409,7 +2409,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" }, "funding": [ { @@ -2421,26 +2421,26 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:16:48+00:00" + "time": "2024-07-20T21:45:45+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.8.1", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -2451,9 +2451,9 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -2531,7 +2531,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -2547,20 +2547,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", "shasum": "" }, "require": { @@ -2568,7 +2568,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -2614,7 +2614,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.2" + "source": "https://github.com/guzzle/promises/tree/2.0.3" }, "funding": [ { @@ -2630,20 +2630,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:19:20+00:00" + "time": "2024-07-18T10:29:17+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -2658,8 +2658,8 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -2730,7 +2730,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -2746,7 +2746,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "guzzlehttp/uri-template", @@ -3072,16 +3072,16 @@ }, { "name": "laravel/cashier", - "version": "v15.3.2", + "version": "v15.4.1", "source": { "type": "git", "url": "https://github.com/laravel/cashier-stripe.git", - "reference": "f468fb187b2229a0f1b7d20e2a619369eb4a36e7" + "reference": "4fee4a7716a465ff9d96cc17f0bf66a98953d25f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/cashier-stripe/zipball/f468fb187b2229a0f1b7d20e2a619369eb4a36e7", - "reference": "f468fb187b2229a0f1b7d20e2a619369eb4a36e7", + "url": "https://api.github.com/repos/laravel/cashier-stripe/zipball/4fee4a7716a465ff9d96cc17f0bf66a98953d25f", + "reference": "4fee4a7716a465ff9d96cc17f0bf66a98953d25f", "shasum": "" }, "require": { @@ -3156,20 +3156,20 @@ "issues": "https://github.com/laravel/cashier/issues", "source": "https://github.com/laravel/cashier" }, - "time": "2024-04-12T09:45:48+00:00" + "time": "2024-07-09T15:42:33+00:00" }, { "name": "laravel/framework", - "version": "v11.10.0", + "version": "v11.19.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "99b4255194912044b75ab72329f8c19e6345720e" + "reference": "5e103d499e9ee5bcfc184412d034c4e516b87085" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/99b4255194912044b75ab72329f8c19e6345720e", - "reference": "99b4255194912044b75ab72329f8c19e6345720e", + "url": "https://api.github.com/repos/laravel/framework/zipball/5e103d499e9ee5bcfc184412d034c4e516b87085", + "reference": "5e103d499e9ee5bcfc184412d034c4e516b87085", "shasum": "" }, "require": { @@ -3222,6 +3222,7 @@ }, "provide": { "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { @@ -3272,9 +3273,9 @@ "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.6", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.0.15", + "orchestra/testbench-core": "^9.1.5", "pda/pheanstalk": "^5.0", - "phpstan/phpstan": "^1.4.7", + "phpstan/phpstan": "^1.11.5", "phpunit/phpunit": "^10.5|^11.0", "predis/predis": "^2.0.2", "resend/resend-php": "^0.10.0", @@ -3361,20 +3362,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-06-04T13:45:55+00:00" + "time": "2024-07-30T15:22:41+00:00" }, { "name": "laravel/horizon", - "version": "v5.24.5", + "version": "v5.27.0", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "3c359e3a9ebd3e3be012a15eedf2d64ef8b82540" + "reference": "8830039251591d1af353f571b40fe0c774dfda20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/3c359e3a9ebd3e3be012a15eedf2d64ef8b82540", - "reference": "3c359e3a9ebd3e3be012a15eedf2d64ef8b82540", + "url": "https://api.github.com/repos/laravel/horizon/zipball/8830039251591d1af353f571b40fe0c774dfda20", + "reference": "8830039251591d1af353f571b40fe0c774dfda20", "shasum": "" }, "require": { @@ -3438,22 +3439,22 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.24.5" + "source": "https://github.com/laravel/horizon/tree/v5.27.0" }, - "time": "2024-05-31T16:18:41+00:00" + "time": "2024-07-26T05:41:51+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.23", + "version": "v0.1.24", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "9bc4df7c699b0452c6b815e64a2d84b6d7f99400" + "reference": "409b0b4305273472f3754826e68f4edbd0150149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/9bc4df7c699b0452c6b815e64a2d84b6d7f99400", - "reference": "9bc4df7c699b0452c6b815e64a2d84b6d7f99400", + "url": "https://api.github.com/repos/laravel/prompts/zipball/409b0b4305273472f3754826e68f4edbd0150149", + "reference": "409b0b4305273472f3754826e68f4edbd0150149", "shasum": "" }, "require": { @@ -3496,9 +3497,9 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.23" + "source": "https://github.com/laravel/prompts/tree/v0.1.24" }, - "time": "2024-05-27T13:53:20+00:00" + "time": "2024-06-17T13:58:22+00:00" }, { "name": "laravel/serializable-closure", @@ -3562,16 +3563,16 @@ }, { "name": "laravel/socialite", - "version": "v5.14.0", + "version": "v5.15.1", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "c7b0193a3753a29aff8ce80aa2f511917e6ed68a" + "reference": "cc02625f0bd1f95dc3688eb041cce0f1e709d029" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/c7b0193a3753a29aff8ce80aa2f511917e6ed68a", - "reference": "c7b0193a3753a29aff8ce80aa2f511917e6ed68a", + "url": "https://api.github.com/repos/laravel/socialite/zipball/cc02625f0bd1f95dc3688eb041cce0f1e709d029", + "reference": "cc02625f0bd1f95dc3688eb041cce0f1e709d029", "shasum": "" }, "require": { @@ -3630,7 +3631,7 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2024-05-03T20:31:38+00:00" + "time": "2024-06-28T20:09:34+00:00" }, { "name": "laravel/tinker", @@ -4049,16 +4050,16 @@ }, { "name": "league/commonmark", - "version": "2.4.2", + "version": "2.5.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" + "reference": "ac815920de0eff6de947eac0a6a94e5ed0fb147c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", - "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/ac815920de0eff6de947eac0a6a94e5ed0fb147c", + "reference": "ac815920de0eff6de947eac0a6a94e5ed0fb147c", "shasum": "" }, "require": { @@ -4071,8 +4072,8 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.3", - "commonmark/commonmark.js": "0.30.0", + "commonmark/cmark": "0.31.0", + "commonmark/commonmark.js": "0.31.0", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", "erusev/parsedown": "^1.0", @@ -4094,7 +4095,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "2.6-dev" } }, "autoload": { @@ -4151,7 +4152,7 @@ "type": "tidelift" } ], - "time": "2024-02-02T11:59:32+00:00" + "time": "2024-07-24T12:52:09+00:00" }, { "name": "league/config", @@ -5154,16 +5155,16 @@ }, { "name": "monolog/monolog", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654" + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", - "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", "shasum": "" }, "require": { @@ -5239,7 +5240,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.6.0" + "source": "https://github.com/Seldaek/monolog/tree/3.7.0" }, "funding": [ { @@ -5251,7 +5252,7 @@ "type": "tidelift" } ], - "time": "2024-04-12T21:02:21+00:00" + "time": "2024-06-28T09:40:51+00:00" }, { "name": "mtdowling/jmespath.php", @@ -5321,16 +5322,16 @@ }, { "name": "nesbot/carbon", - "version": "3.5.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "415782b7e48223342f1a616c16c45a95b15b2318" + "reference": "cb4374784c87d0a0294e8513a52eb63c0aff3139" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/415782b7e48223342f1a616c16c45a95b15b2318", - "reference": "415782b7e48223342f1a616c16c45a95b15b2318", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cb4374784c87d0a0294e8513a52eb63c0aff3139", + "reference": "cb4374784c87d0a0294e8513a52eb63c0aff3139", "shasum": "" }, "require": { @@ -5423,7 +5424,7 @@ "type": "tidelift" } ], - "time": "2024-06-03T17:25:54+00:00" + "time": "2024-07-16T22:29:20+00:00" }, { "name": "nette/schema", @@ -5629,16 +5630,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.0.2", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", "shasum": "" }, "require": { @@ -5649,7 +5650,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -5681,9 +5682,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" }, - "time": "2024-03-05T20:51:40+00:00" + "time": "2024-07-01T20:03:41+00:00" }, { "name": "nunomaduro/termwind", @@ -6413,16 +6414,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.2", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { @@ -6430,13 +6431,13 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "1.9-dev" @@ -6472,7 +6473,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, "funding": [ { @@ -6484,20 +6485,20 @@ "type": "tidelift" } ], - "time": "2023-11-12T21:59:55+00:00" + "time": "2024-07-20T21:41:07+00:00" }, { "name": "phpseclib/phpseclib", - "version": "3.0.38", + "version": "3.0.39", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "b18b8788e51156c4dd97b7f220a31149a0052067" + "reference": "211ebc399c6e73c225a018435fe5ae209d1d1485" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/b18b8788e51156c4dd97b7f220a31149a0052067", - "reference": "b18b8788e51156c4dd97b7f220a31149a0052067", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/211ebc399c6e73c225a018435fe5ae209d1d1485", + "reference": "211ebc399c6e73c225a018435fe5ae209d1d1485", "shasum": "" }, "require": { @@ -6578,7 +6579,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.38" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.39" }, "funding": [ { @@ -6594,7 +6595,7 @@ "type": "tidelift" } ], - "time": "2024-06-17T10:11:32+00:00" + "time": "2024-06-24T06:27:33+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -6645,16 +6646,16 @@ }, { "name": "propaganistas/laravel-disposable-email", - "version": "2.4.2", + "version": "2.4.4", "source": { "type": "git", "url": "https://github.com/Propaganistas/Laravel-Disposable-Email.git", - "reference": "ba101c464527d7b019b35d7ae8ec6709dc2cb812" + "reference": "4da37844d0dfcf5f7a0a1ff0793fe2ce9bf8ea9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Propaganistas/Laravel-Disposable-Email/zipball/ba101c464527d7b019b35d7ae8ec6709dc2cb812", - "reference": "ba101c464527d7b019b35d7ae8ec6709dc2cb812", + "url": "https://api.github.com/repos/Propaganistas/Laravel-Disposable-Email/zipball/4da37844d0dfcf5f7a0a1ff0793fe2ce9bf8ea9b", + "reference": "4da37844d0dfcf5f7a0a1ff0793fe2ce9bf8ea9b", "shasum": "" }, "require": { @@ -6710,7 +6711,7 @@ ], "support": { "issues": "https://github.com/Propaganistas/Laravel-Disposable-Email/issues", - "source": "https://github.com/Propaganistas/Laravel-Disposable-Email/tree/2.4.2" + "source": "https://github.com/Propaganistas/Laravel-Disposable-Email/tree/2.4.4" }, "funding": [ { @@ -6718,7 +6719,7 @@ "type": "github" } ], - "time": "2024-06-01T00:37:46+00:00" + "time": "2024-08-01T00:41:48+00:00" }, { "name": "psr/cache", @@ -7615,16 +7616,16 @@ }, { "name": "sentry/sentry", - "version": "4.8.0", + "version": "4.8.1", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "3cf5778ff425a23f2d22ed41b423691d36f47163" + "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/3cf5778ff425a23f2d22ed41b423691d36f47163", - "reference": "3cf5778ff425a23f2d22ed41b423691d36f47163", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/61770efd8b7888e0bdd7d234f0ba67b066e47d04", + "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04", "shasum": "" }, "require": { @@ -7688,7 +7689,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.8.0" + "source": "https://github.com/getsentry/sentry-php/tree/4.8.1" }, "funding": [ { @@ -7700,20 +7701,20 @@ "type": "custom" } ], - "time": "2024-06-05T13:18:43+00:00" + "time": "2024-07-16T13:45:27+00:00" }, { "name": "sentry/sentry-laravel", - "version": "4.6.0", + "version": "4.7.1", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "75c11944211ce7707bb92e717c5bda93a1759438" + "reference": "d70415f19f35806acee5bcbc7403e9cb8fb5252c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/75c11944211ce7707bb92e717c5bda93a1759438", - "reference": "75c11944211ce7707bb92e717c5bda93a1759438", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/d70415f19f35806acee5bcbc7403e9cb8fb5252c", + "reference": "d70415f19f35806acee5bcbc7403e9cb8fb5252c", "shasum": "" }, "require": { @@ -7777,7 +7778,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/4.6.0" + "source": "https://github.com/getsentry/sentry-laravel/tree/4.7.1" }, "funding": [ { @@ -7789,20 +7790,20 @@ "type": "custom" } ], - "time": "2024-06-11T12:23:24+00:00" + "time": "2024-07-17T13:27:43+00:00" }, { "name": "spatie/browsershot", - "version": "4.1.0", + "version": "4.1.3", "source": { "type": "git", "url": "https://github.com/spatie/browsershot.git", - "reference": "1fbc5955a24ec9b4dbc2620f78c03d5c043856d2" + "reference": "00ed6812b5bcb28ac13c1a17fc9d5cbf5ea19f0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/browsershot/zipball/1fbc5955a24ec9b4dbc2620f78c03d5c043856d2", - "reference": "1fbc5955a24ec9b4dbc2620f78c03d5c043856d2", + "url": "https://api.github.com/repos/spatie/browsershot/zipball/00ed6812b5bcb28ac13c1a17fc9d5cbf5ea19f0a", + "reference": "00ed6812b5bcb28ac13c1a17fc9d5cbf5ea19f0a", "shasum": "" }, "require": { @@ -7848,7 +7849,7 @@ "webpage" ], "support": { - "source": "https://github.com/spatie/browsershot/tree/4.1.0" + "source": "https://github.com/spatie/browsershot/tree/4.1.3" }, "funding": [ { @@ -7856,20 +7857,20 @@ "type": "github" } ], - "time": "2024-06-12T07:42:17+00:00" + "time": "2024-07-15T14:25:51+00:00" }, { "name": "spatie/crawler", - "version": "8.2.0", + "version": "8.2.3", "source": { "type": "git", "url": "https://github.com/spatie/crawler.git", - "reference": "807d145a3c071dc0e69bb7e6783611e2591f9773" + "reference": "c659f2fe4954249755990e42394a14d6d847a0a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/crawler/zipball/807d145a3c071dc0e69bb7e6783611e2591f9773", - "reference": "807d145a3c071dc0e69bb7e6783611e2591f9773", + "url": "https://api.github.com/repos/spatie/crawler/zipball/c659f2fe4954249755990e42394a14d6d847a0a7", + "reference": "c659f2fe4954249755990e42394a14d6d847a0a7", "shasum": "" }, "require": { @@ -7912,7 +7913,7 @@ ], "support": { "issues": "https://github.com/spatie/crawler/issues", - "source": "https://github.com/spatie/crawler/tree/8.2.0" + "source": "https://github.com/spatie/crawler/tree/8.2.3" }, "funding": [ { @@ -7924,20 +7925,20 @@ "type": "github" } ], - "time": "2024-02-15T10:40:48+00:00" + "time": "2024-07-31T10:46:19+00:00" }, { "name": "spatie/laravel-data", - "version": "4.7.0", + "version": "4.7.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-data.git", - "reference": "92af136b14f57c72b1b8e36cd5f7e274fb56385a" + "reference": "8980ee53f03721428c21b0b32ef662f85b277403" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-data/zipball/92af136b14f57c72b1b8e36cd5f7e274fb56385a", - "reference": "92af136b14f57c72b1b8e36cd5f7e274fb56385a", + "url": "https://api.github.com/repos/spatie/laravel-data/zipball/8980ee53f03721428c21b0b32ef662f85b277403", + "reference": "8980ee53f03721428c21b0b32ef662f85b277403", "shasum": "" }, "require": { @@ -8000,7 +8001,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-data/issues", - "source": "https://github.com/spatie/laravel-data/tree/4.7.0" + "source": "https://github.com/spatie/laravel-data/tree/4.7.2" }, "funding": [ { @@ -8008,7 +8009,7 @@ "type": "github" } ], - "time": "2024-06-13T12:07:24+00:00" + "time": "2024-07-25T11:17:44+00:00" }, { "name": "spatie/laravel-package-tools", @@ -8604,16 +8605,16 @@ }, { "name": "symfony/console", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "9b008f2d7b21c74ef4d0c3de6077a642bc55ece3" + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9b008f2d7b21c74ef4d0c3de6077a642bc55ece3", - "reference": "9b008f2d7b21c74ef4d0c3de6077a642bc55ece3", + "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", "shasum": "" }, "require": { @@ -8677,7 +8678,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.1" + "source": "https://github.com/symfony/console/tree/v7.1.3" }, "funding": [ { @@ -8693,7 +8694,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/css-selector", @@ -8896,16 +8897,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "e9b8bbce0b4f322939332ab7b6b81d8c11da27dd" + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/e9b8bbce0b4f322939332ab7b6b81d8c11da27dd", - "reference": "e9b8bbce0b4f322939332ab7b6b81d8c11da27dd", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", "shasum": "" }, "require": { @@ -8951,7 +8952,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.1" + "source": "https://github.com/symfony/error-handler/tree/v7.1.3" }, "funding": [ { @@ -8967,7 +8968,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T13:02:51+00:00" }, { "name": "symfony/event-dispatcher", @@ -9127,16 +9128,16 @@ }, { "name": "symfony/finder", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" + "reference": "717c6329886f32dc65e27461f80f2a465412fdca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", + "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca", + "reference": "717c6329886f32dc65e27461f80f2a465412fdca", "shasum": "" }, "require": { @@ -9171,7 +9172,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.1" + "source": "https://github.com/symfony/finder/tree/v7.1.3" }, "funding": [ { @@ -9187,20 +9188,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-24T07:08:44+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa" + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/74d171d5b6a1d9e4bfee09a41937c17a7536acfa", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", "shasum": "" }, "require": { @@ -9248,7 +9249,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.1" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" }, "funding": [ { @@ -9264,20 +9265,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "fa8d1c75b5f33b1302afccf81811f93976c6e26f" + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/fa8d1c75b5f33b1302afccf81811f93976c6e26f", - "reference": "fa8d1c75b5f33b1302afccf81811f93976c6e26f", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186", + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186", "shasum": "" }, "require": { @@ -9362,7 +9363,7 @@ "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/v7.1.1" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.3" }, "funding": [ { @@ -9378,20 +9379,20 @@ "type": "tidelift" } ], - "time": "2024-06-04T06:52:15+00:00" + "time": "2024-07-26T14:58:15+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.1", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "2eaad2e167cae930f25a3d731fec8b2ded5e751e" + "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/2eaad2e167cae930f25a3d731fec8b2ded5e751e", - "reference": "2eaad2e167cae930f25a3d731fec8b2ded5e751e", + "url": "https://api.github.com/repos/symfony/mailer/zipball/8fcff0af9043c8f8a8e229437cea363e282f9aee", + "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee", "shasum": "" }, "require": { @@ -9442,7 +9443,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.1" + "source": "https://github.com/symfony/mailer/tree/v7.1.2" }, "funding": [ { @@ -9458,20 +9459,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-06-28T08:00:31+00:00" }, { "name": "symfony/mime", - "version": "v7.1.1", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "21027eaacc1a8a20f5e616c25c3580f5dd3a15df" + "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/21027eaacc1a8a20f5e616c25c3580f5dd3a15df", - "reference": "21027eaacc1a8a20f5e616c25c3580f5dd3a15df", + "url": "https://api.github.com/repos/symfony/mime/zipball/26a00b85477e69a4bab63b66c5dce64f18b0cbfc", + "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc", "shasum": "" }, "require": { @@ -9526,7 +9527,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.1" + "source": "https://github.com/symfony/mime/tree/v7.1.2" }, "funding": [ { @@ -9542,7 +9543,7 @@ "type": "tidelift" } ], - "time": "2024-06-04T06:40:14+00:00" + "time": "2024-06-28T10:03:55+00:00" }, { "name": "symfony/options-resolver", @@ -9613,16 +9614,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "0424dff1c58f028c451efff2045f5d92410bd540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540", "shasum": "" }, "require": { @@ -9672,7 +9673,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" }, "funding": [ { @@ -9688,20 +9689,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", "shasum": "" }, "require": { @@ -9750,7 +9751,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" }, "funding": [ { @@ -9766,20 +9767,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1" + "reference": "e76343c631b453088e2260ac41dfebe21954de81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/07094a28851a49107f3ab4f9120ca2975a64b6e1", - "reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e76343c631b453088e2260ac41dfebe21954de81", + "reference": "e76343c631b453088e2260ac41dfebe21954de81", "shasum": "" }, "require": { @@ -9834,7 +9835,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.30.0" }, "funding": [ { @@ -9850,20 +9851,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:12:16+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" + "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", + "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", "shasum": "" }, "require": { @@ -9918,7 +9919,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0" }, "funding": [ { @@ -9934,20 +9935,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", "shasum": "" }, "require": { @@ -9999,7 +10000,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" }, "funding": [ { @@ -10015,20 +10016,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", "shasum": "" }, "require": { @@ -10079,7 +10080,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" }, "funding": [ { @@ -10095,20 +10096,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" + "reference": "10112722600777e02d2745716b70c5db4ca70442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", + "reference": "10112722600777e02d2745716b70c5db4ca70442", "shasum": "" }, "require": { @@ -10152,7 +10153,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" }, "funding": [ { @@ -10168,20 +10169,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", "shasum": "" }, "require": { @@ -10232,7 +10233,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, "funding": [ { @@ -10248,25 +10249,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" + "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", + "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.1" }, "type": "library", "extra": { @@ -10309,7 +10309,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" }, "funding": [ { @@ -10325,20 +10325,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-06-19T12:35:24+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" + "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", - "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9", + "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9", "shasum": "" }, "require": { @@ -10388,7 +10388,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" }, "funding": [ { @@ -10404,20 +10404,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/process", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028" + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028", + "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", "shasum": "" }, "require": { @@ -10449,7 +10449,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.1" + "source": "https://github.com/symfony/process/tree/v7.1.3" }, "funding": [ { @@ -10465,20 +10465,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:44:47+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "9a5dbb606da711f5d40a7596ad577856f9402140" + "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9a5dbb606da711f5d40a7596ad577856f9402140", - "reference": "9a5dbb606da711f5d40a7596ad577856f9402140", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/1365d10f5476f74a27cf9c2d1eee70c069019db0", + "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0", "shasum": "" }, "require": { @@ -10532,7 +10532,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.1" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.3" }, "funding": [ { @@ -10548,20 +10548,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/routing", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0" + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/60c31bab5c45af7f13091b87deb708830f3c96c0", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0", + "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", "shasum": "" }, "require": { @@ -10613,7 +10613,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.1" + "source": "https://github.com/symfony/routing/tree/v7.1.3" }, "funding": [ { @@ -10629,7 +10629,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/service-contracts", @@ -10716,16 +10716,16 @@ }, { "name": "symfony/string", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "60bc311c74e0af215101235aa6f471bcbc032df2" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/60bc311c74e0af215101235aa6f471bcbc032df2", - "reference": "60bc311c74e0af215101235aa6f471bcbc032df2", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { @@ -10783,7 +10783,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.1" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -10799,20 +10799,20 @@ "type": "tidelift" } ], - "time": "2024-06-04T06:40:14+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "symfony/translation", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3" + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", + "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", "shasum": "" }, "require": { @@ -10877,7 +10877,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.1" + "source": "https://github.com/symfony/translation/tree/v7.1.3" }, "funding": [ { @@ -10893,7 +10893,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/translation-contracts", @@ -11049,16 +11049,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "deb2c2b506ff6fdbb340e00b34e9901e1605f293" + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/deb2c2b506ff6fdbb340e00b34e9901e1605f293", - "reference": "deb2c2b506ff6fdbb340e00b34e9901e1605f293", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f", + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f", "shasum": "" }, "require": { @@ -11112,7 +11112,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.1" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.3" }, "funding": [ { @@ -11128,7 +11128,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/yaml", @@ -11407,23 +11407,23 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.6.0", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.2", + "graham-campbell/result-type": "^1.1.3", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2", + "phpoption/phpoption": "^1.9.3", "symfony/polyfill-ctype": "^1.24", "symfony/polyfill-mbstring": "^1.24", "symfony/polyfill-php80": "^1.24" @@ -11440,7 +11440,7 @@ "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "5.6-dev" @@ -11475,7 +11475,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" }, "funding": [ { @@ -11487,7 +11487,7 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:43:29+00:00" + "time": "2024-07-20T21:52:34+00:00" }, { "name": "voku/portable-ascii", @@ -11625,16 +11625,16 @@ "packages-dev": [ { "name": "barryvdh/laravel-ide-helper", - "version": "v3.0.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "bc1d67f01ce8c77e3f97d48ba51fa1d81874f622" + "reference": "591e7d665fbab8a3b682e451641706341573eb80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/bc1d67f01ce8c77e3f97d48ba51fa1d81874f622", - "reference": "bc1d67f01ce8c77e3f97d48ba51fa1d81874f622", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/591e7d665fbab8a3b682e451641706341573eb80", + "reference": "591e7d665fbab8a3b682e451641706341573eb80", "shasum": "" }, "require": { @@ -11666,7 +11666,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" }, "laravel": { "providers": [ @@ -11703,7 +11703,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.0.0" + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.1.0" }, "funding": [ { @@ -11715,7 +11715,7 @@ "type": "github" } ], - "time": "2024-03-01T12:53:18+00:00" + "time": "2024-07-12T14:20:51+00:00" }, { "name": "barryvdh/reflection-docblock", @@ -11938,30 +11938,38 @@ }, { "name": "composer/pcre", - "version": "3.1.4", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "04229f163664973f68f38f6f73d917799168ef24" + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", - "reference": "04229f163664973f68f38f6f73d917799168ef24", + "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90", + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.8" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.8", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -11989,7 +11997,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.4" + "source": "https://github.com/composer/pcre/tree/3.2.0" }, "funding": [ { @@ -12005,7 +12013,7 @@ "type": "tidelift" } ], - "time": "2024-05-27T13:40:54+00:00" + "time": "2024-07-25T09:36:02+00:00" }, { "name": "fakerphp/faker", @@ -12255,16 +12263,16 @@ }, { "name": "laravel/dusk", - "version": "v8.2.0", + "version": "v8.2.2", "source": { "type": "git", "url": "https://github.com/laravel/dusk.git", - "reference": "773a12dfbd3f84174b0f26fbc2807a414a379a66" + "reference": "c7c1702324b40272eaca6519c573555a03faf3d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/dusk/zipball/773a12dfbd3f84174b0f26fbc2807a414a379a66", - "reference": "773a12dfbd3f84174b0f26fbc2807a414a379a66", + "url": "https://api.github.com/repos/laravel/dusk/zipball/c7c1702324b40272eaca6519c573555a03faf3d7", + "reference": "c7c1702324b40272eaca6519c573555a03faf3d7", "shasum": "" }, "require": { @@ -12321,22 +12329,22 @@ ], "support": { "issues": "https://github.com/laravel/dusk/issues", - "source": "https://github.com/laravel/dusk/tree/v8.2.0" + "source": "https://github.com/laravel/dusk/tree/v8.2.2" }, - "time": "2024-04-16T15:51:19+00:00" + "time": "2024-07-24T15:46:41+00:00" }, { "name": "laravel/pint", - "version": "v1.16.0", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "1b3a3dc5bc6a81ff52828ba7277621f1d49d6d98" + "reference": "b5b6f716db298671c1dfea5b1082ec2c0ae7064f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/1b3a3dc5bc6a81ff52828ba7277621f1d49d6d98", - "reference": "1b3a3dc5bc6a81ff52828ba7277621f1d49d6d98", + "url": "https://api.github.com/repos/laravel/pint/zipball/b5b6f716db298671c1dfea5b1082ec2c0ae7064f", + "reference": "b5b6f716db298671c1dfea5b1082ec2c0ae7064f", "shasum": "" }, "require": { @@ -12347,13 +12355,13 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.57.1", - "illuminate/view": "^10.48.10", - "larastan/larastan": "^2.9.6", + "friendsofphp/php-cs-fixer": "^3.59.3", + "illuminate/view": "^10.48.12", + "larastan/larastan": "^2.9.7", "laravel-zero/framework": "^10.4.0", "mockery/mockery": "^1.6.12", "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.34.7" + "pestphp/pest": "^2.34.8" }, "bin": [ "builds/pint" @@ -12389,20 +12397,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-05-21T18:08:25+00:00" + "time": "2024-08-01T09:06:33+00:00" }, { "name": "laravel/sail", - "version": "v1.29.2", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "a8e4e749735ba2f091856eafeb3f99db8cd6b621" + "reference": "48d89608a3bb5be763c9bb87121d31e7da27c1cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/a8e4e749735ba2f091856eafeb3f99db8cd6b621", - "reference": "a8e4e749735ba2f091856eafeb3f99db8cd6b621", + "url": "https://api.github.com/repos/laravel/sail/zipball/48d89608a3bb5be763c9bb87121d31e7da27c1cb", + "reference": "48d89608a3bb5be763c9bb87121d31e7da27c1cb", "shasum": "" }, "require": { @@ -12452,7 +12460,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2024-05-16T21:39:11+00:00" + "time": "2024-07-22T14:36:50+00:00" }, { "name": "mockery/mockery", @@ -12599,38 +12607,38 @@ }, { "name": "nunomaduro/collision", - "version": "v8.1.1", + "version": "v8.4.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9" + "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/13e5d538b95a744d85f447a321ce10adb28e9af9", - "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/e7d1aa8ed753f63fa816932bbc89678238843b4a", + "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a", "shasum": "" }, "require": { "filp/whoops": "^2.15.4", "nunomaduro/termwind": "^2.0.1", "php": "^8.2.0", - "symfony/console": "^7.0.4" + "symfony/console": "^7.1.3" }, "conflict": { "laravel/framework": "<11.0.0 || >=12.0.0", "phpunit/phpunit": "<10.5.1 || >=12.0.0" }, "require-dev": { - "larastan/larastan": "^2.9.2", - "laravel/framework": "^11.0.0", - "laravel/pint": "^1.14.0", - "laravel/sail": "^1.28.2", - "laravel/sanctum": "^4.0.0", + "larastan/larastan": "^2.9.8", + "laravel/framework": "^11.19.0", + "laravel/pint": "^1.17.1", + "laravel/sail": "^1.31.0", + "laravel/sanctum": "^4.0.2", "laravel/tinker": "^2.9.0", - "orchestra/testbench-core": "^9.0.0", - "pestphp/pest": "^2.34.1 || ^3.0.0", - "sebastian/environment": "^6.0.1 || ^7.0.0" + "orchestra/testbench-core": "^9.2.3", + "pestphp/pest": "^2.35.0 || ^3.0.0", + "sebastian/environment": "^6.1.0 || ^7.0.0" }, "type": "library", "extra": { @@ -12692,25 +12700,25 @@ "type": "patreon" } ], - "time": "2024-03-06T16:20:09+00:00" + "time": "2024-08-03T15:32:23+00:00" }, { "name": "pestphp/pest", - "version": "v2.34.8", + "version": "v2.35.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "e8f122bf47585c06431e0056189ec6bfd6f41f57" + "reference": "d0ff2c8ec294b7aa7fcb0f3ddc4fdec864234646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/e8f122bf47585c06431e0056189ec6bfd6f41f57", - "reference": "e8f122bf47585c06431e0056189ec6bfd6f41f57", + "url": "https://api.github.com/repos/pestphp/pest/zipball/d0ff2c8ec294b7aa7fcb0f3ddc4fdec864234646", + "reference": "d0ff2c8ec294b7aa7fcb0f3ddc4fdec864234646", "shasum": "" }, "require": { "brianium/paratest": "^7.3.1", - "nunomaduro/collision": "^7.10.0|^8.1.1", + "nunomaduro/collision": "^7.10.0|^8.3.0", "nunomaduro/termwind": "^1.15.1|^2.0.1", "pestphp/pest-plugin": "^2.1.1", "pestphp/pest-plugin-arch": "^2.7.0", @@ -12724,8 +12732,8 @@ }, "require-dev": { "pestphp/pest-dev-tools": "^2.16.0", - "pestphp/pest-plugin-type-coverage": "^2.8.3", - "symfony/process": "^6.4.0|^7.1.1" + "pestphp/pest-plugin-type-coverage": "^2.8.5", + "symfony/process": "^6.4.0|^7.1.3" }, "bin": [ "bin/pest" @@ -12788,7 +12796,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v2.34.8" + "source": "https://github.com/pestphp/pest/tree/v2.35.0" }, "funding": [ { @@ -12800,7 +12808,7 @@ "type": "github" } ], - "time": "2024-06-10T22:02:16+00:00" + "time": "2024-08-02T10:57:29+00:00" }, { "name": "pestphp/pest-plugin", @@ -13061,6 +13069,134 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "php-di/invoker", + "version": "2.3.4", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/Invoker.git", + "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/33234b32dafa8eb69202f950a1fc92055ed76a86", + "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "psr/container": "^1.0|^2.0" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "mnapoli/hard-mode": "~0.3.0", + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Invoker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Generic and extensible callable invoker", + "homepage": "https://github.com/PHP-DI/Invoker", + "keywords": [ + "callable", + "dependency", + "dependency-injection", + "injection", + "invoke", + "invoker" + ], + "support": { + "issues": "https://github.com/PHP-DI/Invoker/issues", + "source": "https://github.com/PHP-DI/Invoker/tree/2.3.4" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + } + ], + "time": "2023-09-08T09:24:21+00:00" + }, + { + "name": "php-di/php-di", + "version": "7.0.7", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/PHP-DI.git", + "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", + "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", + "shasum": "" + }, + "require": { + "laravel/serializable-closure": "^1.0", + "php": ">=8.0", + "php-di/invoker": "^2.0", + "psr/container": "^1.1 || ^2.0" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3", + "friendsofphp/proxy-manager-lts": "^1", + "mnapoli/phpunit-easymock": "^1.3", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.6" + }, + "suggest": { + "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "DI\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The dependency injection container for humans", + "homepage": "https://php-di.org/", + "keywords": [ + "PSR-11", + "container", + "container-interop", + "dependency injection", + "di", + "ioc", + "psr11" + ], + "support": { + "issues": "https://github.com/PHP-DI/PHP-DI/issues", + "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.7" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/php-di/php-di", + "type": "tidelift" + } + ], + "time": "2024-07-21T15:55:45+00:00" + }, { "name": "php-webdriver/webdriver", "version": "1.15.1", @@ -13193,16 +13329,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.5", + "version": "1.11.9", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "490f0ae1c92b082f154681d7849aee776a7c1443" + "reference": "e370bcddadaede0c1716338b262346f40d296f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/490f0ae1c92b082f154681d7849aee776a7c1443", - "reference": "490f0ae1c92b082f154681d7849aee776a7c1443", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e370bcddadaede0c1716338b262346f40d296f82", + "reference": "e370bcddadaede0c1716338b262346f40d296f82", "shasum": "" }, "require": { @@ -13247,20 +13383,20 @@ "type": "github" } ], - "time": "2024-06-17T15:10:54+00:00" + "time": "2024-08-01T16:25:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.14", + "version": "10.1.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" + "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", - "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", + "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", "shasum": "" }, "require": { @@ -13317,7 +13453,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.15" }, "funding": [ { @@ -13325,7 +13461,7 @@ "type": "github" } ], - "time": "2024-03-12T15:33:41+00:00" + "time": "2024-06-29T08:25:15+00:00" }, { "name": "phpunit/php-file-iterator", @@ -13671,71 +13807,18 @@ ], "time": "2024-04-05T04:39:01+00:00" }, - { - "name": "pimple/pimple", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1 || ^2.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^5.4@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", - "keywords": [ - "container", - "dependency injection" - ], - "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" - }, - "time": "2021-10-28T11:13:42+00:00" - }, { "name": "rector/rector", - "version": "1.1.0", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "556509e2dcf527369892b7d411379c4a02f31859" + "reference": "044e6364017882d1e346da8690eeabc154da5495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/556509e2dcf527369892b7d411379c4a02f31859", - "reference": "556509e2dcf527369892b7d411379c4a02f31859", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/044e6364017882d1e346da8690eeabc154da5495", + "reference": "044e6364017882d1e346da8690eeabc154da5495", "shasum": "" }, "require": { @@ -13773,7 +13856,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.1.0" + "source": "https://github.com/rectorphp/rector/tree/1.2.2" }, "funding": [ { @@ -13781,7 +13864,7 @@ "type": "github" } ], - "time": "2024-05-18T09:40:27+00:00" + "time": "2024-07-25T07:44:34+00:00" }, { "name": "sebastian/cli-parser", @@ -14701,16 +14784,16 @@ }, { "name": "spatie/backtrace", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23" + "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/8373b9d51638292e3bfd736a9c19a654111b4a23", - "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/1a9a145b044677ae3424693f7b06479fc8c137a9", + "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9", "shasum": "" }, "require": { @@ -14748,7 +14831,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.6.1" + "source": "https://github.com/spatie/backtrace/tree/1.6.2" }, "funding": [ { @@ -14760,20 +14843,20 @@ "type": "other" } ], - "time": "2024-04-24T13:22:11+00:00" + "time": "2024-07-22T08:21:24+00:00" }, { "name": "spatie/error-solutions", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/spatie/error-solutions.git", - "reference": "202108314a6988ede156fba1b3ea80a784c1734a" + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/202108314a6988ede156fba1b3ea80a784c1734a", - "reference": "202108314a6988ede156fba1b3ea80a784c1734a", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", "shasum": "" }, "require": { @@ -14826,7 +14909,7 @@ ], "support": { "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.0.0" + "source": "https://github.com/spatie/error-solutions/tree/1.1.1" }, "funding": [ { @@ -14834,20 +14917,20 @@ "type": "github" } ], - "time": "2024-06-12T14:49:54+00:00" + "time": "2024-07-25T11:06:04+00:00" }, { "name": "spatie/flare-client-php", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "097040ff51e660e0f6fc863684ac4b02c93fa234" + "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/097040ff51e660e0f6fc863684ac4b02c93fa234", - "reference": "097040ff51e660e0f6fc863684ac4b02c93fa234", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", + "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", "shasum": "" }, "require": { @@ -14865,7 +14948,7 @@ "phpstan/extension-installer": "^1.1", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", - "spatie/phpunit-snapshot-assertions": "^4.0|^5.0" + "spatie/pest-plugin-snapshots": "^1.0|^2.0" }, "type": "library", "extra": { @@ -14895,7 +14978,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.7.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.8.0" }, "funding": [ { @@ -14903,7 +14986,7 @@ "type": "github" } ], - "time": "2024-06-12T14:39:14+00:00" + "time": "2024-08-01T08:27:26+00:00" }, { "name": "spatie/ignition", @@ -15081,16 +15164,16 @@ }, { "name": "spatie/laravel-ray", - "version": "1.36.2", + "version": "1.37.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "1852faa96e5aa6778ea3401ec3176eee77268718" + "reference": "c2bedfd1172648df2c80aaceb2541d70f1d9a5b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/1852faa96e5aa6778ea3401ec3176eee77268718", - "reference": "1852faa96e5aa6778ea3401ec3176eee77268718", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/c2bedfd1172648df2c80aaceb2541d70f1d9a5b9", + "reference": "c2bedfd1172648df2c80aaceb2541d70f1d9a5b9", "shasum": "" }, "require": { @@ -15104,7 +15187,7 @@ "spatie/backtrace": "^1.0", "spatie/ray": "^1.41.1", "symfony/stopwatch": "4.2|^5.1|^6.0|^7.0", - "zbateson/mail-mime-parser": "^1.3.1|^2.0" + "zbateson/mail-mime-parser": "^1.3.1|^2.0|^3.0" }, "require-dev": { "guzzlehttp/guzzle": "^7.3", @@ -15152,7 +15235,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.36.2" + "source": "https://github.com/spatie/laravel-ray/tree/1.37.1" }, "funding": [ { @@ -15164,7 +15247,7 @@ "type": "other" } ], - "time": "2024-05-02T08:26:02+00:00" + "time": "2024-07-12T12:35:17+00:00" }, { "name": "spatie/macroable", @@ -15303,16 +15386,16 @@ }, { "name": "symfony/polyfill-iconv", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f" + "reference": "c027e6a3c6aee334663ec21f5852e89738abc805" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", - "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c027e6a3c6aee334663ec21f5852e89738abc805", + "reference": "c027e6a3c6aee334663ec21f5852e89738abc805", "shasum": "" }, "require": { @@ -15363,7 +15446,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.30.0" }, "funding": [ { @@ -15379,7 +15462,7 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/stopwatch", @@ -15554,30 +15637,31 @@ }, { "name": "zbateson/mail-mime-parser", - "version": "2.4.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "ff49e02f6489b38f7cc3d1bd3971adc0f872569c" + "reference": "9a240522ae5e4eaeb7bf72c9bc88fe89dfb014a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/ff49e02f6489b38f7cc3d1bd3971adc0f872569c", - "reference": "ff49e02f6489b38f7cc3d1bd3971adc0f872569c", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/9a240522ae5e4eaeb7bf72c9bc88fe89dfb014a3", + "reference": "9a240522ae5e4eaeb7bf72c9bc88fe89dfb014a3", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=7.1", - "pimple/pimple": "^3.0", - "zbateson/mb-wrapper": "^1.0.1", - "zbateson/stream-decorators": "^1.0.6" + "guzzlehttp/psr7": "^2.5", + "php": ">=8.0", + "php-di/php-di": "^6.0|^7.0", + "psr/log": "^1|^2|^3", + "zbateson/mb-wrapper": "^2.0", + "zbateson/stream-decorators": "^2.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", - "mikey179/vfsstream": "^1.6.0", + "monolog/monolog": "^2|^3", "phpstan/phpstan": "*", - "phpunit/phpunit": "<10" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-iconv": "For best support/performance", @@ -15625,24 +15709,24 @@ "type": "github" } ], - "time": "2024-04-28T00:58:54+00:00" + "time": "2024-05-01T16:49:29+00:00" }, { "name": "zbateson/mb-wrapper", - "version": "1.2.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f" + "reference": "9e4373a153585d12b6c621ac4a6bb143264d4619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/09a8b77eb94af3823a9a6623dcc94f8d988da67f", - "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f", + "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/9e4373a153585d12b6c621ac4a6bb143264d4619", + "reference": "9e4373a153585d12b6c621ac4a6bb143264d4619", "shasum": "" }, "require": { - "php": ">=7.1", + "php": ">=8.0", "symfony/polyfill-iconv": "^1.9", "symfony/polyfill-mbstring": "^1.9" }, @@ -15686,7 +15770,7 @@ ], "support": { "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.1" + "source": "https://github.com/zbateson/mb-wrapper/tree/2.0.0" }, "funding": [ { @@ -15694,31 +15778,31 @@ "type": "github" } ], - "time": "2024-03-18T04:31:04+00:00" + "time": "2024-03-20T01:38:07+00:00" }, { "name": "zbateson/stream-decorators", - "version": "1.2.1", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9" + "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/783b034024fda8eafa19675fb2552f8654d3a3e9", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9", + "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/32a2a62fb0f26313395c996ebd658d33c3f9c4e5", + "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.9 | ^2.0", - "php": ">=7.2", - "zbateson/mb-wrapper": "^1.0.0" + "guzzlehttp/psr7": "^2.5", + "php": ">=8.0", + "zbateson/mb-wrapper": "^2.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", "phpstan/phpstan": "*", - "phpunit/phpunit": "<10.0" + "phpunit/phpunit": "^9.6|^10.0" }, "type": "library", "autoload": { @@ -15749,7 +15833,7 @@ ], "support": { "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.2.1" + "source": "https://github.com/zbateson/stream-decorators/tree/2.1.1" }, "funding": [ { @@ -15757,7 +15841,7 @@ "type": "github" } ], - "time": "2023-05-30T22:51:52+00:00" + "time": "2024-04-29T21:42:39+00:00" } ], "aliases": [], diff --git a/config/filesystems.php b/config/filesystems.php index 617e720e..384e88a9 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -46,6 +46,8 @@ return [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), + 'visibility' => env('LOCAL_FILESYSTEM_VISIBILITY', 'private'), + 'directory_visibility' => env('LOCAL_FILESYSTEM_VISIBILITY', 'private'), ], 'public' => [ @@ -64,6 +66,7 @@ return [ 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', true), + 'temporary_url_rewrites' => json_decode(env('AWS_TEMPORARY_URL_REWRITES', '{}'), true), ], ], diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..ea9e5dde --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,68 @@ +--- +services: + api: &api + image: jhumanj/opnform-api:latest + environment: + DB_HOST: db + REDIS_HOST: redis + + DB_DATABASE: ${DB_DATABASE:-forge} + DB_USERNAME: ${DB_USERNAME:-forge} + DB_PASSWORD: ${DB_PASSWORD:-forge} + DB_CONNECTION: ${DB_CONNECTION:-pgsql} + LOG_LEVEL: ${LOG_LEVEL:-debug} + LOG_CHANNEL: ${LOG_CHANNEL:-errorlog} + AWS_ENDPOINT: http://minio:9000 + AWS_ACCESS_KEY_ID: ${MINIO_ACCESS_KEY:-minio} + AWS_SECRET_ACCESS_KEY: ${MINIO_SECRET_KEY:-minio123} + FILESYSTEM_DISK: local + AWS_REGION: eu-west-1 + AWS_BUCKET: laravel-bucket + LOCAL_FILESYSTEM_VISIBILITY: public + FRONT_URL: ${FRONT_URL:-http://localhost} + env_file: ./.env + volumes: + - laravel-persist:/persist + - secrets-config:/secrets + + api-worker: + <<: *api + command: ./artisan queue:work + + ui: + image: jhumanj/opnform-ui:latest + environment: + NUXT_PUBLIC_APP_URL: ${NUXT_PUBLIC_APP_URL:-/} + NUXT_PUBLIC_API_BASE: ${NUXT_PUBLIC_API_BASE:-/api} + NUXT_PRIVATE_API_BASE: http://ingress/api + env_file: + - ./client/.env + volumes: + - secrets-config:/secrets + - ./client/.env:/app/.env + + + + redis: + image: redis:7 + + db: + image: postgres:16 + environment: + POSTGRES_DB: ${DB_DATABASE:-forge} + POSTGRES_USER: ${DB_USERNAME:-forge} + POSTGRES_PASSWORD: ${DB_PASSWORD:-forge} + volumes: + - postgres-data:/var/lib/postgresql/data + + ingress: + image: nginx:1 + volumes: + - ./docker/nginx.conf:/etc/nginx/templates/default.conf.template + ports: + - 80:80 + +volumes: + laravel-persist: + postgres-data: + secrets-config: diff --git a/docker/Dockerfile.api b/docker/Dockerfile.api new file mode 100644 index 00000000..318caa45 --- /dev/null +++ b/docker/Dockerfile.api @@ -0,0 +1,49 @@ +FROM php:8.3-fpm + +# syntax=docker/dockerfile:1.3-labs + +RUN apt-get update && apt-get install -y libzip-dev libpng-dev postgresql-client libpq-dev && apt-get clean + +COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer +ENV COMPOSER_ALLOW_SUPERUSER=1 +RUN docker-php-ext-install pdo pgsql pdo_pgsql gd bcmath zip && pecl install redis && docker-php-ext-enable redis + + +WORKDIR /usr/share/nginx/html/ +ADD composer.json composer.lock artisan ./ + +# NOTE: The project would build more reliably if all php files were added before running +# composer install. This would though introduce a dependency which would cause every +# dependency to be re-installed each time any php file is edited. It may be necessary in +# future to remove this 'optimisation' by moving the `RUN composer install` line after all +# the following ADD commands. + +# Running artisan requires the full php app to be installed so we need to remove the +# post-autoload command from the composer file if we want to run composer without +# adding a dependency to all the php files. +RUN sed 's_@php artisan package:discover_/bin/true_;' -i composer.json +ADD app/helpers.php app/helpers.php +RUN composer install --ignore-platform-req=php + +ADD app ./app +ADD bootstrap ./bootstrap +ADD config ./config +ADD database ./database +ADD public public +ADD routes routes +ADD tests tests +ADD resources resources +ADD storage ./storage +RUN chmod 777 -R storage + +# Manually run the command we deleted from composer.json earlier +RUN php artisan package:discover --ansi + +COPY docker/php-fpm-entrypoint /usr/local/bin/opnform-entrypoint +COPY docker/generate-api-secret.sh /usr/local/bin/ +RUN ln -s /secrets/api.env .env + +RUN chmod a+x /usr/local/bin/* + +ENTRYPOINT [ "/usr/local/bin/opnform-entrypoint" ] +CMD php-fpm diff --git a/docker/Dockerfile.client b/docker/Dockerfile.client new file mode 100644 index 00000000..97930e47 --- /dev/null +++ b/docker/Dockerfile.client @@ -0,0 +1,34 @@ +FROM node:20-alpine AS javascript-builder +WORKDIR /app + +# It's best to add as few files as possible before running the build commands +# as they will be re-run everytime one of those files changes. +# +# It's possible to run npm install with only the package.json and package-lock.json file. + +ADD ./client/package.json ./client/package-lock.json ./ + +# Install git and other necessary build tools +RUN apk add --no-cache git + +# Clear npm cache, remove existing node_modules, and install dependencies +RUN npm cache clean --force && \ + rm -rf node_modules && \ + npm install + +# Explicitly install the correct version of esbuild +# RUN npm install esbuild@0.21.5 + +ADD ./client/ /app/ +RUN npm run build + +FROM node:20-alpine +WORKDIR /app +COPY --from=javascript-builder /app/.output/ /app/ +RUN ls /app/ +RUN ln -s /secrets/client.env .env +ADD ./docker/node-entrypoint /entrypoint.sh +RUN chmod a+x /entrypoint.sh + +ENTRYPOINT [ "/entrypoint.sh" ] +CMD [ "node", "./server/index.mjs" ] diff --git a/docker/generate-api-secret.sh b/docker/generate-api-secret.sh index e33ed58f..7ea95ed2 100644 --- a/docker/generate-api-secret.sh +++ b/docker/generate-api-secret.sh @@ -1,20 +1,21 @@ #!/bin/bash -e main() { - ( flock -n 100 || wait_for_other_instance; generate_api_secrets) 100> /var/lock/api_secret.lock + generate_api_secrets } generate_api_secrets() { if ! is_configured; then + echo "Generating shared secret..." SECRET="$(random_string)" - add_secret_to_env_file /app/client/.env NUXT_API_SECRET "$SECRET" - add_secret_to_env_file /app/.env FRONT_API_SECRET "$SECRET" + add_secret_to_env_file /secrets/client.env NUXT_API_SECRET "$SECRET" + add_secret_to_env_file /secrets/api.env FRONT_API_SECRET "$SECRET" fi } random_string() { array=() - for i in {a..z} {A..Z} {0..9}; + for i in {a..z} {A..Z} {0..9}; do array[$RANDOM]=$i done @@ -27,21 +28,15 @@ add_secret_to_env_file() { VAR=$2 VAL=$3 - grep "^$VAR=" "$FILE" || ( echo "$VAR=" >> "$FILE" ) + grep -q "^$VAR=" "$FILE" 2>/dev/null || ( echo "$VAR=" >> "$FILE" ) cp $FILE $TEMP_FILE sed "s/^$VAR=.*$/$VAR=$VAL/" -i $TEMP_FILE cat $TEMP_FILE > $FILE } -wait_for_other_instance() { - while ! is_configured; do - sleep 1; - done -} - is_configured() { - grep -q "FRONT_API_SECRET=.\+" /app/.env + grep -q "FRONT_API_SECRET=.\+" .env 2>/dev/null } main diff --git a/docker/nginx.conf b/docker/nginx.conf index 31b28ed2..746ee8e8 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -14,32 +14,27 @@ server { index index.html index.htm index.php; location / { - proxy_pass http://localhost:3000; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Port $server_port; + proxy_http_version 1.1; + proxy_pass http://ui:3000; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Port $server_port; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; } - location /api/ { - set $original_uri $uri; - try_files $uri $uri/ /index.php$is_args$args; - } - - location /local/temp/ { - set $original_uri $uri; - try_files $uri $uri/ /index.php$is_args$args; - } - - location /forms/assets/ { + location ~/(api|open|local\/temp|forms\/assets)/ { set $original_uri $uri; try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_pass unix:/var/run/php-fpm-opnform-site.sock; + fastcgi_pass api:9000; fastcgi_index index.php; - include fastcgi.conf; + include fastcgi_params; + #fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name; + fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/public/index.php; fastcgi_param REQUEST_URI $api_uri; } } diff --git a/docker/node-entrypoint b/docker/node-entrypoint new file mode 100644 index 00000000..7ce865c3 --- /dev/null +++ b/docker/node-entrypoint @@ -0,0 +1,30 @@ +#!/bin/sh + +main() { + if [ "$1" == "bash" ]; then + "$@" + else + wait_for_api_secret + if [ ! -f .env ] && [ -f /secrets/client.env ]; then + ln -sf /secrets/client.env .env + fi + if [ -f .env ]; then + . .env + else + echo "Warning: .env file not found" + fi + run_server "$@" + fi +} +wait_for_api_secret() { + until [ -f /secrets/configured ]; do + echo "Waiting for api secret..." + sleep 1 + done +} +run_server() { + echo "Running " node "$@" + "$@" +} + +main "$@" diff --git a/docker/nuxt-wrapper.sh b/docker/nuxt-wrapper.sh deleted file mode 100644 index 8eb246c9..00000000 --- a/docker/nuxt-wrapper.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -e - -echo + . ~nuxt/.nvm/nvm.sh -. ~nuxt/.nvm/nvm.sh - -echo + nvm install --no-progress 20 -nvm install --no-progress 20 -echo + nvm use 20 -nvm use 20 - -cd /app/nuxt/server/ - -export NUXT_PRIVATE_API_BASE=http://localhost/api - -echo + . /app/client/.env -[ -f /app/client/.env ] && . /app/client/.env || echo "Environment file missing!" - -[ "x$NUXT_API_SECRET" != "x" ] || ( - echo + generate-api-secret.sh - generate-api-secret.sh -) - -echo + eval \$\(sed 's/^/export /' \< /app/client/.env\) -eval $(sed 's/^/export /' < /app/client/.env) - -echo + node index.mjs -node index.mjs diff --git a/docker/php-fpm-entrypoint b/docker/php-fpm-entrypoint new file mode 100644 index 00000000..aab78ee4 --- /dev/null +++ b/docker/php-fpm-entrypoint @@ -0,0 +1,115 @@ +#!/bin/bash + +main() { + read_env + prep_file_permissions + prep_storage + if is_master "$@"; then + prep_laravel_secrets + wait_for_db + apply_db_migrations + run_init_project + mark_ready + else + wait_for_ready + wait_for_db + fi + read_env + run_server "$@" +} +is_master() { + echo "$@" | grep -q php-fpm +} + +read_env() { + #set +x + [ -f .env ] || touch .env + . .env + #set -x +} +prep_file_permissions() { + chmod a+x ./artisan +} + +prep_laravel_secrets() { + read_env + + [ "x$APP_KEY" != "x" ] || { + echo "Generating Laravel key..." + grep -q "APP_KEY=" .env || { + echo "APP_KEY=" >> .env + } + ./artisan key:generate + read_env + } + [ "x$JWT_SECRET" != "x" ] || { + echo "Generating Laravel Secret..." + ./artisan jwt:secret -f + read_env + } + + [ "x$FRONT_API_SECRET" != "x" ] || { + echo "Generating Shared Client Secret..." + /usr/local/bin/generate-api-secret.sh + read_env + } + echo "Done with secrets" +} + +apply_db_migrations() { + echo "Running DB Migrations" + ./artisan migrate +} + +run_init_project() { + echo "Running app:init-project command" + ./artisan app:init-project +} + +wait_for_ready() { + echo "Checking keys have been generated" + until [ -f /secrets/configured ]; do + sleep 1; + echo "Waiting for keys to generate" + done +} + +mark_ready() { + touch /secrets/configured +} + +wait_for_db() { + until ./artisan migrate:status 2>&1 | grep -q -E "(Migration table not found|Migration name)"; do + echo "Waiting for DB to bootup" + sleep 1 + done +} + +run_server() { + echo "Booting $@" + read_env + /usr/local/bin/docker-php-entrypoint "$@" +} + +prep_storage() { + [ -L storage ] || { + echo "Backing up initial storage directory" + rm -rf /etc/initial-storage + mv ./storage /etc/initial-storage + } + + [ -d /persist/storage ] || { + echo "Initialising blank storage dir" + mkdir -p /persist + cp -a /etc/initial-storage /persist/storage + chmod 777 -R /persist/storage + } + + touch /var/log/opnform.log + chown www-data /var/log/opnform.log + + echo "Linking persistent storage into app" + ln -t . -sf /persist/storage +} + +main "$@" diff --git a/docker/php-fpm-wrapper.sh b/docker/php-fpm-wrapper.sh deleted file mode 100644 index 13186db6..00000000 --- a/docker/php-fpm-wrapper.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -ex - -[ -L /app/storage ] || { - echo "Backing up initial storage directory" - rm -rf /etc/initial-storage - mv /app/storage /etc/initial-storage -} - -[ -d /persist/storage ] || { - echo "Initialising blank storage dir" - mkdir -p /persist - cp -a /etc/initial-storage /persist/storage - chmod 777 -R /persist/storage -} - -touch /var/log/opnform.log -chown opnform /var/log/opnform.log - -echo "Linking persistent storage into app" -ln -t /app -sf /persist/storage - -read_env() { - set +x - . /app/.env - set -x -} -read_env - -[ "x$APP_KEY" != "x" ] || { - artisan key:generate - read_env -} -[ "x$JWT_SECRET" != "x" ] || { - artisan jwt:secret -f - read_env -} - -[ "x$FRONT_API_SECRET" != "x" ] || { - generate-api-secret.sh - read_env -} - -/usr/sbin/php-fpm8.1 - -tail -f /var/log/opnform.log diff --git a/docker/php-fpm.conf b/docker/php-fpm.conf deleted file mode 100644 index c40aa189..00000000 --- a/docker/php-fpm.conf +++ /dev/null @@ -1,18 +0,0 @@ -[opnform] -user = opnform -group = opnform -listen = /var/run/php-fpm-opnform-site.sock -listen.owner = www-data -listen.group = www-data -php_admin_value[disable_functions] = exec,passthru,shell_exec,system -php_admin_flag[allow_url_fopen] = off -php_admin_value[error_log] = /var/log/opnform.log -; Choose how the process manager will control the number of child processes. -pm = dynamic -pm.max_children = 75 -pm.start_servers = 10 -pm.min_spare_servers = 5 -pm.max_spare_servers = 20 -pm.process_idle_timeout = 10s -clear_env = no - diff --git a/docker/postgres-wrapper.sh b/docker/postgres-wrapper.sh deleted file mode 100644 index 083d5171..00000000 --- a/docker/postgres-wrapper.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -ex - -DATA_DIR=/persist/pgsql/data -CONFIG_FILE=/etc/postgresql/postgresql.conf -PG_BASE=/usr/lib/postgresql/15/ - -touch $CONFIG_FILE - -mkdir -p $DATA_DIR -chown postgres -R $DATA_DIR -chmod 0700 $DATA_DIR - -set +x -. /app/.env -set -x - -test -f $DATA_DIR/postgresql.conf || NEW_DB=true - -if [ "x$NEW_DB" != "x" ]; then - echo "No database files found. Initialising blank database" - sudo -u postgres $PG_BASE/bin/initdb -D $DATA_DIR -fi -sudo -u postgres $PG_BASE/bin/postgres -D $DATA_DIR -c config_file=$CONFIG_FILE & - -wait_for_database_to_be_ready() { - while ! (echo "select version()" | psql -U $DB_USERNAME); do - echo "Waiting 5 seconds for the database to come up" - sleep 5; - done -} - -if [ "x$NEW_DB" != "x" ]; then - echo "Creating database users" - wait_for_database_to_be_ready - psql -U postgres < 'auth:api'], function () { - Route::post('logout', [LoginController::class, 'logout']); + Route::post('logout', [LoginController::class, 'logout'])->name('logout'); + Route::post('update-credentials', [ProfileController::class, 'updateAdminCredentials'])->name('credentials.update'); Route::get('user', [UserController::class, 'current'])->name('user.current'); Route::delete('user', [UserController::class, 'deleteAccount']); @@ -252,7 +253,7 @@ Route::group(['middleware' => 'auth:api'], function () { }); Route::group(['middleware' => 'guest:api'], function () { - Route::post('login', [LoginController::class, 'login']); + Route::post('login', [LoginController::class, 'login'])->name('login'); Route::post('register', [RegisterController::class, 'register']); Route::post('password/email', [ForgotPasswordController::class, 'sendResetLinkEmail']);