diff --git a/backend/.env.example b/backend/.env.example
index 974d9be584..12971f17ac 100644
--- a/backend/.env.example
+++ b/backend/.env.example
@@ -62,3 +62,6 @@ AWS_USE_PATH_STYLE_ENDPOINT=true
JWT_SECRET=2hoccgHb9r1fqW1lU16C6khSHVa7O0eai6FxkWK95UtQ0LqNDTO5mq1RzDwcq18I
JWT_ALGO=HS256
+
+# Only required for SAAS mode and if your're charging fees
+# OPEN_EXCHANGE_RATES_APP_ID=
diff --git a/backend/app/Helper/Currency.php b/backend/app/Helper/Currency.php
index 375fe1480f..618bc163cc 100644
--- a/backend/app/Helper/Currency.php
+++ b/backend/app/Helper/Currency.php
@@ -6,6 +6,30 @@
class Currency
{
+ private const ZERO_DECIMAL_CURRENCIES = [
+ 'BIF',
+ 'CLP',
+ 'DJF',
+ 'GNF',
+ 'JPY',
+ 'KMF',
+ 'KRW',
+ 'MGA',
+ 'PYG',
+ 'RWF',
+ 'UGX',
+ 'VND',
+ 'VUV',
+ 'XAF',
+ 'XOF',
+ 'XPF'
+ ];
+
+ public static function isZeroDecimalCurrency(string $currencyCode): bool
+ {
+ return in_array(strtoupper($currencyCode), self::ZERO_DECIMAL_CURRENCIES, true);
+ }
+
public static function format(float|int $amount, string $currencyCode, string $locale = 'en_US'): string
{
$currencyCode = strtoupper($currencyCode);
diff --git a/backend/app/Providers/AppServiceProvider.php b/backend/app/Providers/AppServiceProvider.php
index 740c432a8d..209f87984a 100644
--- a/backend/app/Providers/AppServiceProvider.php
+++ b/backend/app/Providers/AppServiceProvider.php
@@ -9,6 +9,9 @@
use HiEvents\DomainObjects\OrganizerDomainObject;
use HiEvents\Models\Event;
use HiEvents\Models\Organizer;
+use HiEvents\Services\Infrastructure\CurrencyConversion\CurrencyConversionClientInterface;
+use HiEvents\Services\Infrastructure\CurrencyConversion\NoOpCurrencyConversionClient;
+use HiEvents\Services\Infrastructure\CurrencyConversion\OpenExchangeRatesCurrencyConversionClient;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Eloquent\Model;
@@ -28,6 +31,7 @@ public function register(): void
{
$this->bindDoctrineConnection();
$this->bindStripeClient();
+ $this->bindCurrencyConversionClient();
}
/**
@@ -130,4 +134,25 @@ private function disableLazyLoading(): void
{
Model::preventLazyLoading(!app()->isProduction());
}
+
+ private function bindCurrencyConversionClient(): void
+ {
+ $this->app->bind(
+ CurrencyConversionClientInterface::class,
+ function () {
+ if (config('services.open_exchange_rates.app_id')) {
+ return new OpenExchangeRatesCurrencyConversionClient(
+ apiKey: config('services.open_exchange_rates.app_id'),
+ cache: $this->app->make('cache.store'),
+ logger: $this->app->make('log')
+ );
+ }
+
+ // Fallback to no-op client if no other client is available
+ return new NoOpCurrencyConversionClient(
+ logger: $this->app->make('log')
+ );
+ }
+ );
+ }
}
diff --git a/backend/app/Services/Application/Handlers/Order/Payment/Stripe/CreatePaymentIntentHandler.php b/backend/app/Services/Application/Handlers/Order/Payment/Stripe/CreatePaymentIntentHandler.php
index f133c3f0d4..0db40c5914 100644
--- a/backend/app/Services/Application/Handlers/Order/Payment/Stripe/CreatePaymentIntentHandler.php
+++ b/backend/app/Services/Application/Handlers/Order/Payment/Stripe/CreatePaymentIntentHandler.php
@@ -6,7 +6,6 @@
use Brick\Math\Exception\NumberFormatException;
use Brick\Math\Exception\RoundingNecessaryException;
use Brick\Money\Exception\UnknownCurrencyException;
-use Brick\Money\Money;
use HiEvents\DomainObjects\AccountConfigurationDomainObject;
use HiEvents\DomainObjects\Generated\StripePaymentDomainObjectAbstract;
use HiEvents\DomainObjects\OrderItemDomainObject;
@@ -23,6 +22,7 @@
use HiEvents\Services\Domain\Payment\Stripe\DTOs\CreatePaymentIntentResponseDTO;
use HiEvents\Services\Domain\Payment\Stripe\StripePaymentIntentCreationService;
use HiEvents\Services\Infrastructure\Session\CheckoutSessionManagementService;
+use HiEvents\Values\MoneyValue;
use Stripe\Exception\ApiErrorException;
use Throwable;
@@ -84,7 +84,7 @@ public function handle(string $orderShortId): CreatePaymentIntentResponseDTO
}
$paymentIntent = $this->stripePaymentService->createPaymentIntent(CreatePaymentIntentRequestDTO::fromArray([
- 'amount' => Money::of($order->getTotalGross(), $order->getCurrency())->getMinorAmount()->toInt(),
+ 'amount' => MoneyValue::fromFloat($order->getTotalGross(), $order->getCurrency()),
'currencyCode' => $order->getCurrency(),
'account' => $account,
'order' => $order,
diff --git a/backend/app/Services/Domain/Order/MarkOrderAsPaidService.php b/backend/app/Services/Domain/Order/MarkOrderAsPaidService.php
index 4682d3f2bc..d9fd58882a 100644
--- a/backend/app/Services/Domain/Order/MarkOrderAsPaidService.php
+++ b/backend/app/Services/Domain/Order/MarkOrderAsPaidService.php
@@ -2,6 +2,7 @@
namespace HiEvents\Services\Domain\Order;
+use Brick\Math\Exception\MathException;
use HiEvents\DomainObjects\AccountConfigurationDomainObject;
use HiEvents\DomainObjects\AccountDomainObject;
use HiEvents\DomainObjects\AttendeeDomainObject;
@@ -142,6 +143,9 @@ private function updateAttendeeStatuses(OrderDomainObject $updatedOrder): void
);
}
+ /**
+ * @throws MathException
+ */
private function storeApplicationFeePayment(OrderDomainObject $updatedOrder): void
{
/** @var EventDomainObject $event */
@@ -163,13 +167,14 @@ private function storeApplicationFeePayment(OrderDomainObject $updatedOrder): vo
$this->orderApplicationFeeService->createOrderApplicationFee(
orderId: $updatedOrder->getId(),
- applicationFeeAmount: $this->orderApplicationFeeCalculationService->calculateApplicationFee(
+ applicationFeeAmountMinorUnit: $this->orderApplicationFeeCalculationService->calculateApplicationFee(
$config,
$updatedOrder->getTotalGross(),
$event->getCurrency(),
- )->toFloat(),
+ )->toMinorUnit(),
orderApplicationFeeStatus: OrderApplicationFeeStatus::AWAITING_PAYMENT,
paymentMethod: PaymentProviders::OFFLINE,
+ currency: $updatedOrder->getCurrency(),
);
}
}
diff --git a/backend/app/Services/Domain/Order/OrderApplicationFeeCalculationService.php b/backend/app/Services/Domain/Order/OrderApplicationFeeCalculationService.php
index b8ee73a4bf..fa9371f232 100644
--- a/backend/app/Services/Domain/Order/OrderApplicationFeeCalculationService.php
+++ b/backend/app/Services/Domain/Order/OrderApplicationFeeCalculationService.php
@@ -2,14 +2,19 @@
namespace HiEvents\Services\Domain\Order;
+use Brick\Money\Currency;
use HiEvents\DomainObjects\AccountConfigurationDomainObject;
+use HiEvents\Services\Infrastructure\CurrencyConversion\CurrencyConversionClientInterface;
use HiEvents\Values\MoneyValue;
use Illuminate\Config\Repository;
class OrderApplicationFeeCalculationService
{
+ private const BASE_CURRENCY = 'USD';
+
public function __construct(
- private readonly Repository $config,
+ private readonly Repository $config,
+ private readonly CurrencyConversionClientInterface $currencyConversionClient
)
{
}
@@ -24,12 +29,28 @@ public function calculateApplicationFee(
return MoneyValue::zero($currency);
}
- $fixedFee = $accountConfiguration->getFixedApplicationFee();
+ $fixedFee = $this->getConvertedFixedFee($accountConfiguration, $currency);
$percentageFee = $accountConfiguration->getPercentageApplicationFee();
return MoneyValue::fromFloat(
- amount: $fixedFee + ($orderTotal * $percentageFee / 100),
+ amount: $fixedFee->toFloat() + ($orderTotal * $percentageFee / 100),
currency: $currency
);
}
+
+ private function getConvertedFixedFee(
+ AccountConfigurationDomainObject $accountConfiguration,
+ string $currency
+ ): MoneyValue
+ {
+ if ($currency === self::BASE_CURRENCY) {
+ return MoneyValue::fromFloat($accountConfiguration->getFixedApplicationFee(), $currency);
+ }
+
+ return $this->currencyConversionClient->convert(
+ fromCurrency: Currency::of(self::BASE_CURRENCY),
+ toCurrency: Currency::of($currency),
+ amount: $accountConfiguration->getFixedApplicationFee()
+ );
+ }
}
diff --git a/backend/app/Services/Domain/Order/OrderApplicationFeeService.php b/backend/app/Services/Domain/Order/OrderApplicationFeeService.php
index 12904baac0..01bea9fd8b 100644
--- a/backend/app/Services/Domain/Order/OrderApplicationFeeService.php
+++ b/backend/app/Services/Domain/Order/OrderApplicationFeeService.php
@@ -5,6 +5,7 @@
use HiEvents\DomainObjects\Enums\PaymentProviders;
use HiEvents\DomainObjects\Generated\OrderApplicationFeeDomainObjectAbstract;
use HiEvents\DomainObjects\Status\OrderApplicationFeeStatus;
+use HiEvents\Helper\Currency;
use HiEvents\Repository\Interfaces\OrderApplicationFeeRepositoryInterface;
class OrderApplicationFeeService
@@ -17,16 +18,24 @@ public function __construct(
public function createOrderApplicationFee(
int $orderId,
- float $applicationFeeAmount,
+ int $applicationFeeAmountMinorUnit,
OrderApplicationFeeStatus $orderApplicationFeeStatus,
PaymentProviders $paymentMethod,
+ string $currency,
): void
{
+ $isZeroDecimalCurrency = Currency::isZeroDecimalCurrency($currency);
+
+ $applicationFeeAmount = $isZeroDecimalCurrency
+ ? $applicationFeeAmountMinorUnit
+ : $applicationFeeAmountMinorUnit / 100;
+
$this->orderApplicationFeeRepository->create([
OrderApplicationFeeDomainObjectAbstract::ORDER_ID => $orderId,
OrderApplicationFeeDomainObjectAbstract::AMOUNT => $applicationFeeAmount,
OrderApplicationFeeDomainObjectAbstract::STATUS => $orderApplicationFeeStatus->value,
OrderApplicationFeeDomainObjectAbstract::PAYMENT_METHOD => $paymentMethod->value,
+ ORderApplicationFeeDomainObjectAbstract::CURRENCY => $currency,
OrderApplicationFeeDomainObjectAbstract::PAID_AT => $orderApplicationFeeStatus->value === OrderApplicationFeeStatus::PAID->value
? now()->toDateTimeString()
: null,
diff --git a/backend/app/Services/Domain/Payment/Stripe/DTOs/CreatePaymentIntentRequestDTO.php b/backend/app/Services/Domain/Payment/Stripe/DTOs/CreatePaymentIntentRequestDTO.php
index fa27bf2ee6..b1f4f954ce 100644
--- a/backend/app/Services/Domain/Payment/Stripe/DTOs/CreatePaymentIntentRequestDTO.php
+++ b/backend/app/Services/Domain/Payment/Stripe/DTOs/CreatePaymentIntentRequestDTO.php
@@ -5,14 +5,15 @@
use HiEvents\DataTransferObjects\BaseDTO;
use HiEvents\DomainObjects\AccountDomainObject;
use HiEvents\DomainObjects\OrderDomainObject;
+use HiEvents\Values\MoneyValue;
class CreatePaymentIntentRequestDTO extends BaseDTO
{
public function __construct(
- public readonly int $amount,
- public readonly string $currencyCode,
+ public readonly MoneyValue $amount,
+ public readonly string $currencyCode,
public AccountDomainObject $account,
- public OrderDomainObject $order,
+ public OrderDomainObject $order,
)
{
}
diff --git a/backend/app/Services/Domain/Payment/Stripe/EventHandlers/PaymentIntentSucceededHandler.php b/backend/app/Services/Domain/Payment/Stripe/EventHandlers/PaymentIntentSucceededHandler.php
index 1da220c18e..9d1ff78bf2 100644
--- a/backend/app/Services/Domain/Payment/Stripe/EventHandlers/PaymentIntentSucceededHandler.php
+++ b/backend/app/Services/Domain/Payment/Stripe/EventHandlers/PaymentIntentSucceededHandler.php
@@ -233,9 +233,10 @@ private function storeApplicationFeePayment(OrderDomainObject $updatedOrder, Pay
{
$this->orderApplicationFeeService->createOrderApplicationFee(
orderId: $updatedOrder->getId(),
- applicationFeeAmount: $paymentIntent->application_fee_amount / 100,
+ applicationFeeAmountMinorUnit: $paymentIntent->application_fee_amount,
orderApplicationFeeStatus: OrderApplicationFeeStatus::PAID,
paymentMethod: PaymentProviders::STRIPE,
+ currency: $updatedOrder->getCurrency(),
);
}
}
diff --git a/backend/app/Services/Domain/Payment/Stripe/StripePaymentIntentCreationService.php b/backend/app/Services/Domain/Payment/Stripe/StripePaymentIntentCreationService.php
index 8a9c38d7d3..effef6647a 100644
--- a/backend/app/Services/Domain/Payment/Stripe/StripePaymentIntentCreationService.php
+++ b/backend/app/Services/Domain/Payment/Stripe/StripePaymentIntentCreationService.php
@@ -64,12 +64,12 @@ public function createPaymentIntent(CreatePaymentIntentRequestDTO $paymentIntent
$applicationFee = $this->orderApplicationFeeCalculationService->calculateApplicationFee(
accountConfiguration: $paymentIntentDTO->account->getConfiguration(),
- orderTotal: $paymentIntentDTO->amount / 100,
+ orderTotal: $paymentIntentDTO->amount->toFloat(),
currency: $paymentIntentDTO->currencyCode,
)->toMinorUnit();
$paymentIntent = $this->stripeClient->paymentIntents->create([
- 'amount' => $paymentIntentDTO->amount,
+ 'amount' => $paymentIntentDTO->amount->toMinorUnit(),
'currency' => $paymentIntentDTO->currencyCode,
'customer' => $this->upsertStripeCustomer($paymentIntentDTO)->getStripeCustomerId(),
'metadata' => [
@@ -103,6 +103,8 @@ public function createPaymentIntent(CreatePaymentIntentRequestDTO $paymentIntent
'paymentIntentDTO' => $paymentIntentDTO->toArray(['account']),
]);
+ $this->databaseManager->rollBack();
+
throw new CreatePaymentIntentFailedException(
__('There was an error communicating with the payment provider. Please try again later.')
);
@@ -113,18 +115,6 @@ public function createPaymentIntent(CreatePaymentIntentRequestDTO $paymentIntent
}
}
- private function getApplicationFee(CreatePaymentIntentRequestDTO $paymentIntentDTO): float
- {
- if (!$this->config->get('app.saas_mode_enabled')) {
- return 0;
- }
-
- $fixedFee = $paymentIntentDTO->account->getApplicationFee()->fixedFee;
- $percentageFee = $paymentIntentDTO->account->getApplicationFee()->percentageFee;
-
- return ceil(($fixedFee * 100) + ($paymentIntentDTO->amount * $percentageFee / 100));
- }
-
/**
* @throws CreatePaymentIntentFailedException
*/
diff --git a/backend/app/Services/Infrastructure/CurrencyConversion/CurrencyConversionClientInterface.php b/backend/app/Services/Infrastructure/CurrencyConversion/CurrencyConversionClientInterface.php
new file mode 100644
index 0000000000..bf10231066
--- /dev/null
+++ b/backend/app/Services/Infrastructure/CurrencyConversion/CurrencyConversionClientInterface.php
@@ -0,0 +1,11 @@
+logger = $logger;
+ }
+
+ public function convert(Currency $fromCurrency, Currency $toCurrency, float $amount): MoneyValue
+ {
+ $this->logger->warning(
+ 'NoOpCurrencyConversionClient is being used. This should only be used as a last resort fallback. Never in production.',
+ [
+ 'fromCurrency' => $fromCurrency->getCurrencyCode(),
+ 'toCurrency' => $toCurrency->getCurrencyCode(),
+ 'amount' => $amount,
+ ]
+ );
+
+ return MoneyValue::fromFloat($amount, $toCurrency->getCurrencyCode());
+ }
+}
diff --git a/backend/app/Services/Infrastructure/CurrencyConversion/OpenExchangeRatesCurrencyConversionClient.php b/backend/app/Services/Infrastructure/CurrencyConversion/OpenExchangeRatesCurrencyConversionClient.php
new file mode 100644
index 0000000000..1819b67795
--- /dev/null
+++ b/backend/app/Services/Infrastructure/CurrencyConversion/OpenExchangeRatesCurrencyConversionClient.php
@@ -0,0 +1,102 @@
+apiKey = $apiKey;
+ }
+
+ /**
+ * @param Currency $fromCurrency
+ * @param Currency $toCurrency
+ * @param float $amount
+ * @return MoneyValue
+ * @throws CurrencyConversionErrorException
+ * @throws InvalidArgumentException
+ * @throws JsonException
+ * @throws NumberFormatException
+ * @throws RoundingNecessaryException
+ * @throws UnknownCurrencyException
+ */
+ public function convert(Currency $fromCurrency, Currency $toCurrency, float $amount): MoneyValue
+ {
+ if ($fromCurrency->getCurrencyCode() === $toCurrency->getCurrencyCode()) {
+ return MoneyValue::fromFloat($amount, $toCurrency->getCurrencyCode());
+ }
+
+ $rates = $this->getRates();
+
+ $fromCurrencyCode = $fromCurrency->getCurrencyCode();
+ $toCurrencyCode = $toCurrency->getCurrencyCode();
+
+ if (!isset($rates[$fromCurrencyCode], $rates[$toCurrencyCode])) {
+ throw new CurrencyConversionErrorException("Invalid currency conversion: $fromCurrencyCode to $toCurrencyCode");
+ }
+
+ // Since base is USD, we calculate:
+ // amount in USD = amount / rate[from]
+ // target amount = amount in USD * rate[to]
+
+ $amountInUsd = $amount / $rates[$fromCurrencyCode];
+ $convertedAmount = $amountInUsd * $rates[$toCurrencyCode];
+
+ return MoneyValue::fromFloat($convertedAmount, $toCurrencyCode);
+ }
+
+ /**
+ * @throws InvalidArgumentException
+ * @throws JsonException
+ * @throws CurrencyConversionErrorException
+ */
+ private function getRates(): array
+ {
+ $cacheKey = 'open_exchange_rates_latest';
+
+ $rates = $this->cache->get($cacheKey);
+
+ if ($rates === null) {
+ $url = sprintf('%s?app_id=%s', self::API_URL, $this->apiKey);
+
+ $response = file_get_contents($url);
+ if ($response === false) {
+ throw new CurrencyConversionErrorException('Failed to fetch exchange rates from Open Exchange Rates.');
+ }
+
+ $data = json_decode($response, true, 512, JSON_THROW_ON_ERROR);
+
+ if (!isset($data['rates']) || !is_array($data['rates'])) {
+ throw new CurrencyConversionErrorException('Invalid response from Open Exchange Rates API.');
+ }
+
+ $rates = $data['rates'];
+ $this->cache->set($cacheKey, $rates, self::CACHE_TTL);
+
+ $this->logger->info('OpenExchangeRates: Cached latest rates.');
+ }
+
+ return $rates;
+ }
+}
diff --git a/backend/composer.json b/backend/composer.json
index 186f85adb1..e480b19745 100644
--- a/backend/composer.json
+++ b/backend/composer.json
@@ -11,7 +11,6 @@
"barryvdh/laravel-dompdf": "^3.0",
"brick/money": "^0.8.0",
"doctrine/dbal": "^3.6",
- "druc/laravel-langscanner": "dev-l12-compatibility",
"ezyang/htmlpurifier": "^4.17",
"guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^12.0",
@@ -26,9 +25,10 @@
"spatie/icalendar-generator": "^2.8",
"spatie/laravel-data": "^4.11",
"spatie/laravel-webhook-server": "^3.8",
- "stripe/stripe-php": "^10.15"
+ "stripe/stripe-php": "^17.0"
},
"require-dev": {
+ "druc/laravel-langscanner": "dev-l12-compatibility",
"fakerphp/faker": "^1.9.1",
"gettext/gettext": "^5.7",
"laravel/pint": "^1.0",
diff --git a/backend/composer.lock b/backend/composer.lock
index c1cdba61c9..43d4bbaed7 100644
--- a/backend/composer.lock
+++ b/backend/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": "b558058c8bb9c2d1e2960495009769b5",
+ "content-hash": "926ea94433a0d244b23a4ce430cbbdab",
"packages": [
{
"name": "amphp/amp",
@@ -870,16 +870,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.342.6",
+ "version": "3.342.24",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "2ad93ef447289da27892707efa683c1ae7ced85f"
+ "reference": "cd7e1cbed4cb52c3aad31a647d1645594ff208eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2ad93ef447289da27892707efa683c1ae7ced85f",
- "reference": "2ad93ef447289da27892707efa683c1ae7ced85f",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/cd7e1cbed4cb52c3aad31a647d1645594ff208eb",
+ "reference": "cd7e1cbed4cb52c3aad31a647d1645594ff208eb",
"shasum": ""
},
"require": {
@@ -961,9 +961,9 @@
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.342.6"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.342.24"
},
- "time": "2025-03-14T18:01:18+00:00"
+ "time": "2025-04-09T18:22:32+00:00"
},
{
"name": "barryvdh/laravel-dompdf",
@@ -1709,26 +1709,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": {
@@ -1748,9 +1751,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/event-manager",
@@ -2231,97 +2234,18 @@
],
"time": "2024-10-09T13:47:03+00:00"
},
- {
- "name": "druc/laravel-langscanner",
- "version": "dev-l12-compatibility",
- "source": {
- "type": "git",
- "url": "https://github.com/laravel-shift/laravel-langscanner.git",
- "reference": "a4efee46f730e389a8ae53f7495468d123cfee5c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/laravel-shift/laravel-langscanner/zipball/a4efee46f730e389a8ae53f7495468d123cfee5c",
- "reference": "a4efee46f730e389a8ae53f7495468d123cfee5c",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "illuminate/contracts": "^9.0|^10.0|^11.0|^12.0",
- "php": "^8.0",
- "spatie/laravel-package-tools": "^1.11.3"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^3.3",
- "nunomaduro/collision": "^6.2",
- "orchestra/testbench": "^7.02|^9.0|^10.0",
- "phpunit/phpunit": "^9.5|^10.1|^11.5.3"
- },
- "type": "library",
- "extra": {
- "laravel": {
- "providers": [
- "Druc\\Langscanner\\LangscannerServiceProvider"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "Druc\\Langscanner\\": "src"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "Druc\\Langscanner\\Tests\\": "tests"
- }
- },
- "scripts": {
- "test": [
- "./vendor/bin/testbench package:test"
- ],
- "test-coverage": [
- "vendor/bin/phpunit --coverage-html coverage"
- ]
- },
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Constantin Druc",
- "email": "druc@pinsmile.com",
- "role": "Developer"
- }
- ],
- "description": "Scan missing language translations.",
- "homepage": "https://github.com/druc/laravel-langscanner",
- "keywords": [
- "druc",
- "laravel-langscanner"
- ],
- "support": {
- "source": "https://github.com/laravel-shift/laravel-langscanner/tree/l12-compatibility"
- },
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/druc"
- }
- ],
- "time": "2025-02-19T14:38:40+00:00"
- },
{
"name": "egulias/email-validator",
- "version": "4.0.3",
+ "version": "4.0.4",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
- "reference": "b115554301161fa21467629f1e1391c1936de517"
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517",
- "reference": "b115554301161fa21467629f1e1391c1936de517",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
+ "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa",
"shasum": ""
},
"require": {
@@ -2367,7 +2291,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
- "source": "https://github.com/egulias/EmailValidator/tree/4.0.3"
+ "source": "https://github.com/egulias/EmailValidator/tree/4.0.4"
},
"funding": [
{
@@ -2375,7 +2299,7 @@
"type": "github"
}
],
- "time": "2024-12-27T00:36:43+00:00"
+ "time": "2025-03-06T22:45:56+00:00"
},
{
"name": "ezyang/htmlpurifier",
@@ -2573,16 +2497,16 @@
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.9.2",
+ "version": "7.9.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
+ "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
- "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
+ "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
"shasum": ""
},
"require": {
@@ -2679,7 +2603,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
+ "source": "https://github.com/guzzle/guzzle/tree/7.9.3"
},
"funding": [
{
@@ -2695,20 +2619,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-24T11:22:20+00:00"
+ "time": "2025-03-27T13:37:11+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.0.4",
+ "version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455"
+ "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
- "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
+ "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
"shasum": ""
},
"require": {
@@ -2762,7 +2686,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.0.4"
+ "source": "https://github.com/guzzle/promises/tree/2.2.0"
},
"funding": [
{
@@ -2778,20 +2702,20 @@
"type": "tidelift"
}
],
- "time": "2024-10-17T10:06:22+00:00"
+ "time": "2025-03-27T13:27:01+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.7.0",
+ "version": "2.7.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
+ "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
- "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
+ "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
"shasum": ""
},
"require": {
@@ -2878,7 +2802,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.7.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.7.1"
},
"funding": [
{
@@ -2894,7 +2818,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-18T11:15:46+00:00"
+ "time": "2025-03-27T12:30:47+00:00"
},
{
"name": "guzzlehttp/uri-template",
@@ -3034,16 +2958,16 @@
},
{
"name": "jean85/pretty-package-versions",
- "version": "2.1.0",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
- "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10"
+ "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10",
- "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10",
+ "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a",
+ "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a",
"shasum": ""
},
"require": {
@@ -3053,8 +2977,9 @@
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.2",
"jean85/composer-provided-replaced-stub-package": "^1.0",
- "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^7.5|^8.5|^9.6",
+ "rector/rector": "^2.0",
"vimeo/psalm": "^4.3 || ^5.0"
},
"type": "library",
@@ -3087,9 +3012,9 @@
],
"support": {
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
- "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0"
+ "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1"
},
- "time": "2024-11-18T16:19:46+00:00"
+ "time": "2025-03-19T14:43:43+00:00"
},
{
"name": "kelunik/certificate",
@@ -3151,16 +3076,16 @@
},
{
"name": "laravel/framework",
- "version": "v12.2.0",
+ "version": "v12.8.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "2fb06941bc69ea92f28b2888535ab144ee006889"
+ "reference": "d1ea3566f6e0cad34834c6d18db0bf995438eb87"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/2fb06941bc69ea92f28b2888535ab144ee006889",
- "reference": "2fb06941bc69ea92f28b2888535ab144ee006889",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/d1ea3566f6e0cad34834c6d18db0bf995438eb87",
+ "reference": "d1ea3566f6e0cad34834c6d18db0bf995438eb87",
"shasum": ""
},
"require": {
@@ -3362,7 +3287,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2025-03-12T14:38:20+00:00"
+ "time": "2025-04-08T19:58:59+00:00"
},
{
"name": "laravel/prompts",
@@ -3489,16 +3414,16 @@
},
{
"name": "laravel/serializable-closure",
- "version": "v2.0.3",
+ "version": "v2.0.4",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "f379c13663245f7aa4512a7869f62eb14095f23f"
+ "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f379c13663245f7aa4512a7869f62eb14095f23f",
- "reference": "f379c13663245f7aa4512a7869f62eb14095f23f",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841",
+ "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841",
"shasum": ""
},
"require": {
@@ -3546,7 +3471,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2025-02-11T15:03:05+00:00"
+ "time": "2025-03-19T13:51:03+00:00"
},
{
"name": "laravel/tinker",
@@ -4708,16 +4633,16 @@
},
{
"name": "monolog/monolog",
- "version": "3.8.1",
+ "version": "3.9.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4"
+ "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4",
- "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6",
+ "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6",
"shasum": ""
},
"require": {
@@ -4795,7 +4720,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/3.8.1"
+ "source": "https://github.com/Seldaek/monolog/tree/3.9.0"
},
"funding": [
{
@@ -4807,7 +4732,7 @@
"type": "tidelift"
}
],
- "time": "2024-12-05T17:15:07+00:00"
+ "time": "2025-03-24T10:02:05+00:00"
},
{
"name": "mtdowling/jmespath.php",
@@ -4944,16 +4869,16 @@
},
{
"name": "nesbot/carbon",
- "version": "3.8.6",
+ "version": "3.9.0",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
- "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd"
+ "reference": "6d16a8a015166fe54e22c042e0805c5363aef50d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ff2f20cf83bd4d503720632ce8a426dc747bf7fd",
- "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/6d16a8a015166fe54e22c042e0805c5363aef50d",
+ "reference": "6d16a8a015166fe54e22c042e0805c5363aef50d",
"shasum": ""
},
"require": {
@@ -5046,20 +4971,20 @@
"type": "tidelift"
}
],
- "time": "2025-02-20T17:33:38+00:00"
+ "time": "2025-03-27T12:57:33+00:00"
},
{
"name": "nette/php-generator",
- "version": "v4.1.7",
+ "version": "v4.1.8",
"source": {
"type": "git",
"url": "https://github.com/nette/php-generator.git",
- "reference": "d201c9bc217e0969d1b678d286be49302972fb56"
+ "reference": "42806049a7774a2bd316c958f5dcf01c6b5c56fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/php-generator/zipball/d201c9bc217e0969d1b678d286be49302972fb56",
- "reference": "d201c9bc217e0969d1b678d286be49302972fb56",
+ "url": "https://api.github.com/repos/nette/php-generator/zipball/42806049a7774a2bd316c958f5dcf01c6b5c56fa",
+ "reference": "42806049a7774a2bd316c958f5dcf01c6b5c56fa",
"shasum": ""
},
"require": {
@@ -5113,9 +5038,9 @@
],
"support": {
"issues": "https://github.com/nette/php-generator/issues",
- "source": "https://github.com/nette/php-generator/tree/v4.1.7"
+ "source": "https://github.com/nette/php-generator/tree/v4.1.8"
},
- "time": "2024-11-29T01:41:18+00:00"
+ "time": "2025-03-31T00:29:29+00:00"
},
{
"name": "nette/schema",
@@ -5181,16 +5106,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": {
@@ -5261,9 +5186,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",
@@ -5490,16 +5415,16 @@
},
{
"name": "php-open-source-saver/jwt-auth",
- "version": "v2.8.1",
+ "version": "v2.8.2",
"source": {
"type": "git",
"url": "https://github.com/PHP-Open-Source-Saver/jwt-auth.git",
- "reference": "cd55a88bc98635983c7f8d6fa915d81eaadeb6e1"
+ "reference": "9af3bd953b5671247c330562183e159f10700533"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-Open-Source-Saver/jwt-auth/zipball/cd55a88bc98635983c7f8d6fa915d81eaadeb6e1",
- "reference": "cd55a88bc98635983c7f8d6fa915d81eaadeb6e1",
+ "url": "https://api.github.com/repos/PHP-Open-Source-Saver/jwt-auth/zipball/9af3bd953b5671247c330562183e159f10700533",
+ "reference": "9af3bd953b5671247c330562183e159f10700533",
"shasum": ""
},
"require": {
@@ -5582,7 +5507,7 @@
"issues": "https://github.com/PHP-Open-Source-Saver/jwt-auth/issues",
"source": "https://github.com/PHP-Open-Source-Saver/jwt-auth"
},
- "time": "2025-02-28T05:02:47+00:00"
+ "time": "2025-03-17T11:41:37+00:00"
},
{
"name": "phpdocumentor/reflection",
@@ -6640,16 +6565,16 @@
},
{
"name": "ramsey/collection",
- "version": "2.1.0",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/ramsey/collection.git",
- "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109"
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
- "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
+ "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
+ "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
"shasum": ""
},
"require": {
@@ -6710,9 +6635,9 @@
],
"support": {
"issues": "https://github.com/ramsey/collection/issues",
- "source": "https://github.com/ramsey/collection/tree/2.1.0"
+ "source": "https://github.com/ramsey/collection/tree/2.1.1"
},
- "time": "2025-03-02T04:48:29+00:00"
+ "time": "2025-03-22T05:38:12+00:00"
},
{
"name": "ramsey/uuid",
@@ -6936,16 +6861,16 @@
},
{
"name": "sabberworm/php-css-parser",
- "version": "v8.7.0",
+ "version": "v8.8.0",
"source": {
"type": "git",
"url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
- "reference": "f414ff953002a9b18e3a116f5e462c56f21237cf"
+ "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/f414ff953002a9b18e3a116f5e462c56f21237cf",
- "reference": "f414ff953002a9b18e3a116f5e462c56f21237cf",
+ "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/3de493bdddfd1f051249af725c7e0d2c38fed740",
+ "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740",
"shasum": ""
},
"require": {
@@ -6953,7 +6878,7 @@
"php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
- "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.40"
+ "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41"
},
"suggest": {
"ext-mbstring": "for parsing UTF-8 CSS"
@@ -6995,9 +6920,9 @@
],
"support": {
"issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
- "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.7.0"
+ "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.8.0"
},
- "time": "2024-10-27T17:38:32+00:00"
+ "time": "2025-03-23T17:59:05+00:00"
},
{
"name": "sentry/sentry",
@@ -7255,16 +7180,16 @@
},
{
"name": "spatie/icalendar-generator",
- "version": "2.9.1",
+ "version": "2.9.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/icalendar-generator.git",
- "reference": "21b8d259156368812a6d55096499f289b265be4e"
+ "reference": "6fa4d5b20490afeebe711f6cad1733853c667aa2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/icalendar-generator/zipball/21b8d259156368812a6d55096499f289b265be4e",
- "reference": "21b8d259156368812a6d55096499f289b265be4e",
+ "url": "https://api.github.com/repos/spatie/icalendar-generator/zipball/6fa4d5b20490afeebe711f6cad1733853c667aa2",
+ "reference": "6fa4d5b20490afeebe711f6cad1733853c667aa2",
"shasum": ""
},
"require": {
@@ -7308,22 +7233,22 @@
],
"support": {
"issues": "https://github.com/spatie/icalendar-generator/issues",
- "source": "https://github.com/spatie/icalendar-generator/tree/2.9.1"
+ "source": "https://github.com/spatie/icalendar-generator/tree/2.9.2"
},
- "time": "2025-01-31T13:50:13+00:00"
+ "time": "2025-03-21T09:01:17+00:00"
},
{
"name": "spatie/laravel-data",
- "version": "4.14.0",
+ "version": "4.15.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-data.git",
- "reference": "3e1240353569e8fb64b5859eed01652d5df3358b"
+ "reference": "cb97afe6c0dadeb2e76ea1b7220cd04ed33dcca9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-data/zipball/3e1240353569e8fb64b5859eed01652d5df3358b",
- "reference": "3e1240353569e8fb64b5859eed01652d5df3358b",
+ "url": "https://api.github.com/repos/spatie/laravel-data/zipball/cb97afe6c0dadeb2e76ea1b7220cd04ed33dcca9",
+ "reference": "cb97afe6c0dadeb2e76ea1b7220cd04ed33dcca9",
"shasum": ""
},
"require": {
@@ -7336,6 +7261,7 @@
"require-dev": {
"fakerphp/faker": "^1.14",
"friendsofphp/php-cs-fixer": "^3.0",
+ "inertiajs/inertia-laravel": "^2.0",
"livewire/livewire": "^3.0",
"mockery/mockery": "^1.6",
"nesbot/carbon": "^2.63|^3.0",
@@ -7384,7 +7310,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-data/issues",
- "source": "https://github.com/spatie/laravel-data/tree/4.14.0"
+ "source": "https://github.com/spatie/laravel-data/tree/4.15.1"
},
"funding": [
{
@@ -7392,20 +7318,20 @@
"type": "github"
}
],
- "time": "2025-03-14T14:26:23+00:00"
+ "time": "2025-04-10T06:06:27+00:00"
},
{
"name": "spatie/laravel-package-tools",
- "version": "1.19.0",
+ "version": "1.92.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
- "reference": "1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa"
+ "reference": "d55de371a6f609772c79a8d4d5e5b8fae11398f5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa",
- "reference": "1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa",
+ "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d55de371a6f609772c79a8d4d5e5b8fae11398f5",
+ "reference": "d55de371a6f609772c79a8d4d5e5b8fae11398f5",
"shasum": ""
},
"require": {
@@ -7444,7 +7370,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
- "source": "https://github.com/spatie/laravel-package-tools/tree/1.19.0"
+ "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.2"
},
"funding": [
{
@@ -7452,7 +7378,7 @@
"type": "github"
}
],
- "time": "2025-02-06T14:58:20+00:00"
+ "time": "2025-04-10T14:16:34+00:00"
},
{
"name": "spatie/laravel-webhook-server",
@@ -7609,16 +7535,16 @@
},
{
"name": "stripe/stripe-php",
- "version": "v10.21.0",
+ "version": "v17.1.1",
"source": {
"type": "git",
"url": "https://github.com/stripe/stripe-php.git",
- "reference": "b4ab319731958077227fad1874a3671458c5d593"
+ "reference": "01ca9b5fdd899b8e4b69f83b85e09d96f6240220"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/stripe/stripe-php/zipball/b4ab319731958077227fad1874a3671458c5d593",
- "reference": "b4ab319731958077227fad1874a3671458c5d593",
+ "url": "https://api.github.com/repos/stripe/stripe-php/zipball/01ca9b5fdd899b8e4b69f83b85e09d96f6240220",
+ "reference": "01ca9b5fdd899b8e4b69f83b85e09d96f6240220",
"shasum": ""
},
"require": {
@@ -7628,11 +7554,9 @@
"php": ">=5.6.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "3.5.0",
- "php-coveralls/php-coveralls": "^2.5",
+ "friendsofphp/php-cs-fixer": "3.72.0",
"phpstan/phpstan": "^1.2",
- "phpunit/phpunit": "^5.7 || ^9.0",
- "squizlabs/php_codesniffer": "^3.3"
+ "phpunit/phpunit": "^5.7 || ^9.0"
},
"type": "library",
"extra": {
@@ -7664,9 +7588,9 @@
],
"support": {
"issues": "https://github.com/stripe/stripe-php/issues",
- "source": "https://github.com/stripe/stripe-php/tree/v10.21.0"
+ "source": "https://github.com/stripe/stripe-php/tree/v17.1.1"
},
- "time": "2023-08-11T00:23:24+00:00"
+ "time": "2025-04-05T00:09:14+00:00"
},
{
"name": "symfony/clock",
@@ -7744,16 +7668,16 @@
},
{
"name": "symfony/console",
- "version": "v7.2.1",
+ "version": "v7.2.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3"
+ "reference": "e51498ea18570c062e7df29d05a7003585b19b88"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3",
- "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3",
+ "url": "https://api.github.com/repos/symfony/console/zipball/e51498ea18570c062e7df29d05a7003585b19b88",
+ "reference": "e51498ea18570c062e7df29d05a7003585b19b88",
"shasum": ""
},
"require": {
@@ -7817,7 +7741,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.2.1"
+ "source": "https://github.com/symfony/console/tree/v7.2.5"
},
"funding": [
{
@@ -7833,7 +7757,7 @@
"type": "tidelift"
}
],
- "time": "2024-12-11T03:49:26+00:00"
+ "time": "2025-03-12T08:11:12+00:00"
},
{
"name": "symfony/css-selector",
@@ -7969,16 +7893,16 @@
},
{
"name": "symfony/error-handler",
- "version": "v7.2.4",
+ "version": "v7.2.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "aabf79938aa795350c07ce6464dd1985607d95d5"
+ "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/aabf79938aa795350c07ce6464dd1985607d95d5",
- "reference": "aabf79938aa795350c07ce6464dd1985607d95d5",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b",
+ "reference": "102be5e6a8e4f4f3eb3149bcbfa33a80d1ee374b",
"shasum": ""
},
"require": {
@@ -8024,7 +7948,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v7.2.4"
+ "source": "https://github.com/symfony/error-handler/tree/v7.2.5"
},
"funding": [
{
@@ -8040,7 +7964,7 @@
"type": "tidelift"
}
],
- "time": "2025-02-02T20:27:07+00:00"
+ "time": "2025-03-03T07:12:39+00:00"
},
{
"name": "symfony/event-dispatcher",
@@ -8264,16 +8188,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v7.2.3",
+ "version": "v7.2.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0"
+ "reference": "371272aeb6286f8135e028ca535f8e4d6f114126"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ee1b504b8926198be89d05e5b6fc4c3810c090f0",
- "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/371272aeb6286f8135e028ca535f8e4d6f114126",
+ "reference": "371272aeb6286f8135e028ca535f8e4d6f114126",
"shasum": ""
},
"require": {
@@ -8322,7 +8246,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v7.2.3"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.2.5"
},
"funding": [
{
@@ -8338,20 +8262,20 @@
"type": "tidelift"
}
],
- "time": "2025-01-17T10:56:55+00:00"
+ "time": "2025-03-25T15:54:33+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.2.4",
+ "version": "v7.2.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "9f1103734c5789798fefb90e91de4586039003ed"
+ "reference": "b1fe91bc1fa454a806d3f98db4ba826eb9941a54"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f1103734c5789798fefb90e91de4586039003ed",
- "reference": "9f1103734c5789798fefb90e91de4586039003ed",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b1fe91bc1fa454a806d3f98db4ba826eb9941a54",
+ "reference": "b1fe91bc1fa454a806d3f98db4ba826eb9941a54",
"shasum": ""
},
"require": {
@@ -8436,7 +8360,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v7.2.4"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.2.5"
},
"funding": [
{
@@ -8452,7 +8376,7 @@
"type": "tidelift"
}
],
- "time": "2025-02-26T11:01:22+00:00"
+ "time": "2025-03-28T13:32:50+00:00"
},
{
"name": "symfony/mailer",
@@ -9391,16 +9315,16 @@
},
{
"name": "symfony/process",
- "version": "v7.2.4",
+ "version": "v7.2.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf"
+ "reference": "87b7c93e57df9d8e39a093d32587702380ff045d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf",
- "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf",
+ "url": "https://api.github.com/repos/symfony/process/zipball/87b7c93e57df9d8e39a093d32587702380ff045d",
+ "reference": "87b7c93e57df9d8e39a093d32587702380ff045d",
"shasum": ""
},
"require": {
@@ -9432,7 +9356,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v7.2.4"
+ "source": "https://github.com/symfony/process/tree/v7.2.5"
},
"funding": [
{
@@ -9448,7 +9372,7 @@
"type": "tidelift"
}
],
- "time": "2025-02-05T08:33:46+00:00"
+ "time": "2025-03-13T12:21:46+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
@@ -10387,6 +10311,85 @@
}
],
"packages-dev": [
+ {
+ "name": "druc/laravel-langscanner",
+ "version": "dev-l12-compatibility",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel-shift/laravel-langscanner.git",
+ "reference": "a4efee46f730e389a8ae53f7495468d123cfee5c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel-shift/laravel-langscanner/zipball/a4efee46f730e389a8ae53f7495468d123cfee5c",
+ "reference": "a4efee46f730e389a8ae53f7495468d123cfee5c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/contracts": "^9.0|^10.0|^11.0|^12.0",
+ "php": "^8.0",
+ "spatie/laravel-package-tools": "^1.11.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.3",
+ "nunomaduro/collision": "^6.2",
+ "orchestra/testbench": "^7.02|^9.0|^10.0",
+ "phpunit/phpunit": "^9.5|^10.1|^11.5.3"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Druc\\Langscanner\\LangscannerServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Druc\\Langscanner\\": "src"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Druc\\Langscanner\\Tests\\": "tests"
+ }
+ },
+ "scripts": {
+ "test": [
+ "./vendor/bin/testbench package:test"
+ ],
+ "test-coverage": [
+ "vendor/bin/phpunit --coverage-html coverage"
+ ]
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Constantin Druc",
+ "email": "druc@pinsmile.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Scan missing language translations.",
+ "homepage": "https://github.com/druc/laravel-langscanner",
+ "keywords": [
+ "druc",
+ "laravel-langscanner"
+ ],
+ "support": {
+ "source": "https://github.com/laravel-shift/laravel-langscanner/tree/l12-compatibility"
+ },
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/druc"
+ }
+ ],
+ "time": "2025-02-19T14:38:40+00:00"
+ },
{
"name": "fakerphp/faker",
"version": "v1.24.1",
@@ -10597,16 +10600,16 @@
},
{
"name": "gettext/languages",
- "version": "2.10.0",
+ "version": "2.12.1",
"source": {
"type": "git",
"url": "https://github.com/php-gettext/Languages.git",
- "reference": "4d61d67fe83a2ad85959fe6133d6d9ba7dddd1ab"
+ "reference": "0b0b0851c55168e1dfb14305735c64019732b5f1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-gettext/Languages/zipball/4d61d67fe83a2ad85959fe6133d6d9ba7dddd1ab",
- "reference": "4d61d67fe83a2ad85959fe6133d6d9ba7dddd1ab",
+ "url": "https://api.github.com/repos/php-gettext/Languages/zipball/0b0b0851c55168e1dfb14305735c64019732b5f1",
+ "reference": "0b0b0851c55168e1dfb14305735c64019732b5f1",
"shasum": ""
},
"require": {
@@ -10616,7 +10619,8 @@
"phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4"
},
"bin": [
- "bin/export-plural-rules"
+ "bin/export-plural-rules",
+ "bin/import-cldr-data"
],
"type": "library",
"autoload": {
@@ -10655,7 +10659,7 @@
],
"support": {
"issues": "https://github.com/php-gettext/Languages/issues",
- "source": "https://github.com/php-gettext/Languages/tree/2.10.0"
+ "source": "https://github.com/php-gettext/Languages/tree/2.12.1"
},
"funding": [
{
@@ -10667,7 +10671,7 @@
"type": "github"
}
],
- "time": "2022-10-18T15:00:10+00:00"
+ "time": "2025-03-19T11:14:02+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -10722,16 +10726,16 @@
},
{
"name": "laravel/pint",
- "version": "v1.21.2",
+ "version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "370772e7d9e9da087678a0edf2b11b6960e40558"
+ "reference": "7ddfaa6523a675fae5c4123ee38fc6bfb8ee4f36"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/370772e7d9e9da087678a0edf2b11b6960e40558",
- "reference": "370772e7d9e9da087678a0edf2b11b6960e40558",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/7ddfaa6523a675fae5c4123ee38fc6bfb8ee4f36",
+ "reference": "7ddfaa6523a675fae5c4123ee38fc6bfb8ee4f36",
"shasum": ""
},
"require": {
@@ -10742,9 +10746,9 @@
"php": "^8.2.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.72.0",
+ "friendsofphp/php-cs-fixer": "^3.75.0",
"illuminate/view": "^11.44.2",
- "larastan/larastan": "^3.2.0",
+ "larastan/larastan": "^3.3.1",
"laravel-zero/framework": "^11.36.1",
"mockery/mockery": "^1.6.12",
"nunomaduro/termwind": "^2.3",
@@ -10784,7 +10788,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2025-03-14T22:31:42+00:00"
+ "time": "2025-04-08T22:11:45+00:00"
},
{
"name": "laravel/sail",
@@ -10994,38 +10998,39 @@
},
{
"name": "nunomaduro/collision",
- "version": "v8.7.0",
+ "version": "v8.8.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "586cb8181a257a2152b6a855ca8d9598878a1a26"
+ "reference": "4cf9f3b47afff38b139fb79ce54fc71799022ce8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/586cb8181a257a2152b6a855ca8d9598878a1a26",
- "reference": "586cb8181a257a2152b6a855ca8d9598878a1a26",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/4cf9f3b47afff38b139fb79ce54fc71799022ce8",
+ "reference": "4cf9f3b47afff38b139fb79ce54fc71799022ce8",
"shasum": ""
},
"require": {
- "filp/whoops": "^2.17.0",
+ "filp/whoops": "^2.18.0",
"nunomaduro/termwind": "^2.3.0",
"php": "^8.2.0",
- "symfony/console": "^7.2.1"
+ "symfony/console": "^7.2.5"
},
"conflict": {
- "laravel/framework": "<11.39.1 || >=13.0.0",
- "phpunit/phpunit": "<11.5.3 || >=12.0.0"
+ "laravel/framework": "<11.44.2 || >=13.0.0",
+ "phpunit/phpunit": "<11.5.15 || >=13.0.0"
},
"require-dev": {
- "larastan/larastan": "^2.10.0",
- "laravel/framework": "^11.44.2",
+ "brianium/paratest": "^7.8.3",
+ "larastan/larastan": "^3.2",
+ "laravel/framework": "^11.44.2 || ^12.6",
"laravel/pint": "^1.21.2",
"laravel/sail": "^1.41.0",
"laravel/sanctum": "^4.0.8",
"laravel/tinker": "^2.10.1",
- "orchestra/testbench-core": "^9.12.0",
- "pestphp/pest": "^3.7.4",
- "sebastian/environment": "^6.1.0 || ^7.2.0"
+ "orchestra/testbench-core": "^9.12.0 || ^10.1",
+ "pestphp/pest": "^3.8.0",
+ "sebastian/environment": "^7.2.0 || ^8.0"
},
"type": "library",
"extra": {
@@ -11088,7 +11093,7 @@
"type": "patreon"
}
],
- "time": "2025-03-14T22:37:40+00:00"
+ "time": "2025-04-03T14:33:09+00:00"
},
{
"name": "phar-io/manifest",
@@ -11533,16 +11538,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.12",
+ "version": "11.5.17",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "d42785840519401ed2113292263795eb4c0f95da"
+ "reference": "fd2e863a2995cdfd864fb514b5e0b28b09895b5c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d42785840519401ed2113292263795eb4c0f95da",
- "reference": "d42785840519401ed2113292263795eb4c0f95da",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fd2e863a2995cdfd864fb514b5e0b28b09895b5c",
+ "reference": "fd2e863a2995cdfd864fb514b5e0b28b09895b5c",
"shasum": ""
},
"require": {
@@ -11562,14 +11567,14 @@
"phpunit/php-text-template": "^4.0.1",
"phpunit/php-timer": "^7.0.1",
"sebastian/cli-parser": "^3.0.2",
- "sebastian/code-unit": "^3.0.2",
+ "sebastian/code-unit": "^3.0.3",
"sebastian/comparator": "^6.3.1",
"sebastian/diff": "^6.0.2",
"sebastian/environment": "^7.2.0",
"sebastian/exporter": "^6.3.0",
"sebastian/global-state": "^7.0.2",
"sebastian/object-enumerator": "^6.0.1",
- "sebastian/type": "^5.1.0",
+ "sebastian/type": "^5.1.2",
"sebastian/version": "^5.0.2",
"staabm/side-effects-detector": "^1.0.5"
},
@@ -11614,7 +11619,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.12"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.17"
},
"funding": [
{
@@ -11630,7 +11635,7 @@
"type": "tidelift"
}
],
- "time": "2025-03-07T07:31:03+00:00"
+ "time": "2025-04-08T07:59:11+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -11691,16 +11696,16 @@
},
{
"name": "sebastian/code-unit",
- "version": "3.0.2",
+ "version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca"
+ "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca",
- "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64",
+ "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64",
"shasum": ""
},
"require": {
@@ -11736,7 +11741,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/code-unit/issues",
"security": "https://github.com/sebastianbergmann/code-unit/security/policy",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2"
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3"
},
"funding": [
{
@@ -11744,7 +11749,7 @@
"type": "github"
}
],
- "time": "2024-12-12T09:59:06+00:00"
+ "time": "2025-03-19T07:56:08+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@@ -12449,16 +12454,16 @@
},
{
"name": "sebastian/type",
- "version": "5.1.0",
+ "version": "5.1.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac"
+ "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/461b9c5da241511a2a0e8f240814fb23ce5c0aac",
- "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e",
+ "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e",
"shasum": ""
},
"require": {
@@ -12494,7 +12499,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"security": "https://github.com/sebastianbergmann/type/security/policy",
- "source": "https://github.com/sebastianbergmann/type/tree/5.1.0"
+ "source": "https://github.com/sebastianbergmann/type/tree/5.1.2"
},
"funding": [
{
@@ -12502,7 +12507,7 @@
"type": "github"
}
],
- "time": "2024-09-17T13:12:04+00:00"
+ "time": "2025-03-18T13:35:50+00:00"
},
{
"name": "sebastian/version",
@@ -12992,16 +12997,16 @@
},
{
"name": "symfony/yaml",
- "version": "v7.2.3",
+ "version": "v7.2.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec"
+ "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/ac238f173df0c9c1120f862d0f599e17535a87ec",
- "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912",
+ "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912",
"shasum": ""
},
"require": {
@@ -13044,7 +13049,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v7.2.3"
+ "source": "https://github.com/symfony/yaml/tree/v7.2.5"
},
"funding": [
{
@@ -13060,7 +13065,7 @@
"type": "tidelift"
}
],
- "time": "2025-01-07T12:55:42+00:00"
+ "time": "2025-03-03T07:12:39+00:00"
},
{
"name": "theseer/tokenizer",
diff --git a/backend/config/services.php b/backend/config/services.php
index f3e2c74972..f8faf1c875 100644
--- a/backend/config/services.php
+++ b/backend/config/services.php
@@ -36,4 +36,7 @@
'public_key' => env('STRIPE_PUBLIC_KEY'),
'webhook_secret' => env('STRIPE_WEBHOOK_SECRET'),
],
+ 'open_exchange_rates' => [
+ 'app_id' => env('OPEN_EXCHANGE_RATES_APP_ID'),
+ ],
];
diff --git a/backend/data/currencies.php b/backend/data/currencies.php
index c6adcaa92d..7a739af584 100644
--- a/backend/data/currencies.php
+++ b/backend/data/currencies.php
@@ -1,7 +1,8 @@
'AOA',
'Argentine Peso' => 'ARS',
'Australian Dollar' => 'AUD',
- 'Aruban Florin' => 'AWG',
'Azerbaijani Manat' => 'AZN',
'Bosnia & Herzegovina Convertible Mark' => 'BAM',
'Barbadian or Bajan Dollar' => 'BBD',
@@ -25,7 +25,6 @@
'Bolivian Bolíviano' => 'BOB',
'Brazilian Real' => 'BRL',
'Bahamian Dollar' => 'BSD',
- 'Bhutanese Ngultrum' => 'BTN',
'Botswana Pula' => 'BWP',
'Belarusian Ruble' => 'BYN',
'Belizean Dollar' => 'BZD',
@@ -36,8 +35,6 @@
'Chinese Yuan Renminbi' => 'CNY',
'Colombian Peso' => 'COP',
'Costa Rican Colon' => 'CRC',
- 'Cuban Convertible Peso' => 'CUC',
- 'Cuban Peso' => 'CUP',
'Cape Verdean Escudo' => 'CVE',
'Czech Koruna' => 'CZK',
'Djiboutian Franc' => 'DJF',
@@ -49,10 +46,8 @@
'Ethiopian Birr' => 'ETB',
'Euro' => 'EUR',
'Fijian Dollar' => 'FJD',
- 'Falkland Island Pound' => 'FKP',
'British Pound' => 'GBP',
'Georgian Lari' => 'GEL',
- 'Guernsey Pound' => 'GGP',
'Ghanaian Cedi' => 'GHS',
'Gibraltar Pound' => 'GIP',
'Gambian Dalasi' => 'GMD',
@@ -62,16 +57,12 @@
'Hong Kong Dollar' => 'HKD',
'Honduran Lempira' => 'HNL',
'Croatian Kuna' => 'HRK',
- 'Haitian Gourde' => 'HTG',
'Hungarian Forint' => 'HUF',
'Indonesian Rupiah' => 'IDR',
'Israeli Shekel' => 'ILS',
- 'Isle of Man Pound' => 'IMP',
'Indian Rupee' => 'INR',
'Iraqi Dinar' => 'IQD',
- 'Iranian Rial' => 'IRR',
'Icelandic Krona' => 'ISK',
- 'Jersey Pound' => 'JEP',
'Jamaican Dollar' => 'JMD',
'Jordanian Dinar' => 'JOD',
'Japanese Yen' => 'JPY',
@@ -79,7 +70,6 @@
'Kyrgyzstani Som' => 'KGS',
'Cambodian Riel' => 'KHR',
'Comorian Franc' => 'KMF',
- 'North Korean Won' => 'KPW',
'South Korean Won' => 'KRW',
'Kuwaiti Dinar' => 'KWD',
'Caymanian Dollar' => 'KYD',
@@ -88,7 +78,6 @@
'Lebanese Pound' => 'LBP',
'Sri Lankan Rupee' => 'LKR',
'Liberian Dollar' => 'LRD',
- 'Basotho Loti' => 'LSL',
'Libyan Dinar' => 'LYD',
'Moroccan Dirham' => 'MAD',
'Moldovan Leu' => 'MDL',
@@ -97,7 +86,6 @@
'Burmese Kyat' => 'MMK',
'Mongolian Tughrik' => 'MNT',
'Macau Pataca' => 'MOP',
- 'Mauritanian Ouguiya' => 'MRO',
'Mauritian Rupee' => 'MUR',
'Maldivian Rufiyaa' => 'MVR',
'Malawian Kwacha' => 'MWK',
@@ -132,11 +120,9 @@
'Saint Helenian Pound' => 'SHP',
'Sierra Leonean Leone' => 'SLL',
'Somali Shilling' => 'SOS',
- 'Seborgan Luigino' => 'SPL',
'Surinamese Dollar' => 'SRD',
'Sao Tomean Dobra' => 'STD',
'Salvadoran Colon' => 'SVC',
- 'Syrian Pound' => 'SYP',
'Swazi Lilangeni' => 'SZL',
'Thai Baht' => 'THB',
'Tajikistani Somoni' => 'TJS',
@@ -145,7 +131,6 @@
'Tongan Pa\'anga' => 'TOP',
'Turkish Lira' => 'TRY',
'Trinidadian Dollar' => 'TTD',
- 'Tuvaluan Dollar' => 'TVD',
'Taiwan New Dollar' => 'TWD',
'Tanzanian Shilling' => 'TZS',
'Ukrainian Hryvnia' => 'UAH',
@@ -153,22 +138,14 @@
'United States Dollar' => 'USD',
'Uruguayan Peso' => 'UYU',
'Uzbekistani Som' => 'UZS',
- 'Venezuelan Bolívar' => 'VEF',
'Vietnamese Dong' => 'VND',
- 'Ni-Vanuatu Vatu' => 'VUV',
+ 'Vanuatu Vatu' => 'VUV',
'Samoan Tala' => 'WST',
- 'Central African CFA Franc BEAC' => 'XAF',
- 'Silver Ounce' => 'XAG',
- 'Gold Ounce' => 'XAU',
'East Caribbean Dollar' => 'XCD',
- 'IMF Special Drawing Rights' => 'XDR',
- 'CFA Franc' => 'XOF',
- 'Palladium Ounce' => 'XPD',
+ 'Central African CFA Franc BEAC' => 'XAF',
+ 'West African CFA Franc' => 'XOF',
'CFP Franc' => 'XPF',
- 'Platinum Ounce' => 'XPT',
'Yemeni Rial' => 'YER',
'South African Rand' => 'ZAR',
'Zambian Kwacha' => 'ZMW',
- 'Zimbabwean Dollar' => 'ZWD',
];
-
diff --git a/frontend/data/currencies.ts b/frontend/data/currencies.ts
index dae1979783..ffb7980a0d 100644
--- a/frontend/data/currencies.ts
+++ b/frontend/data/currencies.ts
@@ -40,8 +40,6 @@ export const currencies = {
"Congolese Franc": "CDF",
"Costa Rican Colon": "CRC",
"Croatian Kuna": "HRK",
- "Cuban Convertible Peso": "CUC",
- "Cuban Peso": "CUP",
"Czech Koruna": "CZK",
"Danish Krone": "DKK",
"Djiboutian Franc": "DJF",
@@ -51,32 +49,24 @@ export const currencies = {
"Eritrean Nakfa": "ERN",
"Ethiopian Birr": "ETB",
"Euro": "EUR",
- "Falkland Island Pound": "FKP",
"Fijian Dollar": "FJD",
"Gambian Dalasi": "GMD",
"Georgian Lari": "GEL",
"Ghanaian Cedi": "GHS",
"Gibraltar Pound": "GIP",
- "Gold Ounce": "XAU",
"Guatemalan Quetzal": "GTQ",
- "Guernsey Pound": "GGP",
"Guinean Franc": "GNF",
"Guyanese Dollar": "GYD",
- "Haitian Gourde": "HTG",
"Honduran Lempira": "HNL",
"Hong Kong Dollar": "HKD",
"Hungarian Forint": "HUF",
- "IMF Special Drawing Rights": "XDR",
"Icelandic Krona": "ISK",
"Indian Rupee": "INR",
"Indonesian Rupiah": "IDR",
- "Iranian Rial": "IRR",
"Iraqi Dinar": "IQD",
- "Isle of Man Pound": "IMP",
"Israeli Shekel": "ILS",
"Jamaican Dollar": "JMD",
"Japanese Yen": "JPY",
- "Jersey Pound": "JEP",
"Jordanian Dinar": "JOD",
"Kazakhstani Tenge": "KZT",
"Kenyan Shilling": "KES",
@@ -92,7 +82,6 @@ export const currencies = {
"Malawian Kwacha": "MWK",
"Malaysian Ringgit": "MYR",
"Maldivian Rufiyaa": "MVR",
- "Mauritanian Ouguiya": "MRO",
"Mauritian Rupee": "MUR",
"Mexican Peso": "MXN",
"Moldovan Leu": "MDL",
@@ -105,17 +94,14 @@ export const currencies = {
"Ni-Vanuatu Vatu": "VUV",
"Nicaraguan Cordoba": "NIO",
"Nigerian Naira": "NGN",
- "North Korean Won": "KPW",
"Norwegian Krone": "NOK",
"Omani Rial": "OMR",
"Pakistani Rupee": "PKR",
- "Palladium Ounce": "XPD",
"Panamanian Balboa": "PAB",
"Papua New Guinean Kina": "PGK",
"Paraguayan Guarani": "PYG",
"Peruvian Sol": "PEN",
"Philippine Peso": "PHP",
- "Platinum Ounce": "XPT",
"Polish Zloty": "PLN",
"Qatari Riyal": "QAR",
"Romanian Leu": "RON",
@@ -124,13 +110,10 @@ export const currencies = {
"Saint Helenian Pound": "SHP",
"Salvadoran Colon": "SVC",
"Samoan Tala": "WST",
- "Sao Tomean Dobra": "STD",
"Saudi Arabian Riyal": "SAR",
- "Seborgan Luigino": "SPL",
"Serbian Dinar": "RSD",
"Seychellois Rupee": "SCR",
"Sierra Leonean Leone": "SLL",
- "Silver Ounce": "XAG",
"Singapore Dollar": "SGD",
"Solomon Islander Dollar": "SBD",
"Somali Shilling": "SOS",
@@ -142,7 +125,6 @@ export const currencies = {
"Swazi Lilangeni": "SZL",
"Swedish Krona": "SEK",
"Swiss Franc": "CHF",
- "Syrian Pound": "SYP",
"Taiwan New Dollar": "TWD",
"Tajikistani Somoni": "TJS",
"Tanzanian Shilling": "TZS",
@@ -152,24 +134,18 @@ export const currencies = {
"Tunisian Dinar": "TND",
"Turkish Lira": "TRY",
"Turkmenistani Manat": "TMT",
- "Tuvaluan Dollar": "TVD",
"Ugandan Shilling": "UGX",
"Ukrainian Hryvnia": "UAH",
"United Arab Emirates Dirham": "AED",
"United States Dollar": "USD",
"Uruguayan Peso": "UYU",
"Uzbekistani Som": "UZS",
- "Venezuelan Bol\u00edvar": "VEF",
"Vietnamese Dong": "VND",
"Yemeni Rial": "YER",
- "Zambian Kwacha": "ZMW",
- "Zimbabwean Dollar": "ZWD"
-}
+ "Zambian Kwacha": "ZMW"
+};
-export const currenciesMap = Object.entries(currencies).map(([k, v]) => {
- //todo - return long currency name
- return {
- value: v,
- label: k,
- }
-});
\ No newline at end of file
+export const currenciesMap = Object.entries(currencies).map(([k, v]) => ({
+ value: v,
+ label: k,
+}));
diff --git a/frontend/package.json b/frontend/package.json
index 579dce4eae..9f51a4c9f6 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -41,9 +41,11 @@
"@stripe/stripe-js": "^1.54.1",
"@tabler/icons-react": "^2.44.0",
"@tanstack/react-query": "5.52.2",
+ "@tiptap/extension-color": "^2.11.7",
"@tiptap/extension-image": "^2.11.5",
"@tiptap/extension-link": "^2.1.13",
"@tiptap/extension-text-align": "^2.1.13",
+ "@tiptap/extension-text-style": "^2.11.7",
"@tiptap/extension-underline": "^2.1.13",
"@tiptap/pm": "^2.1.13",
"@tiptap/react": "^2.1.13",
diff --git a/frontend/src/components/common/Editor/index.tsx b/frontend/src/components/common/Editor/index.tsx
index 0c954cf420..064b1b2bf1 100644
--- a/frontend/src/components/common/Editor/index.tsx
+++ b/frontend/src/components/common/Editor/index.tsx
@@ -4,6 +4,8 @@ import StarterKit from '@tiptap/starter-kit';
import Underline from '@tiptap/extension-underline';
import TextAlign from '@tiptap/extension-text-align';
import Image from '@tiptap/extension-image';
+import TextStyle from '@tiptap/extension-text-style';
+import Color from '@tiptap/extension-color';
import React, {useEffect, useState} from "react";
import {InputDescription, InputError, InputLabel} from "@mantine/core";
import classes from "./Editor.module.scss";
@@ -44,7 +46,9 @@ export const Editor = ({
Link,
TextAlign.configure({types: ['heading', 'paragraph']}),
Image,
- ImageResize
+ ImageResize,
+ TextStyle,
+ Color
],
onUpdate: ({editor}) => {
const html = editor.getHTML();
@@ -92,6 +96,24 @@ export const Editor = ({
+
@@ -130,6 +152,24 @@ export const Editor = ({
+
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
index fe20bf5a9f..bbd15dc222 100644
--- a/frontend/yarn.lock
+++ b/frontend/yarn.lock
@@ -1435,6 +1435,11 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.11.5.tgz#a550c544804e65507ab66dc8ab89a1e2f7d9228d"
integrity sha512-xOvHevNIQIcCCVn9tpvXa1wBp0wHN/2umbAZGTVzS+AQtM7BTo0tz8IyzwxkcZJaImONcUVYLOLzt2AgW1LltA==
+"@tiptap/extension-color@^2.11.7":
+ version "2.11.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-color/-/extension-color-2.11.7.tgz#c5222456d2f017391707fe86d4f7f811faa60968"
+ integrity sha512-2CWb0Qnh8Crf9OwnnWB+M1QJtWrbn6IMSwuOzk+tSzdWSazjN8h6XAZVemr0qMdAA/SyUigzorStiPxN6o3/vQ==
+
"@tiptap/extension-document@^2.11.5":
version "2.11.5"
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.11.5.tgz#1d650d232df46cf07b83e0a5cc64db1c70057f37"
@@ -1524,6 +1529,11 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.11.5.tgz#f1b3882de489328203187e6256e6ee130477cfad"
integrity sha512-YUmYl0gILSd/u/ZkOmNxjNXVw+mu8fpC2f8G4I4tLODm0zCx09j9DDEJXSrM5XX72nxJQqtSQsCpNKnL0hfeEQ==
+"@tiptap/extension-text-style@^2.11.7":
+ version "2.11.7"
+ resolved "https://registry.yarnpkg.com/@tiptap/extension-text-style/-/extension-text-style-2.11.7.tgz#1af9c23ed6154680eac1c0621d1112764c3fafb9"
+ integrity sha512-LHO6DBg/9SkCQFdWlVfw9nolUmw+Cid94WkTY+7IwrpyG2+ZGQxnKpCJCKyeaFNbDoYAtvu0vuTsSXeCkgShcA==
+
"@tiptap/extension-text@^2.11.5":
version "2.11.5"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.11.5.tgz#10cc6ec519aac71a6841ec9bd914ded747f6ec3f"