Compare commits

...

43 Commits

Author SHA1 Message Date
James Cole
56a1eb6515 Fix echo statement for Data importer version
Signed-off-by: James Cole <james@firefly-iii.org>
2026-02-24 08:07:45 +01:00
github-actions[bot]
62ef3966ed Merge pull request #11799 from firefly-iii/develop
🤖 Automatically merge the PR into the main branch.
2026-02-23 20:18:47 +01:00
github-actions[bot]
241d8fd921 Merge pull request #11798 from firefly-iii/release-1771874314
🤖 Automatically merge the PR into the develop branch.
2026-02-23 20:18:41 +01:00
JC5
9028898232 🤖 Auto commit for release 'v6.5.0' on 2026-02-23 2026-02-23 20:18:34 +01:00
James Cole
bf12a5631d Expand changelog. 2026-02-23 20:13:47 +01:00
github-actions[bot]
8852bb022b Merge pull request #11797 from firefly-iii/release-1771873461
🤖 Automatically merge the PR into the develop branch.
2026-02-23 20:04:29 +01:00
JC5
03d0d503b0 🤖 Auto commit for release 'develop' on 2026-02-23 2026-02-23 20:04:21 +01:00
James Cole
6b8c8c1b28 Merge pull request #11796 from R1DEN/main
fix operator order for pc_amount bug
2026-02-23 11:41:16 +01:00
R1DEN
e43a188af8 fix operator order for pc_amount bug 2026-02-23 11:54:48 +02:00
Sander Dorigo
a806bf3b10 Merge branch 'develop' of https://github.com/firefly-iii/firefly-iii into develop 2026-02-23 08:19:34 +01:00
Sander Dorigo
9b05c777cd Fix https://github.com/firefly-iii/firefly-iii/issues/11792 2026-02-23 08:08:46 +01:00
github-actions[bot]
532d6b21f8 Merge pull request #11793 from firefly-iii/release-1771830229
🤖 Automatically merge the PR into the develop branch.
2026-02-23 08:03:59 +01:00
JC5
3238441315 🤖 Auto commit for release 'develop' on 2026-02-23 2026-02-23 08:03:49 +01:00
James Cole
f75eff173b Merge pull request #11790 from firefly-iii/dependabot/composer/develop/spatie/laravel-html-3.13.0 2026-02-23 06:48:11 +01:00
James Cole
b0af654c01 Merge pull request #11791 from firefly-iii/dependabot/composer/develop/spatie/laravel-ignition-2.11.0 2026-02-23 06:47:41 +01:00
dependabot[bot]
f1515f6139 Bump spatie/laravel-html from 3.12.3 to 3.13.0
Bumps [spatie/laravel-html](https://github.com/spatie/laravel-html) from 3.12.3 to 3.13.0.
- [Release notes](https://github.com/spatie/laravel-html/releases)
- [Changelog](https://github.com/spatie/laravel-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/spatie/laravel-html/compare/3.12.3...3.13.0)

---
updated-dependencies:
- dependency-name: spatie/laravel-html
  dependency-version: 3.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-23 05:43:21 +00:00
James Cole
6e7758da05 Merge pull request #11789 from firefly-iii/dependabot/composer/develop/rector/rector-2.3.8 2026-02-23 06:42:11 +01:00
dependabot[bot]
29419cc514 Bump spatie/laravel-ignition from 2.10.0 to 2.11.0
Bumps [spatie/laravel-ignition](https://github.com/spatie/laravel-ignition) from 2.10.0 to 2.11.0.
- [Release notes](https://github.com/spatie/laravel-ignition/releases)
- [Changelog](https://github.com/spatie/laravel-ignition/blob/main/CHANGELOG.md)
- [Commits](https://github.com/spatie/laravel-ignition/compare/2.10.0...2.11.0)

---
updated-dependencies:
- dependency-name: spatie/laravel-ignition
  dependency-version: 2.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-23 03:52:50 +00:00
dependabot[bot]
370781b8ae Bump rector/rector from 2.3.7 to 2.3.8
Bumps [rector/rector](https://github.com/rectorphp/rector) from 2.3.7 to 2.3.8.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/2.3.7...2.3.8)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-version: 2.3.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-23 03:52:15 +00:00
James Cole
5a638ba02e Fix some code and add a changelog. 2026-02-22 20:17:01 +01:00
James Cole
cf3c836293 Merge pull request #11787 from R1DEN/main
Fix chart API balance carry-forward bug
2026-02-22 20:08:23 +01:00
James Cole
3cd3dafb7f Add backticks to IP addresses. 2026-02-22 17:45:40 +01:00
RiDEN
ed3f4f62ee Fix chart API balance carry-forward bug and add missing deleted_at filter
The chart loop used exact-date lookup into the range array, silently
dropping transactions that fell between chart boundary dates when
period > 1D. Replace with a range-walking approach that advances
through all intervening entries.

Also add whereNull('transaction_journals.deleted_at') to
accountsBalancesOptimized() to match the daily-delta query, and fix
a double-space typo in a date format string.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 18:37:00 +02:00
github-actions[bot]
80823cdfe3 Merge pull request #11784 from firefly-iii/release-1771741207
🤖 Automatically merge the PR into the develop branch.
2026-02-22 07:20:14 +01:00
JC5
defaef171e 🤖 Auto commit for release 'develop' on 2026-02-22 2026-02-22 07:20:07 +01:00
James Cole
81f6f22efb Introduce undocumented count endpoint. 2026-02-22 07:05:30 +01:00
github-actions[bot]
4ad2508675 Merge pull request #11781 from firefly-iii/release-1771701858
🤖 Automatically merge the PR into the develop branch.
2026-02-21 20:24:25 +01:00
JC5
35f997be45 🤖 Auto commit for release 'develop' on 2026-02-21 2026-02-21 20:24:18 +01:00
James Cole
ad3fec1458 Clean up templates. 2026-02-21 20:18:04 +01:00
github-actions[bot]
25eab80ec3 Merge pull request #11780 from firefly-iii/release-1771686867
🤖 Automatically merge the PR into the develop branch.
2026-02-21 16:14:35 +01:00
JC5
c27e9873b2 🤖 Auto commit for release 'develop' on 2026-02-21 2026-02-21 16:14:27 +01:00
James Cole
84f4f63104 Update changelog. 2026-02-21 16:08:55 +01:00
James Cole
02d37998f9 Merge pull request #11776 from dakennguyen/convert-to-primary-currency-for-charts
Convert to primary currency for charts
2026-02-21 15:44:56 +01:00
James Cole
39c72a60e1 Fix https://github.com/firefly-iii/firefly-iii/issues/11778 2026-02-21 15:42:52 +01:00
Khoa Nguyen
1980f73694 Convert to primary currency for report chart 2026-02-21 13:14:57 +01:00
Khoa Nguyen
d135186149 Convert to primary currency for category chart 2026-02-21 13:14:49 +01:00
github-actions[bot]
3e36287374 Merge pull request #11774 from firefly-iii/release-1771667913
🤖 Automatically merge the PR into the develop branch.
2026-02-21 10:58:39 +01:00
JC5
37c4db2ce9 🤖 Auto commit for release 'develop' on 2026-02-21 2026-02-21 10:58:33 +01:00
James Cole
8e6ff3ceaf Fix small issues reported over mail and from the demo site. 2026-02-21 10:53:14 +01:00
James Cole
6e0e32dc6c You can always grab the latest develop release. 2026-02-21 08:05:01 +01:00
github-actions[bot]
b0e21dd553 Merge pull request #11773 from firefly-iii/release-1771657248
🤖 Automatically merge the PR into the develop branch.
2026-02-21 08:00:55 +01:00
JC5
88291c5f63 🤖 Auto commit for release 'develop' on 2026-02-21 2026-02-21 08:00:48 +01:00
James Cole
a87e10f734 Add a week's delay. 2026-02-21 07:54:23 +01:00
27 changed files with 434 additions and 452 deletions

View File

@@ -4,9 +4,9 @@ body:
- type: checkboxes
attributes:
label: Support guidelines
description: Please read the support guidelines before proceeding.
description: Thank you for reading the support guidelines before proceeding.
options:
- label: I've read the <!-- MZ2udTpin6FL --> [support guidelines](https://github.com/firefly-iii/firefly-iii/blob/main/.github/support.md)
- label: I'm smart and I read the <!-- MZ2udTpin6FL --> [support guidelines](https://github.com/firefly-iii/firefly-iii/blob/main/.github/support.md)
required: true
- type: checkboxes
@@ -29,7 +29,7 @@ body:
attributes:
label: Debug information
description: Please provide the table from the /debug page. Do not add backticks or quotes.
placeholder: The output from the /debug page
placeholder: The output from the /debug page or "N/A"
validations:
required: true

View File

@@ -1,20 +1,22 @@
<!--
Thank you for submitting new code to Firefly III, or any of the related projects. Please read the following rules carefully.
- Please do not submit solutions for problems that are not already reported in an issue.
- Unfortunately, Firefly III can't be your learning experience. If you're new to all of this, please open an issue first.
- Please do not open PRs to "discuss" possible solutions or to "get feedback" on your code. I simply don't have time for that.
- Pull requests for the MAIN branch will be closed.
- DO NOT include translated strings in your PR.
- PRs (or parts thereof) that only fix issues inside code comments will not be accepted.
Please TALK TO ME FIRST before you open a PR.
If it feels necessary to open an issue first, please do so, before you open a PR.
1. If you fix a problem that has no ticket, talk to me FIRST.
2. If you introduce new financial solutions or concepts, talk to me FIRST.
3. If your PR is more than 25 lines, talk to me FIRST.
4. If you used AI to write your PR, talk to me FIRST.
5. If you fix spelling or code comments, talk to me FIRST.
Wanna talk to me? Open a GitHub Issue, Discussion, or send me an email: james@firefly-iii.org
See also: https://docs.firefly-iii.org/explanation/support/#contributing-code
-->
@JC5
This PR fixes issue # (if relevant).
This PR fixes issue # <!-- mandatory field! -->.
Changes in this pull request:

View File

@@ -41,7 +41,7 @@ jobs:
DDNOV="${DDNOV:1}"
echo "Firefly III version is ${{ steps.ff3version.outputs.release }}, without v is $FFNOV"
echo "Data importer version is ${{ steps.ff3version.outputs.release }}, without v is $FFNOV"
echo "Data importer version is ${{ steps.ff3version.outputs.release }}, without v is $DDNOV"
# user includes no debug info at all, and does not mention current version.
# user includes no debug info at all, but does mention current version

View File

@@ -4,6 +4,9 @@ Over time, many people have contributed to Firefly III. Their efforts are not al
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
## 2026
- R1DEN
- RiDEN
- Khoa Nguyen
- Nick Huang
- mateuszkulapl
- Gianluca Martino

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Chart;
use Carbon\Carbon;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Chart\ChartRequest;
use FireflyIII\Enums\UserRoleEnum;
@@ -142,23 +143,29 @@ class AccountController extends Controller
}
// create array of values to collect.
$rangeDates = array_map(static fn (string $d): Carbon => Carbon::createFromFormat('Y-m-d', $d)->startOfDay(), array_keys($range));
$rangeVals = array_values($range);
$rangeIdx = 0;
$rangeCount = count($rangeDates);
while ($currentStart <= $params['end']) {
$format = $currentStart->format('Y-m-d');
$label = $currentStart->toAtomString();
$balance = array_key_exists($format, $range) ? $range[$format]['balance'] : $previous;
$previous = $balance;
$currentSet['entries'][$label] = $balance;
// do the same for the primary currency balance, if relevant:
$pcBalance = null;
if ($this->convertToPrimary) {
$pcBalance = array_key_exists($format, $range) ? $range[$format]['pc_balance'] : $pcPrevious;
$pcPrevious = $pcBalance;
$currentSet['pc_entries'][$label] = $pcBalance;
// Advance through all range entries up to current chart date
while ($rangeIdx < $rangeCount && $rangeDates[$rangeIdx] <= $currentStart) {
$previous = $rangeVals[$rangeIdx]['balance'];
if ($this->convertToPrimary) {
$pcPrevious = $rangeVals[$rangeIdx]['pc_balance'];
}
++$rangeIdx;
}
$currentStart = Navigation::addPeriod($currentStart, $period);
// $currentStart->addDay();
$currentSet['entries'][$label] = $previous;
if ($this->convertToPrimary) {
$currentSet['pc_entries'][$label] = $pcPrevious;
}
$currentStart = Navigation::addPeriod($currentStart, $period);
}
$this->chartData[] = $currentSet;
}

View File

@@ -25,11 +25,15 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Search;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Search\CountRequest;
use FireflyIII\Api\V1\Requests\Search\TransactionSearchRequest;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment;
use FireflyIII\Support\Search\SearchInterface;
use FireflyIII\Transformers\TransactionGroupTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Log;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection;
@@ -38,6 +42,51 @@ use League\Fractal\Resource\Collection;
*/
class TransactionController extends Controller
{
private JournalRepositoryInterface $repository;
public function __construct()
{
parent::__construct();
$this->middleware(function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
$this->repository = app(JournalRepositoryInterface::class);
$this->repository->setUser($admin);
return $next($request);
});
}
public function count(CountRequest $request, SearchInterface $searcher): JsonResponse
{
$count = 0;
$includeDeleted = $request->attributes->get('include_deleted', false);
$externalId = (string) $request->attributes->get('external_identifier');
$internalRef = (string) $request->attributes->get('internal_reference');
$notes = (string) $request->attributes->get('notes');
$description = (string) $request->attributes->get('description');
Log::debug(sprintf('Include deleted? %s', var_export($includeDeleted, true)));
if ('' !== $externalId) {
$count += $this->repository->countByMeta('external_identifier', $externalId, $includeDeleted);
Log::debug(sprintf('Search for transactions with external_identifier "%s", count is now %d', $externalId, $count));
}
if ('' !== $internalRef) {
$count += $this->repository->countByMeta('internal_reference', $internalRef, $includeDeleted);
Log::debug(sprintf('Search for transactions with internal_reference "%s", count is now %d', $internalRef, $count));
}
if ('' !== $notes) {
$count += $this->repository->countByNotes($notes, $includeDeleted);
Log::debug(sprintf('Search for transactions with notes LIKE "%s", count is now %d', $notes, $count));
}
if ('' !== $description) {
$count += $this->repository->countByDescription($description, $includeDeleted);
Log::debug(sprintf('Search for transactions with description "%s", count is now %d', $description, $count));
}
return response()->json(['count' => $count]);
}
/**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/search/searchTransactions

View File

@@ -92,7 +92,7 @@ class UpdateRequest extends FormRequest
'description' => 'min:1|max:32768|nullable',
'rule_group_id' => 'belongsToUser:rule_groups',
'rule_group_title' => 'nullable|min:1|max:255|belongsToUser:rule_groups,title',
'trigger' => 'in:store-journal,update-journal.manual-activation',
'trigger' => 'in:store-journal,update-journal,manual-activation',
'triggers.*.type' => 'required|in:'.implode(',', $validTriggers),
'triggers.*.value' => 'required_if:actions.*.type,'.$contextTriggers.'|min:1|ruleTriggerValue|max:1024',
'triggers.*.stop_processing' => [new IsBoolean()],

View File

@@ -0,0 +1,64 @@
<?php
declare(strict_types=1);
/*
* SearchRequest.php
* Copyright (c) 2026 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
namespace FireflyIII\Api\V1\Requests\Search;
use FireflyIII\Api\V1\Requests\AggregateFormRequest;
use FireflyIII\Rules\IsBoolean;
use Illuminate\Contracts\Validation\Validator;
use Override;
class CountRequest extends AggregateFormRequest
{
public function rules(): array
{
return [
'notes' => 'string|min:1|max:255',
'external_identifier' => 'string|min:1|max:255',
'description' => 'string|min:1|max:255',
'internal_reference' => 'string|min:1|max:255',
'include_deleted' => new IsBoolean(),
];
}
public function withValidator(Validator $validator): void
{
$validator->after(function (Validator $validator): void {
if ($validator->failed()) {
return;
}
$this->attributes->set('include_deleted', $this->convertBoolean($this->input('include_deleted', 'false')));
$this->attributes->set('notes', $this->convertString('notes'));
$this->attributes->set('external_identifier', $this->convertString('external_identifier'));
$this->attributes->set('description', $this->convertString('description'));
$this->attributes->set('internal_reference', $this->convertString('internal_reference'));
});
}
#[Override]
protected function getRequests(): array
{
return [];
}
}

View File

@@ -230,7 +230,11 @@ class AttachmentHelper implements AttachmentHelperInterface
$count = 0;
// ignore lines about polymorphic calls.
if ($model instanceof PiggyBank) {
$count = $model->account->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count();
$count = $model
->accounts()
->first()
->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count()
;
}
if (!$model instanceof PiggyBank) {
$count = $model->user->attachments()->where('md5', $md5)->where('attachable_id', $model->id)->where('attachable_type', $class)->count();
@@ -260,7 +264,7 @@ class AttachmentHelper implements AttachmentHelperInterface
$user = $model->user;
// ignore lines about polymorphic calls.
if ($model instanceof PiggyBank) {
$user = $model->account->user;
$user = $model->accounts()->first()->user;
}
$attachment = new Attachment(); // create Attachment object.

View File

@@ -103,10 +103,10 @@ class CategoryController extends Controller
*/
public function frontPage(): JsonResponse
{
$start = session('start', today(config('app.timezone'))->startOfMonth());
$end = session('end', today(config('app.timezone'))->endOfMonth());
$start = session('start', today(config('app.timezone'))->startOfMonth());
$end = session('end', today(config('app.timezone'))->endOfMonth());
// chart properties for cache:
$cache = new CacheProperties();
$cache = new CacheProperties();
$cache->addProperty($start);
$cache->addProperty($end);
$cache->addProperty($this->convertToPrimary);
@@ -115,9 +115,11 @@ class CategoryController extends Controller
return response()->json($cache->get());
}
$frontpageGenerator = new FrontpageChartGenerator($start, $end);
$chartData = $frontpageGenerator->generate();
$data = $this->generator->multiSet($chartData);
$frontpageGenerator = new FrontpageChartGenerator($start, $end);
$frontpageGenerator->convertToPrimary = $this->convertToPrimary;
$chartData = $frontpageGenerator->generate();
$data = $this->generator->multiSet($chartData);
$cache->store($data);
return response()->json($data);

View File

@@ -147,6 +147,7 @@ class ReportController extends Controller
$cache->addProperty($start);
$cache->addProperty($accounts);
$cache->addProperty($end);
$cache->addProperty($this->convertToPrimary);
if ($cache->has()) {
return response()->json($cache->get());
}
@@ -177,17 +178,32 @@ class ReportController extends Controller
foreach ($journals as $journal) {
$period = $journal['date']->format($format);
$currencyId = (int) $journal['currency_id'];
$currencySymbol = (string) $journal['currency_symbol'];
$currencyCode = (string) $journal['currency_code'];
$currencyName = (string) $journal['currency_name'];
$currencyDecimalPlaces = (int) $journal['currency_decimal_places'];
$amount = (string) $journal['amount'];
if ($this->convertToPrimary && null !== $this->primaryCurrency && $journal['currency_id'] !== $this->primaryCurrency->id) {
$currencyId = $this->primaryCurrency->id;
$currencySymbol = $this->primaryCurrency->symbol;
$currencyCode = $this->primaryCurrency->code;
$currencyName = $this->primaryCurrency->name;
$currencyDecimalPlaces = $this->primaryCurrency->decimal_places;
$amount = $journal['foreign_currency_id'] === $this->primaryCurrency->id ? $journal['foreign_amount'] : $journal['pc_amount'];
}
$data[$currencyId] ??= [
'currency_id' => $currencyId,
'currency_symbol' => $journal['currency_symbol'],
'currency_code' => $journal['currency_code'],
'currency_name' => $journal['currency_name'],
'currency_decimal_places' => (int) $journal['currency_decimal_places'],
'currency_symbol' => $currencySymbol,
'currency_code' => $currencyCode,
'currency_name' => $currencyName,
'currency_decimal_places' => $currencyDecimalPlaces,
];
$data[$currencyId][$period] ??= ['period' => $period, 'spent' => '0', 'earned' => '0'];
// in our outgoing?
$key = 'spent';
$amount = Steam::positive($journal['amount']);
$amount = Steam::positive($amount);
// deposit = incoming
// transfer or reconcile or opening balance, and these accounts are the destination.

View File

@@ -81,7 +81,7 @@ class SendsTestNotification
return;
}
Log::debug(sprintf('Will send %s as a notification.', $class));
NotificationSender::send($event->user, new $class());
NotificationSender::send($event->{$type}, new $class());
Log::debug(sprintf('If you see no errors above this line, test notification was sent over channel "%s"', $event->channel));
}
}

View File

@@ -48,6 +48,47 @@ class JournalRepository implements JournalRepositoryInterface, UserGroupInterfac
{
use UserGroupTrait;
#[Override]
public function countByDescription(string $value, bool $includeDeleted): int
{
$search = $this->user->transactionJournals()->where('description', $value);
if ($includeDeleted) {
$search->withTrashed();
}
return $search->count();
}
#[Override]
public function countByMeta(string $field, string $value, bool $includeDeleted): int
{
$search = TransactionJournalMeta::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id')
->where('name', $field)
->where('data', json_encode($value))
->where('transaction_journals.user_id', $this->user->id)
;
if ($includeDeleted) {
$search->withTrashed();
}
return $search->count();
}
#[Override]
public function countByNotes(string $value, bool $includeDeleted): int
{
$search = Note::where('noteable_type', TransactionJournal::class)
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'notes.noteable_id')
->where('transaction_journals.user_id', $this->user->id)
->where('text', 'LIKE', sprintf('%%%s%%', $value))
;
if ($includeDeleted) {
$search->withTrashed();
}
return $search->count();
}
public function destroyGroup(TransactionGroup $transactionGroup): void
{
/** @var TransactionGroupDestroyService $service */

View File

@@ -47,6 +47,12 @@ use Illuminate\Support\Collection;
*/
interface JournalRepositoryInterface
{
public function countByDescription(string $value, bool $includeDeleted): int;
public function countByMeta(string $field, string $value, bool $includeDeleted): int;
public function countByNotes(string $value, bool $includeDeleted): int;
/**
* Deletes a transaction group.
*/

View File

@@ -110,7 +110,8 @@ class GitHubUpdateRequest implements UpdateRequestInterface
private function filterReleases(array $releases): array
{
$return = [];
$return = [];
$weekAgo = now()->subWeek();
/** @var array $release */
foreach ($releases as $release) {
@@ -119,6 +120,12 @@ class GitHubUpdateRequest implements UpdateRequestInterface
continue;
}
// new version must be at least a week old, unless it is a develop release.
if ($release['published_at']->gt($weekAgo) && !str_contains($release['version'], 'develop')) {
Log::debug(sprintf('Skip too new version "%s"', $release['version']));
continue;
}
// if channel is stable, and version is "alpha", continue.
// if channel is stable, and version is "beta", continue.
// if channel is beta, and version is "alpha", continue.

View File

@@ -1,252 +0,0 @@
<?php
/**
* UpdateRequest.php
* Copyright (c) 2020 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Services\FireflyIIIOrg\Update;
use Carbon\Carbon;
use FireflyIII\Events\Security\System\SystemFoundNewVersionOnline;
use FireflyIII\Support\System\IsOldVersion;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Facades\Log;
use JsonException;
use function Safe\json_decode;
/**
* Class UpdateRequest
*/
class UpdateRequest implements UpdateRequestInterface
{
use IsOldVersion;
public function getUpdateInformation(string $channel): array
{
Log::debug(sprintf('Now in getUpdateInformation(%s)', $channel));
$information = ['level' => 'error', 'message' => (string) trans('firefly.unknown_error')];
// try to get array from update server:
$updateInfo = $this->contactServer($channel);
if ('error' === $updateInfo['level']) {
Log::error('Update information contains an error.');
Log::error($updateInfo['message']);
$information['message'] = $updateInfo['message'];
return $information;
}
// if no error, parse the result and return
return $this->parseResult($updateInfo);
}
private function contactServer(string $channel): array
{
Log::debug(sprintf('Now in contactServer(%s)', $channel));
// always fall back to current version:
$return = [
'version' => config('firefly.version'),
'date' => today(config('app.timezone'))->startOfDay(),
'level' => 'error',
'message' => (string) trans('firefly.unknown_error'),
];
$url = config('firefly.update_endpoint');
Log::debug(sprintf('Going to call %s', $url));
try {
$client = new Client();
$options = ['headers' => ['User-Agent' => sprintf('FireflyIII/%s/%s', config('firefly.version'), $channel)], 'timeout' => 3.1415];
$res = $client->request('GET', $url, $options);
} catch (GuzzleException $e) {
Log::error('Ran into Guzzle error.');
Log::error($e->getMessage());
Log::error($e->getTraceAsString());
$return['message'] = sprintf('Guzzle: %s', strip_tags($e->getMessage()));
return $return;
}
if (200 !== $res->getStatusCode()) {
Log::error(sprintf('Response status from server is %d.', $res->getStatusCode()));
Log::error((string) $res->getBody());
$return['message'] = sprintf('Error: %d', $res->getStatusCode());
return $return;
}
$body = (string) $res->getBody();
try {
$json = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException) {
Log::error('Body is not valid JSON');
Log::error($body);
$return['message'] = 'Invalid JSON :(';
return $return;
}
if (!array_key_exists($channel, $json['firefly_iii'])) {
Log::error(sprintf('No valid update channel "%s"', $channel));
Log::error($body);
$return['message'] = sprintf('Unknown update channel "%s" :(', $channel);
}
// parse response a bit. No message yet.
$response = $json['firefly_iii'][$channel];
$date = Carbon::createFromFormat('Y-m-d', $response['date']);
if (!$date instanceof Carbon) {
$date = today(config('app.timezone'));
}
$return['version'] = $response['version'];
$return['level'] = 'success';
$return['date'] = $date->startOfDay();
Log::info('Response from update server', $response);
return $return;
}
/**
* TODO make shorter
*/
private function parseResult(array $information): array
{
Log::debug('Now in parseResult()', $information);
$current = (string) config('firefly.version');
$latest = (string) $information['version'];
// strip the 'v' from the version if it's there.
if (str_starts_with($latest, 'v')) {
$latest = substr($latest, 1);
}
if (str_starts_with($current, 'develop')) {
return $this->parseResultDevelop($current, $latest);
}
$compare = version_compare($latest, $current);
Log::debug(sprintf('Current version is "%s", latest is "%s", result is: %d', $current, $latest, $compare));
// -1: you're running a newer version:
if (-1 === $compare) {
return $this->runsNewerVersion($current, $latest);
}
// running the current version:
if (0 === $compare) {
return $this->runsSameVersion($current);
}
// a newer version is available!
/** @var Carbon $released */
$released = $information['date'];
$isBeta = $information['is_beta'] ?? false;
$isAlpha = $information['is_alpha'] ?? false;
// it's new but alpha:
if (true === $isAlpha) {
return $this->releasedNewAlpha($current, $latest, $released);
}
if (true === $isBeta) {
return $this->releasedNewBeta($current, $latest, $released);
}
return $this->releasedNewVersion($current, $latest, $released);
}
private function parseResultDevelop(string $current, string $latest): array
{
Log::debug(sprintf('User is running develop version "%s"', $current));
$compare = $this->compareDevelopVersions($current, $latest);
$return = [];
if (-1 === $compare) {
$return['level'] = 'info';
$return['message'] = (string) trans('firefly.update_current_dev_older', ['version' => $current, 'new_version' => $latest]);
return $return;
}
$return['level'] = 'info';
$return['message'] = (string) trans('firefly.update_current_dev_newer', ['version' => $current, 'new_version' => $latest]);
return $return;
}
private function releasedNewAlpha(string $current, string $latest, Carbon $date): array
{
Log::debug('New release is also a alpha!');
$message = (string) trans('firefly.update_new_version_alert', [
'your_version' => $current,
'new_version' => $latest,
'date' => $date->isoFormat((string) trans('config.month_and_day_js')),
]);
return ['level' => 'success', 'message' => sprintf('%s %s', $message, trans('firefly.update_version_alpha'))];
}
private function releasedNewBeta(string $current, string $latest, Carbon $date): array
{
Log::debug('New release is also a beta!');
$message = (string) trans('firefly.update_new_version_alert', [
'your_version' => $current,
'new_version' => $latest,
'date' => $date->isoFormat((string) trans('config.month_and_day_js')),
]);
return ['level' => 'success', 'message' => sprintf('%s %s', $message, trans('firefly.update_version_beta'))];
}
private function releasedNewVersion(string $current, string $latest, Carbon $date): array
{
Log::debug('New release is old enough.');
$message = (string) trans('firefly.update_new_version_alert', [
'your_version' => $current,
'new_version' => $latest,
'date' => $date->isoFormat((string) trans('config.month_and_day_js')),
]);
Log::debug('New release is here!', [$message]);
event(new SystemFoundNewVersionOnline($message));
return ['level' => 'success', 'message' => $message];
}
private function runsNewerVersion(string $current, string $latest): array
{
$return = [
'level' => 'info',
'message' => (string) trans('firefly.update_newer_version_alert', ['your_version' => $current, 'new_version' => $latest]),
];
Log::debug('User is running a newer version', $return);
return $return;
}
private function runsSameVersion(string $current): array
{
$return = ['level' => 'info', 'message' => (string) trans('firefly.update_current_version_alert', ['version' => $current])];
Log::debug('User is the current version.', $return);
return $return;
}
}

View File

@@ -176,6 +176,22 @@ class ExportDataGenerator
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
// @phpstan-ignore-line
public function __construct()
{
$this->accounts = new Collection();

View File

@@ -143,7 +143,6 @@ class AvailableBudgetCalculator
$availableBudget = $this->abRepository->find($this->currency, $start, $end);
$availableBudgets = $this->abRepository->findInRange($this->currency, $start, $end);
Log::debug(sprintf('Found #%d', $availableBudget->id));
foreach ($availableBudgets as $item) {
Log::debug(sprintf(
'findInRange found available budget #%d (%s - %s), will update it.',

View File

@@ -87,6 +87,7 @@ class Steam
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
->where('transaction_journals.date', $inclusive ? '<=' : '<', $date->format('Y-m-d H:i:s'))
->whereNull('transaction_journals.deleted_at')
->groupBy(['transactions.account_id', 'transaction_currencies.code'])
->get(['transactions.account_id', 'transaction_currencies.code', DB::raw('SUM(transactions.amount) as sum_of_amount')])
->toArray()
@@ -435,7 +436,7 @@ class Steam
if ($cache->has()) {
Log::debug('Return cached finalAccountBalanceInRange');
// return $cache->get();
return $cache->get();
}
$balances = [];
@@ -469,7 +470,7 @@ class Steam
->transactions()
->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
->where('transaction_journals.date', '>=', $start->format('Y-m-d H:i:s'))
->where('transaction_journals.date', '<=', $end->format('Y-m-d H:i:s'))
->where('transaction_journals.date', '<=', $end->format('Y-m-d H:i:s'))
->groupBy('transaction_journals.date')
->groupBy('transactions.transaction_currency_id')
->orderBy('transaction_journals.date', 'ASC')

View File

@@ -388,7 +388,7 @@ class TransactionGroupTransformer extends AbstractTransformer
}
// set primary amount to the normal amount if the currency matches.
if ($transaction['primary_currency']['id'] ?? null === $transaction['currency_id']) {
if (($transaction['primary_currency']['id'] ?? null) === (string) $transaction['currency_id']) {
$transaction['pc_amount'] = $amount;
}

View File

@@ -8,12 +8,26 @@ This project adheres to [Semantic Versioning](http://semver.org/).
> [!IMPORTANT]
> This release is the same as 6.4.23, but only works on PHP 8.5 and higher. To continue using the latest version of Firefly III, you must upgrade to (at least) PHP 8.5.0, or switch to the Docker containers. Read more about Firefly III's release and support schedule in [`releases.md`](releases.md).
And yes, despite my goal not to change things, some very clever users (that's you!) found some interesting bugs that will not make it back to 6.4.x.
### Added
- Support for PHP 8.5
### Changed
- [PR 11776](https://github.com/firefly-iii/firefly-iii/pull/11776) (Convert to primary currency for charts) reported by @dakennguyen
- The update check now contacts GitHub directly.
### Removed
- Support for PHP 8.4 and earlier
### Fixed
- [Discussion 11685](https://github.com/orgs/firefly-iii/discussions/11685) (Yearly budget best practices) started by @molnarti
- [Issue 11778](https://github.com/firefly-iii/firefly-iii/issues/11778) (API update rule trigger only accepts "store-journal") reported by @jhns-de
- [Issue 11785](https://github.com/firefly-iii/firefly-iii/issues/11785) (The `/api/v1/chart/account/overview` endpoint returns incorrect balances when `period` is set to anything larger than `1D` (e.g. `1W`, `1M`).) reported by @R1DEN
- [Issue 11792](https://github.com/firefly-iii/firefly-iii/issues/11792) (Uploading attachment to Piggy Bank causes "Attempt to read property 'user' on null" error) reported by @MrWuTalk2022
- [Issue 11795](https://github.com/firefly-iii/firefly-iii/issues/11795) (`pc_amount` always equals raw `amount` — operator precedence bug in TransactionGroupTransformer) reported by @R1DEN
- Test notification was broken for system owners.
## v6.4.23 - 2026-02-20
> [!WARNING]

View File

@@ -102,7 +102,7 @@
"psr/log": "<4",
"ramsey/uuid": "^4.7",
"rcrowe/twigbridge": "^0.14",
"spatie/laravel-html": "^3.2",
"spatie/laravel-html": "^3.13",
"spatie/laravel-ignition": "^2",
"spatie/period": "^2.4",
"symfony/expression-language": "^8.0",
@@ -124,7 +124,7 @@
"phpstan/phpstan-deprecation-rules": "^2",
"phpstan/phpstan-strict-rules": "^2",
"phpunit/phpunit": "^12",
"rector/rector": "^2.0",
"rector/rector": "^2.3",
"thecodingmachine/phpstan-safe-rule": "^1.4"
},

76
composer.lock generated
View File

@@ -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": "350d2b33cd703d3e5731ff7501e20d7c",
"content-hash": "94727a98e7468c09f3529378b9cb2457",
"packages": [
{
"name": "bacon/bacon-qr-code",
@@ -3766,16 +3766,16 @@
},
{
"name": "nette/schema",
"version": "v1.3.4",
"version": "v1.3.5",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
"reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7"
"reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/schema/zipball/086497a2f34b82fede9b5a41cc8e131d087cd8f7",
"reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7",
"url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002",
"reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002",
"shasum": ""
},
"require": {
@@ -3783,8 +3783,10 @@
"php": "8.1 - 8.5"
},
"require-dev": {
"nette/phpstan-rules": "^1.0",
"nette/tester": "^2.6",
"phpstan/phpstan": "^2.0@stable",
"phpstan/extension-installer": "^1.4@stable",
"phpstan/phpstan": "^2.1.39@stable",
"tracy/tracy": "^2.8"
},
"type": "library",
@@ -3825,9 +3827,9 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
"source": "https://github.com/nette/schema/tree/v1.3.4"
"source": "https://github.com/nette/schema/tree/v1.3.5"
},
"time": "2026-02-08T02:54:00+00:00"
"time": "2026-02-23T03:47:12+00:00"
},
{
"name": "nette/utils",
@@ -6140,27 +6142,27 @@
},
{
"name": "spatie/laravel-html",
"version": "3.12.3",
"version": "3.13.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-html.git",
"reference": "dd4a946ea9e2d7af8945fdfcf282663c69fac26a"
"reference": "0579bf41959b4c4068206ec9bf1fcd1b59d8fa25"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-html/zipball/dd4a946ea9e2d7af8945fdfcf282663c69fac26a",
"reference": "dd4a946ea9e2d7af8945fdfcf282663c69fac26a",
"url": "https://api.github.com/repos/spatie/laravel-html/zipball/0579bf41959b4c4068206ec9bf1fcd1b59d8fa25",
"reference": "0579bf41959b4c4068206ec9bf1fcd1b59d8fa25",
"shasum": ""
},
"require": {
"illuminate/http": "^10.0|^11.0|^12.0",
"illuminate/support": "^10.0|^11.0|^12.0",
"illuminate/http": "^10.0|^11.0|^12.0|^13.0",
"illuminate/support": "^10.0|^11.0|^12.0|^13.0",
"php": "^8.2"
},
"require-dev": {
"mockery/mockery": "^1.3",
"orchestra/testbench": "^8.0|^9.0|^10.0",
"pestphp/pest": "^2.34|^3.7"
"orchestra/testbench": "^8.0|^9.0|^10.0|^11.0",
"pestphp/pest": "^2.34|^3.7|^4.0"
},
"type": "library",
"extra": {
@@ -6206,7 +6208,7 @@
"spatie"
],
"support": {
"source": "https://github.com/spatie/laravel-html/tree/3.12.3"
"source": "https://github.com/spatie/laravel-html/tree/3.13.0"
},
"funding": [
{
@@ -6214,27 +6216,27 @@
"type": "custom"
}
],
"time": "2025-12-22T12:05:50+00:00"
"time": "2026-02-22T09:05:56+00:00"
},
{
"name": "spatie/laravel-ignition",
"version": "2.10.0",
"version": "2.11.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
"reference": "2abefdcca6074a9155f90b4ccb3345af8889d5f5"
"reference": "11f38d1ff7abc583a61c96bf3c1b03610a69cccd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2abefdcca6074a9155f90b4ccb3345af8889d5f5",
"reference": "2abefdcca6074a9155f90b4ccb3345af8889d5f5",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/11f38d1ff7abc583a61c96bf3c1b03610a69cccd",
"reference": "11f38d1ff7abc583a61c96bf3c1b03610a69cccd",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"illuminate/support": "^11.0|^12.0",
"illuminate/support": "^11.0|^12.0|^13.0",
"nesbot/carbon": "^2.72|^3.0",
"php": "^8.2",
"spatie/ignition": "^1.15.1",
@@ -6242,10 +6244,10 @@
"symfony/var-dumper": "^7.4|^8.0"
},
"require-dev": {
"livewire/livewire": "^3.7.0|^4.0",
"livewire/livewire": "^3.7.0|^4.0|dev-josh/v3-laravel-13-support",
"mockery/mockery": "^1.6.12",
"openai-php/client": "^0.10.3",
"orchestra/testbench": "^v9.16.0|^10.6",
"openai-php/client": "^0.10.3|^0.19",
"orchestra/testbench": "^v9.16.0|^10.6|^11.0",
"pestphp/pest": "^3.7|^4.0",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
@@ -6306,7 +6308,7 @@
"type": "github"
}
],
"time": "2026-01-20T13:16:11+00:00"
"time": "2026-02-22T19:14:05+00:00"
},
{
"name": "spatie/period",
@@ -11354,11 +11356,11 @@
},
{
"name": "phpstan/phpstan",
"version": "2.1.39",
"version": "2.1.40",
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224",
"reference": "c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/9b2c7aeb83a75d8680ea5e7c9b7fca88052b766b",
"reference": "9b2c7aeb83a75d8680ea5e7c9b7fca88052b766b",
"shasum": ""
},
"require": {
@@ -11403,7 +11405,7 @@
"type": "github"
}
],
"time": "2026-02-11T14:48:56+00:00"
"time": "2026-02-23T15:04:35+00:00"
},
{
"name": "phpstan/phpstan-deprecation-rules",
@@ -11960,16 +11962,16 @@
},
{
"name": "rector/rector",
"version": "2.3.7",
"version": "2.3.8",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
"reference": "9c46ad17f57963932c9788fd1b0f1d07ff450370"
"reference": "bbd37aedd8df749916cffa2a947cfc4714d1ba2c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/9c46ad17f57963932c9788fd1b0f1d07ff450370",
"reference": "9c46ad17f57963932c9788fd1b0f1d07ff450370",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/bbd37aedd8df749916cffa2a947cfc4714d1ba2c",
"reference": "bbd37aedd8df749916cffa2a947cfc4714d1ba2c",
"shasum": ""
},
"require": {
@@ -12008,7 +12010,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
"source": "https://github.com/rectorphp/rector/tree/2.3.7"
"source": "https://github.com/rectorphp/rector/tree/2.3.8"
},
"funding": [
{
@@ -12016,7 +12018,7 @@
"type": "github"
}
],
"time": "2026-02-19T14:44:16+00:00"
"time": "2026-02-22T09:45:50+00:00"
},
{
"name": "sebastian/cli-parser",

View File

@@ -78,8 +78,8 @@ return [
'running_balance_column' => (bool)envNonEmpty('USE_RUNNING_BALANCE', true), // this is only the default value, is not used.
// see cer.php for exchange rates feature flag.
],
'version' => 'develop/2026-02-21',
'build_time' => 1771653141,
'version' => '6.5.0',
'build_time' => 1771874172,
'api_version' => '2.1.0', // field is no longer used.
'db_version' => 28, // field is no longer used.

218
package-lock.json generated
View File

@@ -2620,9 +2620,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.58.0.tgz",
"integrity": "sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
"integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
"cpu": [
"arm"
],
@@ -2634,9 +2634,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.58.0.tgz",
"integrity": "sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
"integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
"cpu": [
"arm64"
],
@@ -2648,9 +2648,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.58.0.tgz",
"integrity": "sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
"integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
"cpu": [
"arm64"
],
@@ -2662,9 +2662,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.58.0.tgz",
"integrity": "sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
"integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
"cpu": [
"x64"
],
@@ -2676,9 +2676,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.58.0.tgz",
"integrity": "sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
"integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
"cpu": [
"arm64"
],
@@ -2690,9 +2690,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.58.0.tgz",
"integrity": "sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
"integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
"cpu": [
"x64"
],
@@ -2704,9 +2704,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.58.0.tgz",
"integrity": "sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
"integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
"cpu": [
"arm"
],
@@ -2718,9 +2718,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.58.0.tgz",
"integrity": "sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
"integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
"cpu": [
"arm"
],
@@ -2732,9 +2732,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.58.0.tgz",
"integrity": "sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
"integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
"cpu": [
"arm64"
],
@@ -2746,9 +2746,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.58.0.tgz",
"integrity": "sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
"integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
"cpu": [
"arm64"
],
@@ -2760,9 +2760,9 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.58.0.tgz",
"integrity": "sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
"integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
"cpu": [
"loong64"
],
@@ -2774,9 +2774,9 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.58.0.tgz",
"integrity": "sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
"integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
"cpu": [
"loong64"
],
@@ -2788,9 +2788,9 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.58.0.tgz",
"integrity": "sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
"integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
"cpu": [
"ppc64"
],
@@ -2802,9 +2802,9 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.58.0.tgz",
"integrity": "sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
"integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
"cpu": [
"ppc64"
],
@@ -2816,9 +2816,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.58.0.tgz",
"integrity": "sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
"integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
"cpu": [
"riscv64"
],
@@ -2830,9 +2830,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.58.0.tgz",
"integrity": "sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
"integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
"cpu": [
"riscv64"
],
@@ -2844,9 +2844,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.58.0.tgz",
"integrity": "sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
"integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
"cpu": [
"s390x"
],
@@ -2858,9 +2858,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.58.0.tgz",
"integrity": "sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
"integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
"cpu": [
"x64"
],
@@ -2872,9 +2872,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.58.0.tgz",
"integrity": "sha512-ZjMyby5SICi227y1MTR3VYBpFTdZs823Rs/hpakufleBoufoOIB6jtm9FEoxn/cgO7l6PM2rCEl5Kre5vX0QrQ==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
"integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
"cpu": [
"x64"
],
@@ -2886,9 +2886,9 @@
]
},
"node_modules/@rollup/rollup-openbsd-x64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.58.0.tgz",
"integrity": "sha512-ds4iwfYkSQ0k1nb8LTcyXw//ToHOnNTJtceySpL3fa7tc/AsE+UpUFphW126A6fKBGJD5dhRvg8zw1rvoGFxmw==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
"integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
"cpu": [
"x64"
],
@@ -2900,9 +2900,9 @@
]
},
"node_modules/@rollup/rollup-openharmony-arm64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.58.0.tgz",
"integrity": "sha512-fd/zpJniln4ICdPkjWFhZYeY/bpnaN9pGa6ko+5WD38I0tTqk9lXMgXZg09MNdhpARngmxiCg0B0XUamNw/5BQ==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
"integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
"cpu": [
"arm64"
],
@@ -2914,9 +2914,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.58.0.tgz",
"integrity": "sha512-YpG8dUOip7DCz3nr/JUfPbIUo+2d/dy++5bFzgi4ugOGBIox+qMbbqt/JoORwvI/C9Kn2tz6+Bieoqd5+B1CjA==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
"integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
"cpu": [
"arm64"
],
@@ -2928,9 +2928,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.58.0.tgz",
"integrity": "sha512-b9DI8jpFQVh4hIXFr0/+N/TzLdpBIoPzjt0Rt4xJbW3mzguV3mduR9cNgiuFcuL/TeORejJhCWiAXe3E/6PxWA==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
"integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
"cpu": [
"ia32"
],
@@ -2942,9 +2942,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.58.0.tgz",
"integrity": "sha512-CSrVpmoRJFN06LL9xhkitkwUcTZtIotYAF5p6XOR2zW0Zz5mzb3IPpcoPhB02frzMHFNo1reQ9xSF5fFm3hUsQ==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
"integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
"cpu": [
"x64"
],
@@ -2956,9 +2956,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.58.0.tgz",
"integrity": "sha512-QFsBgQNTnh5K0t/sBsjJLq24YVqEIVkGpfN2VHsnN90soZyhaiA9UUHufcctVNL4ypJY0wrwad0wslx2KJQ1/w==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
"integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
"cpu": [
"x64"
],
@@ -4597,9 +4597,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001770",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz",
"integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==",
"version": "1.0.30001774",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
"integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
"dev": true,
"funding": [
{
@@ -8328,9 +8328,9 @@
"license": "MIT"
},
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.3.tgz",
"integrity": "sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -10138,9 +10138,9 @@
}
},
"node_modules/rollup": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.58.0.tgz",
"integrity": "sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==",
"version": "4.59.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
"integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10154,31 +10154,31 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.58.0",
"@rollup/rollup-android-arm64": "4.58.0",
"@rollup/rollup-darwin-arm64": "4.58.0",
"@rollup/rollup-darwin-x64": "4.58.0",
"@rollup/rollup-freebsd-arm64": "4.58.0",
"@rollup/rollup-freebsd-x64": "4.58.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.58.0",
"@rollup/rollup-linux-arm-musleabihf": "4.58.0",
"@rollup/rollup-linux-arm64-gnu": "4.58.0",
"@rollup/rollup-linux-arm64-musl": "4.58.0",
"@rollup/rollup-linux-loong64-gnu": "4.58.0",
"@rollup/rollup-linux-loong64-musl": "4.58.0",
"@rollup/rollup-linux-ppc64-gnu": "4.58.0",
"@rollup/rollup-linux-ppc64-musl": "4.58.0",
"@rollup/rollup-linux-riscv64-gnu": "4.58.0",
"@rollup/rollup-linux-riscv64-musl": "4.58.0",
"@rollup/rollup-linux-s390x-gnu": "4.58.0",
"@rollup/rollup-linux-x64-gnu": "4.58.0",
"@rollup/rollup-linux-x64-musl": "4.58.0",
"@rollup/rollup-openbsd-x64": "4.58.0",
"@rollup/rollup-openharmony-arm64": "4.58.0",
"@rollup/rollup-win32-arm64-msvc": "4.58.0",
"@rollup/rollup-win32-ia32-msvc": "4.58.0",
"@rollup/rollup-win32-x64-gnu": "4.58.0",
"@rollup/rollup-win32-x64-msvc": "4.58.0",
"@rollup/rollup-android-arm-eabi": "4.59.0",
"@rollup/rollup-android-arm64": "4.59.0",
"@rollup/rollup-darwin-arm64": "4.59.0",
"@rollup/rollup-darwin-x64": "4.59.0",
"@rollup/rollup-freebsd-arm64": "4.59.0",
"@rollup/rollup-freebsd-x64": "4.59.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
"@rollup/rollup-linux-arm-musleabihf": "4.59.0",
"@rollup/rollup-linux-arm64-gnu": "4.59.0",
"@rollup/rollup-linux-arm64-musl": "4.59.0",
"@rollup/rollup-linux-loong64-gnu": "4.59.0",
"@rollup/rollup-linux-loong64-musl": "4.59.0",
"@rollup/rollup-linux-ppc64-gnu": "4.59.0",
"@rollup/rollup-linux-ppc64-musl": "4.59.0",
"@rollup/rollup-linux-riscv64-gnu": "4.59.0",
"@rollup/rollup-linux-riscv64-musl": "4.59.0",
"@rollup/rollup-linux-s390x-gnu": "4.59.0",
"@rollup/rollup-linux-x64-gnu": "4.59.0",
"@rollup/rollup-linux-x64-musl": "4.59.0",
"@rollup/rollup-openbsd-x64": "4.59.0",
"@rollup/rollup-openharmony-arm64": "4.59.0",
"@rollup/rollup-win32-arm64-msvc": "4.59.0",
"@rollup/rollup-win32-ia32-msvc": "4.59.0",
"@rollup/rollup-win32-x64-gnu": "4.59.0",
"@rollup/rollup-win32-x64-msvc": "4.59.0",
"fsevents": "~2.3.2"
}
},

View File

@@ -60,13 +60,13 @@ return [
// unknown user login attempt
'unknown_user_subject' => 'An unknown user tried to log in',
'unknown_user_body' => 'An unknown user (:ip) tried to log in to Firefly III. The email address they used was ":address".',
'unknown_user_message' => 'The email address they (:ip) used was ":address".',
'unknown_user_body' => 'An unknown user (`:ip`) tried to log in to Firefly III. The email address they used was `:address`.',
'unknown_user_message' => 'The email address they (`:ip`) used was `:address`.',
// known user login attempt
'failed_login_subject' => 'Firefly III detected a failed login attempt',
'failed_login_body' => 'Firefly III detected that somebody (you?) failed to login with your account ":email". Please verify that this was you.',
'failed_login_message' => 'A failed login attempt (:ip) on your Firefly III account ":email" was detected.',
'failed_login_body' => 'Firefly III detected that somebody (you?) failed to login with your account `:email`. Please verify that this was you.',
'failed_login_message' => 'A failed login attempt (`:ip`) on your Firefly III account `:email` was detected.',
'failed_login_warning' => 'If you recognize this IP address or the login attempt, you can ignore this message. If you didn\'t try to login, of if you have no idea what this is about, verify your password security, change it, and log out all other sessions. To do this, go to your profile page. Of course you have 2FA enabled already, right? Stay safe!',
// registered
@@ -168,7 +168,7 @@ return [
'used_backup_code_subject' => 'You have used a back-up code to login',
'used_backup_code_slack' => 'You (:email) have used a back-up code to login',
'used_backup_code_intro' => 'You (:email) have used a back-up code to login to Firefly III. You now have one less back-up code to login with. Please remove it from your list.',
'used_backup_code_intro' => 'You (:email) have used a back-up co de to login to Firefly III. You now have one less back-up code to login with. Please remove it from your list.',
'used_backup_code_warning' => 'If you did not do this, please contact your administrator immediately or check out the Firefly III documentation.',
// few left:

View File

@@ -699,6 +699,7 @@ Route::group(
],
static function (): void {
Route::get('transactions', ['uses' => 'TransactionController@search', 'as' => 'transactions']);
Route::get('transactions/count', ['uses' => 'TransactionController@count', 'as' => 'count']);
Route::get('accounts', ['uses' => 'AccountController@search', 'as' => 'accounts']);
}
);