From 66b3cdc0e0bf287af313b86dd02008bf8205f967 Mon Sep 17 00:00:00 2001 From: Maciej Kwiatkowski Date: Mon, 26 May 2025 13:13:20 +0200 Subject: [PATCH 1/3] Updated dependencies, hosting logo from local resource, updated invalid JS path --- application-example.yaml | 2 +- docker-compose.yml => compose.yml | 2 - composer.json | 14 +- composer.lock | 446 +++--- package-lock.json | 1352 +++++++++++++++++ package.json | 6 +- public/logo.svg | 1 + .../views/pages/invoice/getInvoices.blade.php | 2 +- .../views/pages/invoice/invoiceView.blade.php | 2 +- 9 files changed, 1595 insertions(+), 232 deletions(-) rename docker-compose.yml => compose.yml (98%) create mode 100644 package-lock.json create mode 100644 public/logo.svg diff --git a/application-example.yaml b/application-example.yaml index c382937..786ae21 100644 --- a/application-example.yaml +++ b/application-example.yaml @@ -9,7 +9,7 @@ bitpay: bgColor: "#100000" title: "BitPay Demo ts" body: "Mattis amet hendrerit dolor, quisque lorem pharetra. Pellentesque lacus nisi urna, arcu sociis eu. Orci vel lectus nisl eget eget ut consectetur. Sit justo viverra non adipisicing elit distinctio." - logo: "https://via.placeholder.com/300x75?text=LOGO" + logo: "/logo.svg" posData: fields: - type: "select" diff --git a/docker-compose.yml b/compose.yml similarity index 98% rename from docker-compose.yml rename to compose.yml index 10a1429..330d1f7 100644 --- a/docker-compose.yml +++ b/compose.yml @@ -1,5 +1,3 @@ -version: '3.8' - services: php-fpm: build: diff --git a/composer.json b/composer.json index e2ad878..3a7ea93 100644 --- a/composer.json +++ b/composer.json @@ -9,25 +9,25 @@ "license": "MIT", "require": { "php": "^8.1", - "bitpay/sdk": "^9.2.0", + "bitpay/sdk": "^9.2", "guzzlehttp/guzzle": "^7.9", "laravel/framework": "^10.48", - "laravel/sanctum": "^3.2", + "laravel/sanctum": "^3.3", "laravel/tinker": "^2.10", - "symfony/mercure": "^0.6.3", + "symfony/mercure": "^0.6.5", "symfony/serializer": "^6.4", - "symfony/serializer-pack": "*", + "symfony/serializer-pack": "^1.3", "symfony/yaml": "^6.4" }, "require-dev": { "fakerphp/faker": "^1.24", "laravel/pint": "^1.20", - "laravel/sail": "^1.41", - "mockery/mockery": "^1.4.4", + "laravel/sail": "^1.43", + "mockery/mockery": "^1.6", "nunomaduro/collision": "^7.12", "phpunit/phpunit": "^10.5", "spatie/laravel-ignition": "^2.9", - "squizlabs/php_codesniffer": "^3.12" + "squizlabs/php_codesniffer": "^3.13" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index a8c25bf..f76ecbb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "076792b0423ab66f2e95cc7b8cd15cd0", + "content-hash": "e560e2f2723bf1d7a9a6ba32faab7b38", "packages": [ { "name": "bitpay/key-utils", @@ -59,16 +59,16 @@ }, { "name": "bitpay/sdk", - "version": "9.2.0", + "version": "v9.2.1", "source": { "type": "git", "url": "https://github.com/bitpay/php-bitpay-client-v2.git", - "reference": "13cc6e053f5d494d85ce8e353e034db7195acc26" + "reference": "477284ad639064a760a2af85eea715ec4b1beddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bitpay/php-bitpay-client-v2/zipball/13cc6e053f5d494d85ce8e353e034db7195acc26", - "reference": "13cc6e053f5d494d85ce8e353e034db7195acc26", + "url": "https://api.github.com/repos/bitpay/php-bitpay-client-v2/zipball/477284ad639064a760a2af85eea715ec4b1beddd", + "reference": "477284ad639064a760a2af85eea715ec4b1beddd", "shasum": "" }, "require": { @@ -82,7 +82,7 @@ "symfony/yaml": "^5.0 || ^6.0 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^10.5.45 || ^11.5.7 || ^12.0.2" + "phpunit/phpunit": "^10.5 || ^11.5 || ^12.0" }, "type": "library", "autoload": { @@ -112,9 +112,9 @@ ], "support": { "issues": "https://github.com/bitpay/php-bitpay-client-v2/issues", - "source": "https://github.com/bitpay/php-bitpay-client-v2/tree/9.2.0" + "source": "https://github.com/bitpay/php-bitpay-client-v2/tree/v9.2.1" }, - "time": "2025-02-13T19:06:26+00:00" + "time": "2025-04-01T21:54:11+00:00" }, { "name": "brick/math", @@ -322,26 +322,29 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.4", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "1.4.10 || 2.0.3", + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -361,9 +364,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.4" + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" }, - "time": "2024-12-07T21:18:45+00:00" + "time": "2025-04-07T20:06:18+00:00" }, { "name": "doctrine/inflector", @@ -1669,16 +1672,16 @@ }, { "name": "league/commonmark", - "version": "2.6.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d990688c91cedfb69753ffc2512727ec646df2ad" + "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad", - "reference": "d990688c91cedfb69753ffc2512727ec646df2ad", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6fbb36d44824ed4091adbcf4c7d4a3923cdb3405", + "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405", "shasum": "" }, "require": { @@ -1715,7 +1718,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.7-dev" + "dev-main": "2.8-dev" } }, "autoload": { @@ -1772,7 +1775,7 @@ "type": "tidelift" } ], - "time": "2024-12-29T14:10:59+00:00" + "time": "2025-05-05T12:20:28+00:00" }, { "name": "league/config", @@ -2369,16 +2372,16 @@ }, { "name": "nette/utils", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + "reference": "ce708655043c7050eb050df361c5e313cf708309" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309", + "reference": "ce708655043c7050eb050df361c5e313cf708309", "shasum": "" }, "require": { @@ -2449,9 +2452,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" + "source": "https://github.com/nette/utils/tree/v4.0.6" }, - "time": "2024-08-07T15:39:19+00:00" + "time": "2025-03-30T21:06:30+00:00" }, { "name": "nikic/php-parser", @@ -2651,16 +2654,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.1", + "version": "5.6.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" + "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", - "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", + "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", "shasum": "" }, "require": { @@ -2709,9 +2712,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" }, - "time": "2024-12-07T09:39:29+00:00" + "time": "2025-04-13T19:20:35+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -3654,16 +3657,16 @@ }, { "name": "symfony/console", - "version": "v6.4.17", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "799445db3f15768ecc382ac5699e6da0520a0a04" + "reference": "a3011c7b7adb58d89f6c0d822abb641d7a5f9719" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/799445db3f15768ecc382ac5699e6da0520a0a04", - "reference": "799445db3f15768ecc382ac5699e6da0520a0a04", + "url": "https://api.github.com/repos/symfony/console/zipball/a3011c7b7adb58d89f6c0d822abb641d7a5f9719", + "reference": "a3011c7b7adb58d89f6c0d822abb641d7a5f9719", "shasum": "" }, "require": { @@ -3728,7 +3731,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.17" + "source": "https://github.com/symfony/console/tree/v6.4.21" }, "funding": [ { @@ -3744,7 +3747,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T12:07:30+00:00" + "time": "2025-04-07T15:42:41+00:00" }, { "name": "symfony/css-selector", @@ -3813,16 +3816,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -3835,7 +3838,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -3860,7 +3863,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -3876,20 +3879,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71" + "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/3d4e55cd2b8f1979a65eba9ab749d6466c316f71", - "reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/aa3bcf4f7674719df078e61cc8062e5b7f752031", + "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031", "shasum": "" }, "require": { @@ -3935,7 +3938,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/v6.4.19" + "source": "https://github.com/symfony/error-handler/tree/v6.4.20" }, "funding": [ { @@ -3951,7 +3954,7 @@ "type": "tidelift" } ], - "time": "2025-02-02T20:16:33+00:00" + "time": "2025-03-01T13:00:38+00:00" }, { "name": "symfony/event-dispatcher", @@ -4035,16 +4038,16 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -4058,7 +4061,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -4091,7 +4094,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -4107,7 +4110,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/finder", @@ -4268,16 +4271,16 @@ }, { "name": "symfony/http-client-contracts", - "version": "v3.5.2", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645" + "reference": "75d7043853a42837e68111812f4d964b01e5101c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ee8d807ab20fcb51267fdace50fbe3494c31e645", - "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", + "reference": "75d7043853a42837e68111812f4d964b01e5101c", "shasum": "" }, "require": { @@ -4290,7 +4293,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -4326,7 +4329,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.2" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.0" }, "funding": [ { @@ -4342,20 +4345,20 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:49:48+00:00" + "time": "2025-04-29T11:18:49+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.18", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db" + "reference": "3f0c7ea41db479383b81d436b836d37168fd5b99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0492d6217e5ab48f51fca76f64cf8e78919d0db", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3f0c7ea41db479383b81d436b836d37168fd5b99", + "reference": "3f0c7ea41db479383b81d436b836d37168fd5b99", "shasum": "" }, "require": { @@ -4403,7 +4406,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.18" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.21" }, "funding": [ { @@ -4419,20 +4422,20 @@ "type": "tidelift" } ], - "time": "2025-01-09T15:48:56+00:00" + "time": "2025-04-27T13:27:38+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.19", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c" + "reference": "983ca05eec6623920d24ec0f1005f487d3734a0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/88f2c9f7feff86bb7b9105c5151bc2c1404cd64c", - "reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/983ca05eec6623920d24ec0f1005f487d3734a0c", + "reference": "983ca05eec6623920d24ec0f1005f487d3734a0c", "shasum": "" }, "require": { @@ -4517,7 +4520,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/v6.4.19" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.21" }, "funding": [ { @@ -4533,20 +4536,20 @@ "type": "tidelift" } ], - "time": "2025-02-26T10:51:37+00:00" + "time": "2025-05-02T08:46:38+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.18", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11" + "reference": "ada2809ccd4ec27aba9fc344e3efdaec624c6438" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", - "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ada2809ccd4ec27aba9fc344e3efdaec624c6438", + "reference": "ada2809ccd4ec27aba9fc344e3efdaec624c6438", "shasum": "" }, "require": { @@ -4597,7 +4600,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.18" + "source": "https://github.com/symfony/mailer/tree/v6.4.21" }, "funding": [ { @@ -4613,7 +4616,7 @@ "type": "tidelift" } ], - "time": "2025-01-24T15:27:15+00:00" + "time": "2025-04-26T23:47:35+00:00" }, { "name": "symfony/mercure", @@ -4703,16 +4706,16 @@ }, { "name": "symfony/mime", - "version": "v6.4.19", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3" + "reference": "fec8aa5231f3904754955fad33c2db50594d22d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3", - "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3", + "url": "https://api.github.com/repos/symfony/mime/zipball/fec8aa5231f3904754955fad33c2db50594d22d1", + "reference": "fec8aa5231f3904754955fad33c2db50594d22d1", "shasum": "" }, "require": { @@ -4768,7 +4771,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.19" + "source": "https://github.com/symfony/mime/tree/v6.4.21" }, "funding": [ { @@ -4784,11 +4787,11 @@ "type": "tidelift" } ], - "time": "2025-02-17T21:23:52+00:00" + "time": "2025-04-27T13:27:38+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -4847,7 +4850,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" }, "funding": [ { @@ -4867,7 +4870,7 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", @@ -4925,7 +4928,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" }, "funding": [ { @@ -4945,16 +4948,16 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", "shasum": "" }, "require": { @@ -5008,7 +5011,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" }, "funding": [ { @@ -5024,11 +5027,11 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-09-10T14:38:51+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -5089,7 +5092,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" }, "funding": [ { @@ -5109,19 +5112,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -5169,7 +5173,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" }, "funding": [ { @@ -5185,20 +5189,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { @@ -5249,7 +5253,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" }, "funding": [ { @@ -5265,11 +5269,11 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", @@ -5325,7 +5329,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0" }, "funding": [ { @@ -5345,7 +5349,7 @@ }, { "name": "symfony/polyfill-uuid", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -5404,7 +5408,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" }, "funding": [ { @@ -5424,16 +5428,16 @@ }, { "name": "symfony/process", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3" + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3", - "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3", + "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20", + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20", "shasum": "" }, "require": { @@ -5465,7 +5469,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.19" + "source": "https://github.com/symfony/process/tree/v6.4.20" }, "funding": [ { @@ -5481,7 +5485,7 @@ "type": "tidelift" } ], - "time": "2025-02-04T13:35:48+00:00" + "time": "2025-03-10T17:11:00+00:00" }, { "name": "symfony/property-access", @@ -5731,16 +5735,16 @@ }, { "name": "symfony/serializer", - "version": "v6.4.19", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "a221b2f6066af304d760cff7a26f201b4fab4aef" + "reference": "c45f8f7763afb11e85772c0c1debb8f272c17f51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/a221b2f6066af304d760cff7a26f201b4fab4aef", - "reference": "a221b2f6066af304d760cff7a26f201b4fab4aef", + "url": "https://api.github.com/repos/symfony/serializer/zipball/c45f8f7763afb11e85772c0c1debb8f272c17f51", + "reference": "c45f8f7763afb11e85772c0c1debb8f272c17f51", "shasum": "" }, "require": { @@ -5809,7 +5813,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.19" + "source": "https://github.com/symfony/serializer/tree/v6.4.21" }, "funding": [ { @@ -5825,7 +5829,7 @@ "type": "tidelift" } ], - "time": "2025-02-24T08:42:36+00:00" + "time": "2025-04-27T13:27:38+00:00" }, { "name": "symfony/serializer-pack", @@ -5880,16 +5884,16 @@ }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", "shasum": "" }, "require": { @@ -5907,7 +5911,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -5943,7 +5947,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" }, "funding": [ { @@ -5959,20 +5963,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-04-25T09:37:31+00:00" }, { "name": "symfony/string", - "version": "v6.4.15", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" + "reference": "73e2c6966a5aef1d4892873ed5322245295370c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "url": "https://api.github.com/repos/symfony/string/zipball/73e2c6966a5aef1d4892873ed5322245295370c6", + "reference": "73e2c6966a5aef1d4892873ed5322245295370c6", "shasum": "" }, "require": { @@ -6029,7 +6033,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.15" + "source": "https://github.com/symfony/string/tree/v6.4.21" }, "funding": [ { @@ -6045,20 +6049,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:31:12+00:00" + "time": "2025-04-18T15:23:29+00:00" }, { "name": "symfony/translation", - "version": "v6.4.19", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e" + "reference": "bb92ea5588396b319ba43283a5a3087a034cb29c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/3b9bf9f33997c064885a7bfc126c14b9daa0e00e", - "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e", + "url": "https://api.github.com/repos/symfony/translation/zipball/bb92ea5588396b319ba43283a5a3087a034cb29c", + "reference": "bb92ea5588396b319ba43283a5a3087a034cb29c", "shasum": "" }, "require": { @@ -6124,7 +6128,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.19" + "source": "https://github.com/symfony/translation/tree/v6.4.21" }, "funding": [ { @@ -6140,20 +6144,20 @@ "type": "tidelift" } ], - "time": "2025-02-13T10:18:43+00:00" + "time": "2025-04-07T19:02:30+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", "shasum": "" }, "require": { @@ -6166,7 +6170,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -6202,7 +6206,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" }, "funding": [ { @@ -6218,7 +6222,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-27T08:32:26+00:00" }, { "name": "symfony/uid", @@ -6296,16 +6300,16 @@ }, { "name": "symfony/var-dumper", - "version": "v6.4.18", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837" + "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4ad10cf8b020e77ba665305bb7804389884b4837", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", + "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", "shasum": "" }, "require": { @@ -6361,7 +6365,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.18" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.21" }, "funding": [ { @@ -6377,7 +6381,7 @@ "type": "tidelift" } ], - "time": "2025-01-17T11:26:11+00:00" + "time": "2025-04-09T07:34:50+00:00" }, { "name": "symfony/web-link", @@ -6464,16 +6468,16 @@ }, { "name": "symfony/yaml", - "version": "v6.4.18", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5" + "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", - "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f01987f45676778b474468aa266fe2eda1f2bc7e", + "reference": "f01987f45676778b474468aa266fe2eda1f2bc7e", "shasum": "" }, "require": { @@ -6516,7 +6520,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.18" + "source": "https://github.com/symfony/yaml/tree/v6.4.21" }, "funding": [ { @@ -6532,7 +6536,7 @@ "type": "tidelift" } ], - "time": "2025-01-07T09:44:41+00:00" + "time": "2025-04-04T09:48:44+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -6591,16 +6595,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.6.1", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", "shasum": "" }, "require": { @@ -6659,7 +6663,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" }, "funding": [ { @@ -6671,7 +6675,7 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:52:34+00:00" + "time": "2025-04-30T23:37:27+00:00" }, { "name": "voku/portable-ascii", @@ -6943,20 +6947,20 @@ }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" + "php": "^7.4|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -6964,8 +6968,8 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -6988,9 +6992,9 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" }, - "time": "2020-07-09T08:09:16+00:00" + "time": "2025-04-30T06:54:44+00:00" }, { "name": "laravel/pint", @@ -7060,16 +7064,16 @@ }, { "name": "laravel/sail", - "version": "v1.41.0", + "version": "v1.43.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec" + "reference": "71a509b14b2621ce58574274a74290f933c687f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", - "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", + "url": "https://api.github.com/repos/laravel/sail/zipball/71a509b14b2621ce58574274a74290f933c687f7", + "reference": "71a509b14b2621ce58574274a74290f933c687f7", "shasum": "" }, "require": { @@ -7119,7 +7123,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2025-01-24T15:45:36+00:00" + "time": "2025-05-13T13:34:34+00:00" }, { "name": "mockery/mockery", @@ -7206,16 +7210,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.0", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414" + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", "shasum": "" }, "require": { @@ -7254,7 +7258,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" }, "funding": [ { @@ -7262,7 +7266,7 @@ "type": "tidelift" } ], - "time": "2025-02-12T12:17:51+00:00" + "time": "2025-04-29T12:36:36+00:00" }, { "name": "nunomaduro/collision", @@ -7801,16 +7805,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.45", + "version": "10.5.46", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "bd68a781d8e30348bc297449f5234b3458267ae8" + "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bd68a781d8e30348bc297449f5234b3458267ae8", - "reference": "bd68a781d8e30348bc297449f5234b3458267ae8", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8080be387a5be380dda48c6f41cee4a13aadab3d", + "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d", "shasum": "" }, "require": { @@ -7820,7 +7824,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", + "myclabs/deep-copy": "^1.13.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.1", @@ -7882,7 +7886,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.45" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.46" }, "funding": [ { @@ -7893,12 +7897,20 @@ "url": "https://github.com/sebastianbergmann", "type": "github" }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], - "time": "2025-02-06T16:08:12+00:00" + "time": "2025-05-02T06:46:24+00:00" }, { "name": "sebastian/cli-parser", @@ -8818,16 +8830,16 @@ }, { "name": "spatie/backtrace", - "version": "1.7.1", + "version": "1.7.4", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "0f2477c520e3729de58e061b8192f161c99f770b" + "reference": "cd37a49fce7137359ac30ecc44ef3e16404cccbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/0f2477c520e3729de58e061b8192f161c99f770b", - "reference": "0f2477c520e3729de58e061b8192f161c99f770b", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/cd37a49fce7137359ac30ecc44ef3e16404cccbe", + "reference": "cd37a49fce7137359ac30ecc44ef3e16404cccbe", "shasum": "" }, "require": { @@ -8865,7 +8877,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.7.1" + "source": "https://github.com/spatie/backtrace/tree/1.7.4" }, "funding": [ { @@ -8877,7 +8889,7 @@ "type": "other" } ], - "time": "2024-12-02T13:28:15+00:00" + "time": "2025-05-08T15:41:09+00:00" }, { "name": "spatie/error-solutions", @@ -9198,16 +9210,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.12.0", + "version": "3.13.0", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630" + "reference": "65ff2489553b83b4597e89c3b8b721487011d186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/2d1b63db139c3c6ea0c927698e5160f8b3b8d630", - "reference": "2d1b63db139c3c6ea0c927698e5160f8b3b8d630", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/65ff2489553b83b4597e89c3b8b721487011d186", + "reference": "65ff2489553b83b4597e89c3b8b721487011d186", "shasum": "" }, "require": { @@ -9278,7 +9290,7 @@ "type": "thanks_dev" } ], - "time": "2025-03-18T05:04:51+00:00" + "time": "2025-05-11T03:36:00+00:00" }, { "name": "theseer/tokenizer", @@ -9333,12 +9345,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { "php": "^8.1" }, - "platform-dev": {}, - "plugin-api-version": "2.6.0" + "platform-dev": [], + "plugin-api-version": "2.3.0" } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..bce725d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1352 @@ +{ + "name": "php-kiosk-demo-laravel", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "axios": "^1.9.0", + "laravel-vite-plugin": "^1.2.0", + "vite": "^6.3.5" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.2.0.tgz", + "integrity": "sha512-R0pJ+IcTVeqEMoKz/B2Ij57QVq3sFTABiFmb06gAwFdivbOgsUtuhX6N2MGLEArajrS3U5JbberzwOe7uXHMHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + } + } +} diff --git a/package.json b/package.json index 3a76ed0..412a8dd 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "build": "vite build" }, "devDependencies": { - "axios": "^1.1.2", - "laravel-vite-plugin": "^0.7.2", - "vite": "^4.0.0" + "axios": "^1.9.0", + "laravel-vite-plugin": "^1.2.0", + "vite": "^6.3.5" } } diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..57a07d0 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/views/pages/invoice/getInvoices.blade.php b/resources/views/pages/invoice/getInvoices.blade.php index 97c240e..6998115 100644 --- a/resources/views/pages/invoice/getInvoices.blade.php +++ b/resources/views/pages/invoice/getInvoices.blade.php @@ -64,7 +64,7 @@ - + @stop diff --git a/resources/views/pages/invoice/invoiceView.blade.php b/resources/views/pages/invoice/invoiceView.blade.php index 073cb3f..41c061a 100644 --- a/resources/views/pages/invoice/invoiceView.blade.php +++ b/resources/views/pages/invoice/invoiceView.blade.php @@ -67,7 +67,7 @@ - + @stop From 14c3dd49e31a0247a61569a8e2c0fa6522c10585 Mon Sep 17 00:00:00 2001 From: Maciej Kwiatkowski Date: Mon, 26 May 2025 16:51:27 +0200 Subject: [PATCH 2/3] Updated dependencies, fixed outdated test and their names, fixed wrong webhook validation --- .../BaseUpdateInvoiceValidator.php | 4 +- .../UpdateInvoiceIpnValidator.php | 2 + .../UpdateInvoiceUsingBitPayIpn.php | 11 +- .../Invoice/UpdateInvoiceController.php | 7 +- ...oiceTestCase.php => CreateInvoiceTest.php} | 2 +- ...oiceTestCase.php => CreateInvoiceTest.php} | 2 +- .../UpdateInvoice/UpdateInvoiceTest.php | 12 +- .../Invoice/UpdateInvoice/bitPayUpdate.json | 90 ++++++------ ...e.php => GetInvoiceViewControllerTest.php} | 2 +- ...Case.php => GetInvoicesControllerTest.php} | 2 +- ...oiceTestCase.php => UpdateInvoiceTest.php} | 39 +++-- tests/Integration/Http/updateInvoice.json | 51 ++++++- ...php => BaseUpdateInvoiceValidatorTest.php} | 4 +- .../UpdateInvoice/BitPayUpdateMapperTest.php | 2 +- .../UpdateInvoiceIpnValidatorTest.php | 135 ++++++++++++++++++ .../UpdateInvoiceIpnValidatorTestCase.php | 97 ------------- ...hp => UpdateInvoiceUsingBitPayIpnTest.php} | 15 +- .../ValidateBitPayWebhookTest.php | 4 + .../Invoice/UpdateInvoice/bitPayUpdate.json | 90 ++++++------ 19 files changed, 352 insertions(+), 219 deletions(-) rename tests/Functional/Http/{CreateInvoiceTestCase.php => CreateInvoiceTest.php} (98%) rename tests/Integration/Features/Invoice/CreateInvoice/{CreateInvoiceTestCase.php => CreateInvoiceTest.php} (97%) rename tests/Integration/Http/{GetInvoiceViewControllerTestCase.php => GetInvoiceViewControllerTest.php} (93%) rename tests/Integration/Http/{GetInvoicesControllerTestCase.php => GetInvoicesControllerTest.php} (90%) rename tests/Integration/Http/{UpdateInvoiceTestCase.php => UpdateInvoiceTest.php} (63%) rename tests/Unit/Features/Invoice/UpdateInvoice/{BaseUpdateInvoiceValidatorTestCase.php => BaseUpdateInvoiceValidatorTest.php} (81%) create mode 100644 tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidatorTest.php delete mode 100644 tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidatorTestCase.php rename tests/Unit/Features/Invoice/UpdateInvoice/{UpdateInvoiceUsingBitPayIpnTestCase.php => UpdateInvoiceUsingBitPayIpnTest.php} (93%) diff --git a/app/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidator.php b/app/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidator.php index 9f1814e..28e7303 100644 --- a/app/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidator.php +++ b/app/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidator.php @@ -13,9 +13,9 @@ final class BaseUpdateInvoiceValidator implements UpdateInvoiceValidator { - public function execute(?array $data, ?BitPayInvoice $bitPayInvoice, array $headers): void + public function execute(?array $payload, ?BitPayInvoice $bitPayInvoice, array $headers): void { - if (!$data) { + if (!$payload) { throw new ValidationFailed('Missing data'); } } diff --git a/app/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidator.php b/app/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidator.php index b93f602..a3b6cc8 100644 --- a/app/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidator.php +++ b/app/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidator.php @@ -42,7 +42,9 @@ public function execute(?array $data, ?BitPayInvoice $bitPayInvoice, ?array $hea throw new ValidationFailed(self::MISSING_BITPAY_MESSAGE); } + $data = $data['data']; $bitPayId = $data['id'] ?? null; + if (!$bitPayId || (string)$bitPayId !== (string)$bitPayInvoice->getId()) { throw new ValidationFailed(self::WRONG_BITPAY_INVOICE_ID_MESSAGE); } diff --git a/app/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpn.php b/app/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpn.php index 196cdc7..673b832 100644 --- a/app/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpn.php +++ b/app/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpn.php @@ -46,7 +46,7 @@ public function __construct( $this->bitPayConfiguration = $bitPayConfiguration; } - public function execute(string $uuid, array $data, array $headers): void + public function execute(string $uuid, array $payload, array $headers): void { $invoice = $this->invoiceRepository->findOneByUuid($uuid); if (!$invoice) { @@ -62,8 +62,15 @@ public function execute(string $uuid, array $data, array $headers): void $this->bitPayConfiguration->isSignRequest() ); + $this->updateInvoiceValidator->execute($payload, $bitPayInvoice, $headers); + + $event = $payload['event']; + $data = $payload['data']; + + $data['uuid'] = $uuid; + $data['event'] = $event['name']; + $updateInvoiceData = $this->bitPayUpdateMapper->execute($data)->toArray(); - $this->updateInvoiceValidator->execute($data, $bitPayInvoice, $headers); $this->updateInvoice($invoice, $updateInvoiceData); diff --git a/app/Http/Controllers/Invoice/UpdateInvoiceController.php b/app/Http/Controllers/Invoice/UpdateInvoiceController.php index 331b154..84fb24c 100644 --- a/app/Http/Controllers/Invoice/UpdateInvoiceController.php +++ b/app/Http/Controllers/Invoice/UpdateInvoiceController.php @@ -32,14 +32,9 @@ public function execute(Request $request, string $uuid): Response $this->logger->info('IPN_RECEIVED', 'Received IPN', $request->request->all()); $payload = json_decode($request->getContent(), true); - $data = $payload['data']; - $event = $payload['event']; - - $data['uuid'] = $uuid; - $data['event'] = $event['name'] ?? null; try { - $this->updateInvoice->execute($uuid, $data, $request->headers->all()); + $this->updateInvoice->execute($uuid, $payload, $request->headers->all()); } catch (MissingInvoice $e) { return response(null, Response::HTTP_NOT_FOUND); } catch (SignatureVerificationFailed $e) { diff --git a/tests/Functional/Http/CreateInvoiceTestCase.php b/tests/Functional/Http/CreateInvoiceTest.php similarity index 98% rename from tests/Functional/Http/CreateInvoiceTestCase.php rename to tests/Functional/Http/CreateInvoiceTest.php index 92100f6..963325e 100644 --- a/tests/Functional/Http/CreateInvoiceTestCase.php +++ b/tests/Functional/Http/CreateInvoiceTest.php @@ -13,7 +13,7 @@ use App\Models\Invoice\InvoiceRepositoryInterface; use Tests\Functional\AbstractFunctionalTestCase; -class CreateInvoiceTestCase extends AbstractFunctionalTestCase +class CreateInvoiceTest extends AbstractFunctionalTestCase { /** * @test diff --git a/tests/Integration/Features/Invoice/CreateInvoice/CreateInvoiceTestCase.php b/tests/Integration/Features/Invoice/CreateInvoice/CreateInvoiceTest.php similarity index 97% rename from tests/Integration/Features/Invoice/CreateInvoice/CreateInvoiceTestCase.php rename to tests/Integration/Features/Invoice/CreateInvoice/CreateInvoiceTest.php index 59e2a54..99ce252 100644 --- a/tests/Integration/Features/Invoice/CreateInvoice/CreateInvoiceTestCase.php +++ b/tests/Integration/Features/Invoice/CreateInvoice/CreateInvoiceTest.php @@ -19,7 +19,7 @@ use Tests\Integration\ExampleSdkInvoice; use Tests\Integration\IntegrationTestCase; -class CreateInvoiceTestCase extends IntegrationTestCase +class CreateInvoiceTest extends IntegrationTestCase { /** * @test diff --git a/tests/Integration/Features/Invoice/UpdateInvoice/UpdateInvoiceTest.php b/tests/Integration/Features/Invoice/UpdateInvoice/UpdateInvoiceTest.php index c54c2b9..7f6cabd 100644 --- a/tests/Integration/Features/Invoice/UpdateInvoice/UpdateInvoiceTest.php +++ b/tests/Integration/Features/Invoice/UpdateInvoice/UpdateInvoiceTest.php @@ -40,7 +40,7 @@ public function it_should_update_invoice_and_send_update_notification() $mock->shouldReceive('create')->andReturn(new class ('', '') extends PosClient { public function getInvoice( string $invoiceId, - string $facade = Facade::Merchant, + string $facade = Facade::MERCHANT, bool $signRequest = true ): Invoice { $invoice = new Invoice(); @@ -69,8 +69,8 @@ public function getInvoice( Assert::assertEquals(ExampleInvoice::TOKEN, $invoice->token); Assert::assertEquals('someBitpayId', $invoice->bitpay_id); - Assert::assertEquals('https://test.bitpay.com/invoice?id=MV9fy5iNDkqrg4qrfYpw75', $invoice->bitpay_url); - // phpcs:disable Generic.Files.LineLength.TooLong + Assert::assertEquals('https://test.bitpay.com/invoice?id=someBitpayId', $invoice->bitpay_url); + // phpcs:ignore Generic.Files.LineLength.TooLong Assert::assertEquals("{\"store\":\"store-1\",\"register\":\"2\",\"reg_transaction_no\":\"87678\",\"price\":\"76.70\"}", $invoice->pos_data_json); Assert::assertEquals('expired', $invoice->status); Assert::assertEquals(76.7, $invoice->price); @@ -102,7 +102,7 @@ public function it_should_fail_updating_invoice_with_invalid_webhook_signature() $mock->shouldReceive('create')->andReturn(new class ('', '') extends PosClient { public function getInvoice( string $invoiceId, - string $facade = Facade::Merchant, + string $facade = Facade::MERCHANT, bool $signRequest = true ): Invoice { $invoice = new Invoice(); @@ -149,7 +149,7 @@ public function it_should_fail_updating_invoice_with_missing_configuration_token $mock->shouldReceive('create')->andReturn(new class ('', '') extends PosClient { public function getInvoice( string $invoiceId, - string $facade = Facade::Merchant, + string $facade = Facade::MERCHANT, bool $signRequest = true ): Invoice { $invoice = new Invoice(); @@ -197,7 +197,7 @@ public function it_should_fail_updating_invoice_with_missing_sig_header(): void $mock->shouldReceive('create')->andReturn(new class ('', '') extends PosClient { public function getInvoice( string $invoiceId, - string $facade = Facade::Merchant, + string $facade = Facade::MERCHANT, bool $signRequest = true ): Invoice { $invoice = new Invoice(); diff --git a/tests/Integration/Features/Invoice/UpdateInvoice/bitPayUpdate.json b/tests/Integration/Features/Invoice/UpdateInvoice/bitPayUpdate.json index 096fbd0..ae0b0dd 100644 --- a/tests/Integration/Features/Invoice/UpdateInvoice/bitPayUpdate.json +++ b/tests/Integration/Features/Invoice/UpdateInvoice/bitPayUpdate.json @@ -1,44 +1,50 @@ { - "id": "someBitpayId", - "url": "https://test.bitpay.com/invoice?id=MV9fy5iNDkqrg4qrfYpw75", - "posData": "{\"store\":\"store-1\",\"register\":\"2\",\"reg_transaction_no\":\"87678\",\"price\":\"76.70\"}", - "status": "expired", - "price": 76.7, - "currency": "USD", - "invoiceTime": 1678714659517, - "expirationTime": 1678715559517, - "currentTime": 1678715642261, - "exceptionStatus": false, - "buyerFields": {}, - "paymentSubtotals": { - "BTC": 342800, - "BCH": 62648000, - "ETH": 48312000000000000, - "GUSD": 7670, - "PAX": 76700000000000000000, - "BUSD": 76700000000000000000, - "USDC": 76700000, - "DOGE": 111086650500, - "LTC": 101107300, - "MATIC": 69057493000000000000, - "USDC_m": 76700000, - "USDT": 76500000 + "event": { + "code": 1004, + "name": "invoice_expired" }, - "paymentTotals": { - "BTC": 347100, - "BCH": 62648000, - "ETH": 48312000000000000, - "GUSD": 7670, - "PAX": 76700000000000000000, - "BUSD": 76700000000000000000, - "USDC": 76700000, - "DOGE": 111086650500, - "LTC": 101107300, - "MATIC": 69057493000000000000, - "USDC_m": 76700000, - "USDT": 76500000 - }, - "exchangeRates": {}, - "amountPaid": 0, - "orderId": "someBitpayOrderId" -} + "data": { + "id": "someBitpayId", + "url": "https://test.bitpay.com/invoice?id=someBitpayId", + "posData": "{\"store\":\"store-1\",\"register\":\"2\",\"reg_transaction_no\":\"87678\",\"price\":\"76.70\"}", + "status": "expired", + "price": 76.7, + "currency": "USD", + "invoiceTime": 1678714659517, + "expirationTime": 1678715559517, + "currentTime": 1678715642261, + "exceptionStatus": false, + "buyerFields": {}, + "paymentSubtotals": { + "BTC": 342800, + "BCH": 62648000, + "ETH": 48312000000000000, + "GUSD": 7670, + "PAX": 76700000000000000000, + "BUSD": 76700000000000000000, + "USDC": 76700000, + "DOGE": 111086650500, + "LTC": 101107300, + "MATIC": 69057493000000000000, + "USDC_m": 76700000, + "USDT": 76500000 + }, + "paymentTotals": { + "BTC": 347100, + "BCH": 62648000, + "ETH": 48312000000000000, + "GUSD": 7670, + "PAX": 76700000000000000000, + "BUSD": 76700000000000000000, + "USDC": 76700000, + "DOGE": 111086650500, + "LTC": 101107300, + "MATIC": 69057493000000000000, + "USDC_m": 76700000, + "USDT": 76500000 + }, + "exchangeRates": {}, + "amountPaid": 0, + "orderId": "someBitpayOrderId" + } +} \ No newline at end of file diff --git a/tests/Integration/Http/GetInvoiceViewControllerTestCase.php b/tests/Integration/Http/GetInvoiceViewControllerTest.php similarity index 93% rename from tests/Integration/Http/GetInvoiceViewControllerTestCase.php rename to tests/Integration/Http/GetInvoiceViewControllerTest.php index 81028a7..81e3b49 100644 --- a/tests/Integration/Http/GetInvoiceViewControllerTestCase.php +++ b/tests/Integration/Http/GetInvoiceViewControllerTest.php @@ -12,7 +12,7 @@ use Tests\ExampleInvoice; use Tests\Integration\IntegrationTestCase; -class GetInvoiceViewControllerTestCase extends IntegrationTestCase +class GetInvoiceViewControllerTest extends IntegrationTestCase { /** * @test diff --git a/tests/Integration/Http/GetInvoicesControllerTestCase.php b/tests/Integration/Http/GetInvoicesControllerTest.php similarity index 90% rename from tests/Integration/Http/GetInvoicesControllerTestCase.php rename to tests/Integration/Http/GetInvoicesControllerTest.php index 87711fe..be6cb04 100644 --- a/tests/Integration/Http/GetInvoicesControllerTestCase.php +++ b/tests/Integration/Http/GetInvoicesControllerTest.php @@ -11,7 +11,7 @@ use Tests\ExampleInvoice; use Tests\Integration\IntegrationTestCase; -class GetInvoicesControllerTestCase extends IntegrationTestCase +class GetInvoicesControllerTest extends IntegrationTestCase { /** * @test diff --git a/tests/Integration/Http/UpdateInvoiceTestCase.php b/tests/Integration/Http/UpdateInvoiceTest.php similarity index 63% rename from tests/Integration/Http/UpdateInvoiceTestCase.php rename to tests/Integration/Http/UpdateInvoiceTest.php index 666a709..5766b12 100644 --- a/tests/Integration/Http/UpdateInvoiceTestCase.php +++ b/tests/Integration/Http/UpdateInvoiceTest.php @@ -10,6 +10,7 @@ use App\Features\Invoice\UpdateInvoice\SendUpdateInvoiceEventStream; use App\Features\Shared\BitPayClientFactory; +use App\Features\Shared\Configuration\BitPayConfigurationInterface; use App\Models\Invoice\InvoiceRepositoryInterface; use BitPaySDK\Model\Facade; use BitPaySDK\Model\Invoice\Invoice; @@ -19,7 +20,7 @@ use Tests\ExampleInvoice; use Tests\Integration\IntegrationTestCase; -class UpdateInvoiceTestCase extends IntegrationTestCase +class UpdateInvoiceTest extends IntegrationTestCase { /** * @test @@ -27,8 +28,14 @@ class UpdateInvoiceTestCase extends IntegrationTestCase */ public function it_should_throws_404_for_update_invoice_with_non_existing_uuid(): void { + $this->mock(BitPayConfigurationInterface::class, function (MockInterface $mock) { + $mock->shouldReceive('getToken')->andReturn(ExampleInvoice::TOKEN); + }); + $json = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'updateInvoice.json'); - $result = $this->postJson('/invoices/non-existing-uuid', json_decode($json, true, 512, JSON_THROW_ON_ERROR)); + $jsonData = json_decode($json, true, 512, JSON_THROW_ON_ERROR); + $signature = base64_encode(hash_hmac('sha256', json_encode($jsonData['data']), ExampleInvoice::TOKEN, true)); + $result = $this->postJson('/invoices/non-existing-uuid', $jsonData, ['X-Signature' => $signature]); $result->assertStatus(Response::HTTP_NOT_FOUND); } @@ -50,7 +57,7 @@ public function it_should_not_update_invoice_for_invalid_bitpay_order_id(): void $mock->shouldReceive('create')->andReturn(new class ('', '') extends PosClient { public function getInvoice( string $invoiceId, - string $facade = Facade::Merchant, + string $facade = Facade::MERCHANT, bool $signRequest = true ): Invoice { return new Invoice(); @@ -58,11 +65,19 @@ public function getInvoice( }); }); + $this->mock(BitPayConfigurationInterface::class, function (MockInterface $mock) { + $mock->shouldReceive('getToken')->andReturn(ExampleInvoice::TOKEN); + $mock->shouldReceive('getFacade')->andReturn(Facade::MERCHANT); + $mock->shouldReceive('isSignRequest')->andReturn(true); + }); + // when - $result = $this->postJson('/invoices/' . $uuid, json_decode($json, true, 512, JSON_THROW_ON_ERROR)); + $jsonData = json_decode($json, true, 512, JSON_THROW_ON_ERROR); + $signature = base64_encode(hash_hmac('sha256', json_encode($jsonData['data']), ExampleInvoice::TOKEN, true)); + $result = $this->postJson('/invoices/' . $uuid, $jsonData, ['X-Signature' => $signature]); // then - $result->assertStatus(Response::HTTP_BAD_REQUEST); + $result->assertStatus(Response::HTTP_UNAUTHORIZED); } /** @@ -82,7 +97,7 @@ public function it_should_update_invoice(): void $mock->shouldReceive('create')->andReturn(new class ('', '') extends PosClient { public function getInvoice( string $invoiceId, - string $facade = Facade::Merchant, + string $facade = Facade::MERCHANT, bool $signRequest = true ): Invoice { $invoice = new Invoice(); @@ -98,8 +113,16 @@ public function getInvoice( $mock->shouldReceive('execute')->times(1); }); + $this->mock(BitPayConfigurationInterface::class, function (MockInterface $mock) { + $mock->shouldReceive('getToken')->andReturn(ExampleInvoice::TOKEN); + $mock->shouldReceive('getFacade')->andReturn(Facade::MERCHANT); + $mock->shouldReceive('isSignRequest')->andReturn(true); + }); + // when - $result = $this->postJson('/invoices/' . $uuid, json_decode($json, true, 512, JSON_THROW_ON_ERROR)); + $jsonData = json_decode($json, true, 512, JSON_THROW_ON_ERROR); + $signature = base64_encode(hash_hmac('sha256', json_encode($jsonData), ExampleInvoice::TOKEN, true)); + $result = $this->postJson('/invoices/' . $uuid, $jsonData, ['X-Signature' => $signature]); /** @var InvoiceRepositoryInterface $invoiceRepository */ $invoiceRepository = $this->app->make(InvoiceRepositoryInterface::class); $invoice = $invoiceRepository->findOne(1); @@ -109,7 +132,7 @@ public function getInvoice( self::assertEquals('expired', $invoice->status); self::assertEquals(76.7, $invoice->price); self::assertEquals( - 'https://test.bitpay.com/invoice?id=MV9fy5iNDkqrg4qrfYpw1h', + 'https://test.bitpay.com/invoice?id=someBitpayId', $invoice->bitpay_url ); // updated url self::assertEquals('false', $invoice->exception_status); diff --git a/tests/Integration/Http/updateInvoice.json b/tests/Integration/Http/updateInvoice.json index a499929..ae0b0dd 100644 --- a/tests/Integration/Http/updateInvoice.json +++ b/tests/Integration/Http/updateInvoice.json @@ -1 +1,50 @@ -{"event":{"code":1004,"name":"invoice_expired"},"data":{"id":"someBitpayId","url":"https://test.bitpay.com/invoice?id=MV9fy5iNDkqrg4qrfYpw1h","posData":"{\"store\":\"store-1\",\"register\":\"2\",\"reg_transaction_no\":\"87678\",\"price\":\"76.70\"}","status":"expired","price":76.7,"currency":"USD","invoiceTime":1678714659517,"expirationTime":1678715559517,"currentTime":1678715642261,"exceptionStatus":false,"buyerFields":{},"paymentSubtotals":{"BTC":342800,"BCH":62648000,"ETH":48312000000000000,"GUSD":7670,"PAX":76700000000000000000,"BUSD":76700000000000000000,"USDC":76700000,"DOGE":111086650500,"LTC":101107300,"MATIC":69057493000000000000,"USDC_m":76700000,"USDT":76500000},"paymentTotals":{"BTC":347100,"BCH":62648000,"ETH":48312000000000000,"GUSD":7670,"PAX":76700000000000000000,"BUSD":76700000000000000000,"USDC":76700000,"DOGE":111086650500,"LTC":101107300,"MATIC":69057493000000000000,"USDC_m":76700000,"USDT":76500000},"exchangeRates":{},"amountPaid":0,"orderId":"someBitpayOrderId"}} +{ + "event": { + "code": 1004, + "name": "invoice_expired" + }, + "data": { + "id": "someBitpayId", + "url": "https://test.bitpay.com/invoice?id=someBitpayId", + "posData": "{\"store\":\"store-1\",\"register\":\"2\",\"reg_transaction_no\":\"87678\",\"price\":\"76.70\"}", + "status": "expired", + "price": 76.7, + "currency": "USD", + "invoiceTime": 1678714659517, + "expirationTime": 1678715559517, + "currentTime": 1678715642261, + "exceptionStatus": false, + "buyerFields": {}, + "paymentSubtotals": { + "BTC": 342800, + "BCH": 62648000, + "ETH": 48312000000000000, + "GUSD": 7670, + "PAX": 76700000000000000000, + "BUSD": 76700000000000000000, + "USDC": 76700000, + "DOGE": 111086650500, + "LTC": 101107300, + "MATIC": 69057493000000000000, + "USDC_m": 76700000, + "USDT": 76500000 + }, + "paymentTotals": { + "BTC": 347100, + "BCH": 62648000, + "ETH": 48312000000000000, + "GUSD": 7670, + "PAX": 76700000000000000000, + "BUSD": 76700000000000000000, + "USDC": 76700000, + "DOGE": 111086650500, + "LTC": 101107300, + "MATIC": 69057493000000000000, + "USDC_m": 76700000, + "USDT": 76500000 + }, + "exchangeRates": {}, + "amountPaid": 0, + "orderId": "someBitpayOrderId" + } +} \ No newline at end of file diff --git a/tests/Unit/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidatorTestCase.php b/tests/Unit/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidatorTest.php similarity index 81% rename from tests/Unit/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidatorTestCase.php rename to tests/Unit/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidatorTest.php index 7e5b68b..c2f3c32 100644 --- a/tests/Unit/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidatorTestCase.php +++ b/tests/Unit/Features/Invoice/UpdateInvoice/BaseUpdateInvoiceValidatorTest.php @@ -12,7 +12,7 @@ use App\Features\Invoice\UpdateInvoice\BaseUpdateInvoiceValidator; use Tests\Unit\AbstractUnitTestCase; -class BaseUpdateInvoiceValidatorTestCase extends AbstractUnitTestCase +class BaseUpdateInvoiceValidatorTest extends AbstractUnitTestCase { /** * @test @@ -22,6 +22,6 @@ public function it_should_throws_exception_for_missing_data(): void $this->expectException(ValidationFailed::class); $testedClass = new BaseUpdateInvoiceValidator(); - $testedClass->execute(null, null); + $testedClass->execute(null, null, []); } } diff --git a/tests/Unit/Features/Invoice/UpdateInvoice/BitPayUpdateMapperTest.php b/tests/Unit/Features/Invoice/UpdateInvoice/BitPayUpdateMapperTest.php index 5732726..9f3a21e 100644 --- a/tests/Unit/Features/Invoice/UpdateInvoice/BitPayUpdateMapperTest.php +++ b/tests/Unit/Features/Invoice/UpdateInvoice/BitPayUpdateMapperTest.php @@ -23,7 +23,7 @@ public function it_should_map_bitpay_response_to_application_invoice_fields() $fileData = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'bitPayUpdate.json'); $data = json_decode($fileData, true, 512, JSON_THROW_ON_ERROR); - $mappedData = $this->getTestedClass()->execute($data); + $mappedData = $this->getTestedClass()->execute($data['data']); $expected = [ 'bitpay_id' => 'MV9fy5iNDkqrg4qrfYpw75', diff --git a/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidatorTest.php b/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidatorTest.php new file mode 100644 index 0000000..a947666 --- /dev/null +++ b/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidatorTest.php @@ -0,0 +1,135 @@ +createMock(Logger::class); + /** @var UpdateInvoiceValidator|\PHPUnit\Framework\MockObject\MockObject $baseUpdateInvoiceValidator */ + $baseUpdateInvoiceValidator = $this->createMock(UpdateInvoiceValidator::class); + $bitPaySignatureValidator = $this->createBitPaySignatureValidator(); + + $class = new UpdateInvoiceIpnValidator($baseUpdateInvoiceValidator, $logger, $bitPaySignatureValidator); + + $baseUpdateInvoiceValidator->expects(self::once())->method('execute'); + $this->expectException(ValidationFailed::class); + $this->expectExceptionMessage(UpdateInvoiceIpnValidator::MISSING_BITPAY_MESSAGE); + $logger->expects(self::once())->method('error'); + + $class->execute([], null, $this->createValidHeaders([])); + } + + /** + * @test + */ + public function it_should_throws_exception_for_invalid_id(): void + { + /** @var Logger|\PHPUnit\Framework\MockObject\MockObject $logger */ + $logger = $this->createMock(Logger::class); + /** @var UpdateInvoiceValidator|\PHPUnit\Framework\MockObject\MockObject $baseUpdateInvoiceValidator */ + $baseUpdateInvoiceValidator = $this->createMock(UpdateInvoiceValidator::class); + $bitPaySignatureValidator = $this->createBitPaySignatureValidator(); + /** @var Invoice|\PHPUnit\Framework\MockObject\MockObject $bitPayInvoice */ + $bitPayInvoice = $this->createMock(Invoice::class); + $class = new UpdateInvoiceIpnValidator($baseUpdateInvoiceValidator, $logger, $bitPaySignatureValidator); + + $bitPayInvoice->method('getId')->willReturn('5'); + + $baseUpdateInvoiceValidator->expects(self::once())->method('execute'); + $logger->expects(self::once())->method('error'); + $this->expectExceptionMessage(UpdateInvoiceIpnValidator::WRONG_BITPAY_INVOICE_ID_MESSAGE); + + $data = ['data' => ['id' => 4]]; + $class->execute($data, $bitPayInvoice, $this->createValidHeaders($data)); + } + + /** + * @test + */ + public function it_should_throws_exception_for_invalid_order_id(): void + { + $bitPayId = 4; + /** @var Logger|\PHPUnit\Framework\MockObject\MockObject $logger */ + $logger = $this->createMock(Logger::class); + /** @var UpdateInvoiceValidator|\PHPUnit\Framework\MockObject\MockObject $baseUpdateInvoiceValidator */ + $baseUpdateInvoiceValidator = $this->createMock(UpdateInvoiceValidator::class); + $bitPaySignatureValidator = $this->createBitPaySignatureValidator(); + /** @var Invoice|\PHPUnit\Framework\MockObject\MockObject $bitPayInvoice */ + $bitPayInvoice = $this->createMock(Invoice::class); + $class = new UpdateInvoiceIpnValidator($baseUpdateInvoiceValidator, $logger, $bitPaySignatureValidator); + + $bitPayInvoice->method('getId')->willReturn((string)$bitPayId); + $bitPayInvoice->method('getOrderId')->willReturn('invalidOrderId'); + + $baseUpdateInvoiceValidator->expects(self::once())->method('execute'); + $logger->expects(self::once())->method('error'); + $this->expectExceptionMessage(UpdateInvoiceIpnValidator::WRONG_BIT_PAY_ORDER_ID_MESSAGE); + + $data = ['data' => ['id' => $bitPayId, 'orderId' => 12]]; + $class->execute($data, $bitPayInvoice, $this->createValidHeaders($data)); + } + + /** + * @test + */ + public function it_should_pass_validate(): void + { + $bitPayId = 4; + $bitPayOrderId = 12; + /** @var Logger|\PHPUnit\Framework\MockObject\MockObject $logger */ + $logger = $this->createMock(Logger::class); + /** @var UpdateInvoiceValidator|\PHPUnit\Framework\MockObject\MockObject $baseUpdateInvoiceValidator */ + $baseUpdateInvoiceValidator = $this->createMock(UpdateInvoiceValidator::class); + $bitPaySignatureValidator = $this->createBitPaySignatureValidator(); + /** @var Invoice|\PHPUnit\Framework\MockObject\MockObject $bitPayInvoice */ + $bitPayInvoice = $this->createMock(Invoice::class); + $class = new UpdateInvoiceIpnValidator($baseUpdateInvoiceValidator, $logger, $bitPaySignatureValidator); + + $bitPayInvoice->method('getId')->willReturn((string)$bitPayId); + $bitPayInvoice->method('getOrderId')->willReturn((string)$bitPayOrderId); + + $baseUpdateInvoiceValidator->expects(self::once())->method('execute'); + $logger->expects(self::once())->method('info'); + + $data = ['data' => ['id' => $bitPayId, 'orderId' => $bitPayOrderId]]; + $class->execute($data, $bitPayInvoice, $this->createValidHeaders($data)); + } + + private function createBitPaySignatureValidator(): BitPaySignatureValidator + { + /** @var BitPayConfigurationInterface|\PHPUnit\Framework\MockObject\MockObject $bitPayConfig */ + $bitPayConfig = $this->createMock(BitPayConfigurationInterface::class); + $bitPayConfig->method('getToken')->willReturn('test-token'); + + return new BitPaySignatureValidator($bitPayConfig); + } + + private function createValidHeaders(array $data): array + { + $token = 'test-token'; + $signature = base64_encode(hash_hmac('sha256', json_encode($data), $token, true)); + + return ['x-signature' => [$signature]]; + } +} diff --git a/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidatorTestCase.php b/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidatorTestCase.php deleted file mode 100644 index a037a79..0000000 --- a/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceIpnValidatorTestCase.php +++ /dev/null @@ -1,97 +0,0 @@ -createStub(Logger::class); - $baseUpdateInvoiceValidator = $this->createStub(UpdateInvoiceValidator::class); - $class = new UpdateInvoiceIpnValidator($baseUpdateInvoiceValidator, $logger); - - $baseUpdateInvoiceValidator->expects(self::once())->method('execute'); - $this->expectException(ValidationFailed::class); - $this->expectExceptionMessage(UpdateInvoiceIpnValidator::MISSING_BITPAY_MESSAGE); - $logger->expects(self::once())->method('error'); - - $class->execute([], null); - } - - /** - * @test - */ - public function it_should_throws_exception_for_invalid_id(): void - { - $logger = $this->createStub(Logger::class); - $baseUpdateInvoiceValidator = $this->createStub(UpdateInvoiceValidator::class); - $bitPayInvoice = $this->createMock(Invoice::class); - $class = new UpdateInvoiceIpnValidator($baseUpdateInvoiceValidator, $logger); - - $bitPayInvoice->method('getId')->willReturn('5'); - - $baseUpdateInvoiceValidator->expects(self::once())->method('execute'); - $logger->expects(self::once())->method('error'); - $this->expectExceptionMessage(UpdateInvoiceIpnValidator::WRONG_BITPAY_INVOICE_ID_MESSAGE); - - $class->execute(['id' => 4], $bitPayInvoice); - } - - /** - * @test - */ - public function it_should_throws_exception_for_invalid_order_id(): void - { - $bitPayId = 4; - $logger = $this->createStub(Logger::class); - $baseUpdateInvoiceValidator = $this->createStub(UpdateInvoiceValidator::class); - $bitPayInvoice = $this->createMock(Invoice::class); - $class = new UpdateInvoiceIpnValidator($baseUpdateInvoiceValidator, $logger); - - $bitPayInvoice->method('getId')->willReturn((string)$bitPayId); - $bitPayInvoice->method('getOrderId')->willReturn('invalidOrderId'); - - $baseUpdateInvoiceValidator->expects(self::once())->method('execute'); - $logger->expects(self::once())->method('error'); - $this->expectExceptionMessage(UpdateInvoiceIpnValidator::WRONG_BIT_PAY_ORDER_ID_MESSAGE); - - $class->execute(['id' => $bitPayId, 'orderId' => 12], $bitPayInvoice); - } - - /** - * @test - */ - public function it_should_pass_validate(): void - { - $bitPayId = 4; - $bitPayOrderId = 12; - $logger = $this->createMock(Logger::class); - $baseUpdateInvoiceValidator = $this->createStub(UpdateInvoiceValidator::class); - $bitPayInvoice = $this->createMock(Invoice::class); - $class = new UpdateInvoiceIpnValidator($baseUpdateInvoiceValidator, $logger); - - $bitPayInvoice->method('getId')->willReturn((string)$bitPayId); - $bitPayInvoice->method('getOrderId')->willReturn((string)$bitPayOrderId); - - $baseUpdateInvoiceValidator->expects(self::once())->method('execute'); - $logger->expects(self::once())->method('info'); - - $class->execute(['id' => $bitPayId, 'orderId' => $bitPayOrderId], $bitPayInvoice); - } -} diff --git a/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpnTestCase.php b/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpnTest.php similarity index 93% rename from tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpnTestCase.php rename to tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpnTest.php index 60f17d0..3c82f2d 100644 --- a/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpnTestCase.php +++ b/tests/Unit/Features/Invoice/UpdateInvoice/UpdateInvoiceUsingBitPayIpnTest.php @@ -12,9 +12,7 @@ use App\Features\Shared\Configuration\BitPayConfigurationInterface; use App\Shared\Exceptions\MissingInvoice; use App\Features\Invoice\UpdateInvoice\BitPayUpdateMapper; -use App\Features\Invoice\UpdateInvoice\SendUpdateInvoiceEventStream; use App\Features\Invoice\UpdateInvoice\UpdatedInvoiceDto; -use App\Features\Invoice\UpdateInvoice\UpdateInvoiceEventType; use App\Features\Invoice\UpdateInvoice\UpdateInvoiceUsingBitPayIpn; use App\Features\Invoice\UpdateInvoice\UpdateInvoiceValidator; use App\Features\Shared\Logger; @@ -28,7 +26,7 @@ use PHPUnit\Framework\MockObject\MockObject; use Tests\Unit\AbstractUnitTestCase; -class UpdateInvoiceUsingBitPayIpnTestCase extends AbstractUnitTestCase +class UpdateInvoiceUsingBitPayIpnTest extends AbstractUnitTestCase { /** * @test @@ -48,7 +46,7 @@ public function it_should_throws_exception_for_missing_invoice(): void $this->getSendUpdateInvoiceEventStream(), $this->getLogger() ); - $testedClass->execute('12312', ['any' => 'data']); + $testedClass->execute('12312', ['any' => 'data'], []); } /** @@ -58,12 +56,13 @@ public function it_should_update_invoice_using_bitpay_update_response(): void { // given $repository = $this->getRepository(); - $client = $this->createStub(Client::class); + $client = $this->createMock(Client::class); $clientFactory = $this->getClientFactory(); $bitPayConfiguration = $this->getBitPayConfiguration(); $bitPayUpdateMapper = $this->getUpdateMapper(); $invoiceValidator = $this->getInvoiceValidator(); $sendInvoiceEventStream = $this->getSendUpdateInvoiceEventStream(); + /** @var Logger|MockObject $logger */ $logger = $this->createMock(Logger::class); $invoice = $this->getMockBuilder(Invoice::class)->disableOriginalConstructor()->getMock(); $invoicePayment = $this->getMockBuilder(InvoicePayment::class)->disableOriginalConstructor()->getMock(); @@ -117,7 +116,11 @@ public function it_should_update_invoice_using_bitpay_update_response(): void $sendInvoiceEventStream, $logger ); - $testedClass->execute($uuid, ['any' => 'data', 'event' => 'invoice_expired']); + $testedClass->execute( + $uuid, + ['data' => ['id' => $bitPayInvoiceId], 'event' => ['name' => 'invoice_expired']], + [] + ); } private function getRepository(): InvoiceRepositoryInterface|MockObject diff --git a/tests/Unit/Features/Invoice/UpdateInvoice/ValidateBitPayWebhookTest.php b/tests/Unit/Features/Invoice/UpdateInvoice/ValidateBitPayWebhookTest.php index a1c5159..88d12dc 100644 --- a/tests/Unit/Features/Invoice/UpdateInvoice/ValidateBitPayWebhookTest.php +++ b/tests/Unit/Features/Invoice/UpdateInvoice/ValidateBitPayWebhookTest.php @@ -16,6 +16,7 @@ class ValidateBitPayWebhookTest extends AbstractUnitTestCase */ public function it_should_return_error_when_signing_key_is_missing(): void { + /** @var BitPayConfigurationInterface|\PHPUnit\Framework\MockObject\MockObject $bitpayConfig */ $bitpayConfig = $this->createMock(BitPayConfigurationInterface::class); $bitpayConfig->expects($this->once()) ->method('getToken') @@ -31,6 +32,7 @@ public function it_should_return_error_when_signing_key_is_missing(): void */ public function it_should_return_error_when_signature_header_is_missing(): void { + /** @var BitPayConfigurationInterface|\PHPUnit\Framework\MockObject\MockObject $bitpayConfig */ $bitpayConfig = $this->createMock(BitPayConfigurationInterface::class); $bitpayConfig->expects($this->once()) ->method('getToken') @@ -47,6 +49,7 @@ public function it_should_return_error_when_signature_header_is_missing(): void */ public function it_should_return_error_when_signature_does_not_match(): void { + /** @var BitPayConfigurationInterface|\PHPUnit\Framework\MockObject\MockObject $bitpayConfig */ $bitpayConfig = $this->createMock(BitPayConfigurationInterface::class); $bitpayConfig->expects($this->once()) ->method('getToken') @@ -67,6 +70,7 @@ public function it_should_allow_request_when_signature_is_valid(): void $token = 'test-token'; $testContent = ['test-content']; + /** @var BitPayConfigurationInterface|\PHPUnit\Framework\MockObject\MockObject $bitpayConfig */ $bitpayConfig = $this->createMock(BitPayConfigurationInterface::class); $bitpayConfig->expects($this->once()) ->method('getToken') diff --git a/tests/Unit/Features/Invoice/UpdateInvoice/bitPayUpdate.json b/tests/Unit/Features/Invoice/UpdateInvoice/bitPayUpdate.json index c32c2af..765c547 100644 --- a/tests/Unit/Features/Invoice/UpdateInvoice/bitPayUpdate.json +++ b/tests/Unit/Features/Invoice/UpdateInvoice/bitPayUpdate.json @@ -1,44 +1,50 @@ { - "id": "MV9fy5iNDkqrg4qrfYpw75", - "url": "https://test.bitpay.com/invoice?id=MV9fy5iNDkqrg4qrfYpw75", - "posData": "{\"store\":\"store-1\",\"register\":\"2\",\"reg_transaction_no\":\"87678\",\"price\":\"76.70\"}", - "status": "expired", - "price": 76.7, - "currency": "USD", - "invoiceTime": 1678714659517, - "expirationTime": 1678715559517, - "currentTime": 1678715642261, - "exceptionStatus": false, - "buyerFields": {}, - "paymentSubtotals": { - "BTC": 342800, - "BCH": 62648000, - "ETH": 48312000000000000, - "GUSD": 7670, - "PAX": 76700000000000000000, - "BUSD": 76700000000000000000, - "USDC": 76700000, - "DOGE": 111086650500, - "LTC": 101107300, - "MATIC": 69057493000000000000, - "USDC_m": 76700000, - "USDT": 76500000 + "event": { + "code": 1004, + "name": "invoice_expired" }, - "paymentTotals": { - "BTC": 347100, - "BCH": 62648000, - "ETH": 48312000000000000, - "GUSD": 7670, - "PAX": 76700000000000000000, - "BUSD": 76700000000000000000, - "USDC": 76700000, - "DOGE": 111086650500, - "LTC": 101107300, - "MATIC": 69057493000000000000, - "USDC_m": 76700000, - "USDT": 76500000 - }, - "exchangeRates": {}, - "amountPaid": 0, - "orderId": "640f27154e58f8.40716035" -} + "data": { + "id": "MV9fy5iNDkqrg4qrfYpw75", + "url": "https://test.bitpay.com/invoice?id=MV9fy5iNDkqrg4qrfYpw75", + "posData": "{\"store\":\"store-1\",\"register\":\"2\",\"reg_transaction_no\":\"87678\",\"price\":\"76.70\"}", + "status": "expired", + "price": 76.7, + "currency": "USD", + "invoiceTime": 1678714659517, + "expirationTime": 1678715559517, + "currentTime": 1678715642261, + "exceptionStatus": false, + "buyerFields": {}, + "paymentSubtotals": { + "BTC": 342800, + "BCH": 62648000, + "ETH": 48312000000000000, + "GUSD": 7670, + "PAX": 76700000000000000000, + "BUSD": 76700000000000000000, + "USDC": 76700000, + "DOGE": 111086650500, + "LTC": 101107300, + "MATIC": 69057493000000000000, + "USDC_m": 76700000, + "USDT": 76500000 + }, + "paymentTotals": { + "BTC": 347100, + "BCH": 62648000, + "ETH": 48312000000000000, + "GUSD": 7670, + "PAX": 76700000000000000000, + "BUSD": 76700000000000000000, + "USDC": 76700000, + "DOGE": 111086650500, + "LTC": 101107300, + "MATIC": 69057493000000000000, + "USDC_m": 76700000, + "USDT": 76500000 + }, + "exchangeRates": {}, + "amountPaid": 0, + "orderId": "640f27154e58f8.40716035" + } +} \ No newline at end of file From 773d5bf98cb2a94d2c306c26d9c6141ece51f9af Mon Sep 17 00:00:00 2001 From: Maciej Kwiatkowski Date: Mon, 26 May 2025 16:57:35 +0200 Subject: [PATCH 3/3] Updating github pipeline to phpunit 10.5 --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 16e8fdd..c972a68 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,8 @@ jobs: php_version: ${{ matrix.php-version }} php_extensions: bcmath gmp xdebug testsuite: Unit - version: 9 + version: 10.5 + args: --no-coverage integration-tests: runs-on: ubuntu-latest @@ -52,7 +53,8 @@ jobs: php_version: ${{ matrix.php-version }} php_extensions: bcmath gmp xdebug testsuite: Integration - version: 9 + version: 10.5 + args: --no-coverage phpcs: runs-on: ubuntu-latest