diff --git a/.github/workflows/ci-main-daily.yml b/.github/workflows/ci-main-daily.yml index 5e18232665..cab8db5f56 100644 --- a/.github/workflows/ci-main-daily.yml +++ b/.github/workflows/ci-main-daily.yml @@ -6,6 +6,10 @@ on: schedule: # Every night at 3am - cron: "0 3 * * *" + pull_request: + paths: + # Needs to refer to itself + - .github/workflows/ci-main-daily.yml jobs: test-container: @@ -15,14 +19,14 @@ jobs: matrix: version: - docs - - version-2025-4 - - version-2025-2 + - version-2025-12 + - version-2025-10 steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v5 - run: | current="$(pwd)" dir="/tmp/authentik/${{ matrix.version }}" - mkdir -p $dir - cd $dir - wget https://${{ matrix.version }}.goauthentik.io/compose.yml - ${current}/scripts/test_docker.sh + mkdir -p "${dir}/lifecycle/container" + cd "${dir}" + wget "https://${{ matrix.version }}.goauthentik.io/docker-compose.yml" -O "${dir}/lifecycle/container/compose.yml" + "${current}/scripts/test_docker.sh" diff --git a/authentik/enterprise/license.py b/authentik/enterprise/license.py index a01b5812e3..0e85321075 100644 --- a/authentik/enterprise/license.py +++ b/authentik/enterprise/license.py @@ -15,6 +15,7 @@ from django.core.cache import cache from django.db.models.query import QuerySet from django.utils.timezone import now from jwt import PyJWTError, decode, get_unverified_header +from jwt.algorithms import ECAlgorithm from rest_framework.exceptions import ValidationError from rest_framework.fields import ( ChoiceField, @@ -109,7 +110,15 @@ class LicenseKey: intermediate.verify_directly_issued_by(get_licensing_key()) except InvalidSignature, TypeError, ValueError, Error: raise ValidationError("Unable to verify license") from None + _validate_curve_original = ECAlgorithm._validate_curve try: + # authentik's license used to be generated with `algorithm="ES512"` and signed with + # a key of curve `secp384r1`. Starting with version 2.11.0, pyjwt enforces the spec, see + # https://github.com/jpadilla/pyjwt/commit/5b8622773358e56d3d3c0a9acf404809ff34433a + # New licenses are generated with `algorithm="ES384"` and signed with `secp384r1`. + # The last license will run out by March 2027. + # TODO: remove this in March 2027. + ECAlgorithm._validate_curve = lambda *_: True body = from_dict( LicenseKey, decode( @@ -125,6 +134,8 @@ class LicenseKey: if unverified["aud"] != get_license_aud(): raise ValidationError("Invalid Install ID in license") from None raise ValidationError("Unable to verify license") from None + finally: + ECAlgorithm._validate_curve = _validate_curve_original return body @staticmethod diff --git a/authentik/enterprise/lifecycle/api/iterations.py b/authentik/enterprise/lifecycle/api/iterations.py index b2a0ef0088..e195103e6b 100644 --- a/authentik/enterprise/lifecycle/api/iterations.py +++ b/authentik/enterprise/lifecycle/api/iterations.py @@ -1,11 +1,11 @@ -from datetime import date +from datetime import datetime from django.db.models import BooleanField as ModelBooleanField from django.db.models import Case, Q, Value, When from django_filters.rest_framework import BooleanFilter, FilterSet -from drf_spectacular.utils import extend_schema, extend_schema_field +from drf_spectacular.utils import extend_schema from rest_framework.decorators import action -from rest_framework.fields import DateField, IntegerField, SerializerMethodField +from rest_framework.fields import IntegerField, SerializerMethodField from rest_framework.mixins import CreateModelMixin from rest_framework.request import Request from rest_framework.response import Response @@ -21,6 +21,7 @@ from authentik.enterprise.lifecycle.utils import ( ReviewerUserSerializer, admin_link_for_model, parse_content_type, + start_of_day, ) from authentik.lib.utils.time import timedelta_from_string @@ -67,13 +68,13 @@ class LifecycleIterationSerializer(EnterpriseRequiredMixin, ModelSerializer): def get_object_admin_url(self, iteration: LifecycleIteration) -> str: return admin_link_for_model(iteration.object) - @extend_schema_field(DateField()) - def get_grace_period_end(self, iteration: LifecycleIteration) -> date: - return iteration.opened_on + timedelta_from_string(iteration.rule.grace_period) + def get_grace_period_end(self, iteration: LifecycleIteration) -> datetime: + return start_of_day( + iteration.opened_on + timedelta_from_string(iteration.rule.grace_period) + ) - @extend_schema_field(DateField()) - def get_next_review_date(self, iteration: LifecycleIteration): - return iteration.opened_on + timedelta_from_string(iteration.rule.interval) + def get_next_review_date(self, iteration: LifecycleIteration) -> datetime: + return start_of_day(iteration.opened_on + timedelta_from_string(iteration.rule.interval)) def get_user_can_review(self, iteration: LifecycleIteration) -> bool: return iteration.user_can_review(self.context["request"].user) diff --git a/authentik/enterprise/lifecycle/migrations/0002_alter_lifecycleiteration_opened_on.py b/authentik/enterprise/lifecycle/migrations/0002_alter_lifecycleiteration_opened_on.py new file mode 100644 index 0000000000..8a301fc6bb --- /dev/null +++ b/authentik/enterprise/lifecycle/migrations/0002_alter_lifecycleiteration_opened_on.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.11 on 2026-02-13 09:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("authentik_lifecycle", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="lifecycleiteration", + name="opened_on", + field=models.DateTimeField(auto_now_add=True), + ), + ] diff --git a/authentik/enterprise/lifecycle/models.py b/authentik/enterprise/lifecycle/models.py index 1dea10493f..6f0daf0781 100644 --- a/authentik/enterprise/lifecycle/models.py +++ b/authentik/enterprise/lifecycle/models.py @@ -1,3 +1,4 @@ +from datetime import timedelta from uuid import uuid4 from django.contrib.contenttypes.fields import GenericForeignKey @@ -13,7 +14,7 @@ from rest_framework.serializers import BaseSerializer from authentik.blueprints.models import ManagedModel from authentik.core.models import Group, User -from authentik.enterprise.lifecycle.utils import link_for_model +from authentik.enterprise.lifecycle.utils import link_for_model, start_of_day from authentik.events.models import Event, EventAction, NotificationSeverity, NotificationTransport from authentik.lib.models import SerializerModel from authentik.lib.utils.time import timedelta_from_string, timedelta_string_validator @@ -98,7 +99,9 @@ class LifecycleRule(SerializerModel): def _get_newly_overdue_iterations(self) -> QuerySet[LifecycleIteration]: return self.lifecycleiteration_set.filter( - opened_on__lte=timezone.now() - timedelta_from_string(self.grace_period), + opened_on__lt=start_of_day( + timezone.now() + timedelta(days=1) - timedelta_from_string(self.grace_period) + ), state=ReviewState.PENDING, ) @@ -106,7 +109,9 @@ class LifecycleRule(SerializerModel): recent_iteration_ids = LifecycleIteration.objects.filter( content_type=self.content_type, object_id__isnull=False, - opened_on__gte=timezone.now() - timedelta_from_string(self.interval), + opened_on__gte=start_of_day( + timezone.now() + timedelta(days=1) - timedelta_from_string(self.interval) + ), ).values_list(Cast("object_id", output_field=self._get_pk_field()), flat=True) return self.get_objects().exclude(pk__in=recent_iteration_ids) @@ -186,7 +191,7 @@ class LifecycleIteration(SerializerModel, ManagedModel): rule = models.ForeignKey(LifecycleRule, null=True, on_delete=models.SET_NULL) state = models.CharField(max_length=10, choices=ReviewState, default=ReviewState.PENDING) - opened_on = models.DateField(auto_now_add=True) + opened_on = models.DateTimeField(auto_now_add=True) class Meta: indexes = [models.Index(fields=["content_type", "opened_on"])] diff --git a/authentik/enterprise/lifecycle/tests/test_models.py b/authentik/enterprise/lifecycle/tests/test_models.py index 932aa339f6..0936c93362 100644 --- a/authentik/enterprise/lifecycle/tests/test_models.py +++ b/authentik/enterprise/lifecycle/tests/test_models.py @@ -1,3 +1,4 @@ +import datetime as dt from datetime import timedelta from unittest.mock import patch @@ -319,7 +320,7 @@ class TestLifecycleModels(TestCase): content_type=content_type, object_id=str(app_one.pk), rule=rule_overdue ) LifecycleIteration.objects.filter(pk=iteration.pk).update( - opened_on=(timezone.now().date() - timedelta(days=20)) + opened_on=(timezone.now() - timedelta(days=20)) ) # Apply again to trigger overdue logic @@ -383,7 +384,7 @@ class TestLifecycleModels(TestCase): content_type=content_type, object_id=str(app_overdue.pk), rule=rule_overdue ) LifecycleIteration.objects.filter(pk=overdue_iteration.pk).update( - opened_on=(timezone.now().date() - timedelta(days=20)) + opened_on=(timezone.now() - timedelta(days=20)) ) # Apply overdue rule to mark iteration as overdue @@ -667,3 +668,178 @@ class TestLifecycleModels(TestCase): reviewers = list(rule.get_reviewers()) self.assertIn(explicit_reviewer, reviewers) self.assertIn(group_member, reviewers) + + +class TestLifecycleDateBoundaries(TestCase): + """Verify that start_of_day normalization ensures correct overdue/due + detection regardless of exact task execution time within a day. + + The daily task may run at any point during the day. The start_of_day + normalization in _get_newly_overdue_iterations and _get_newly_due_objects + ensures that the boundary is always at midnight, so millisecond variations + in task execution time do not affect results.""" + + def _create_rule_and_iteration(self, grace_period="days=1", interval="days=365"): + app = Application.objects.create(name=generate_id(), slug=generate_id()) + content_type = ContentType.objects.get_for_model(Application) + rule = LifecycleRule.objects.create( + name=generate_id(), + content_type=content_type, + object_id=str(app.pk), + interval=interval, + grace_period=grace_period, + ) + iteration = LifecycleIteration.objects.get( + content_type=content_type, object_id=str(app.pk), rule=rule + ) + return app, rule, iteration + + def test_overdue_iteration_opened_yesterday(self): + """grace_period=1 day: iteration opened yesterday at any time is overdue today.""" + _, rule, iteration = self._create_rule_and_iteration(grace_period="days=1") + fixed_now = dt.datetime(2025, 6, 15, 14, 30, 0, tzinfo=dt.UTC) + for opened_on in [ + dt.datetime(2025, 6, 14, 0, 0, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 14, 12, 0, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 14, 23, 59, 59, 999999, tzinfo=dt.UTC), + ]: + with self.subTest(opened_on=opened_on): + LifecycleIteration.objects.filter(pk=iteration.pk).update( + opened_on=opened_on, state=ReviewState.PENDING + ) + with patch("django.utils.timezone.now", return_value=fixed_now): + self.assertIn(iteration, list(rule._get_newly_overdue_iterations())) + + def test_not_overdue_iteration_opened_today(self): + """grace_period=1 day: iteration opened today at any time is NOT overdue.""" + _, rule, iteration = self._create_rule_and_iteration(grace_period="days=1") + fixed_now = dt.datetime(2025, 6, 15, 14, 30, 0, tzinfo=dt.UTC) + for opened_on in [ + dt.datetime(2025, 6, 15, 0, 0, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 15, 14, 30, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 15, 23, 59, 59, 999999, tzinfo=dt.UTC), + ]: + with self.subTest(opened_on=opened_on): + LifecycleIteration.objects.filter(pk=iteration.pk).update( + opened_on=opened_on, state=ReviewState.PENDING + ) + with patch("django.utils.timezone.now", return_value=fixed_now): + self.assertNotIn(iteration, list(rule._get_newly_overdue_iterations())) + + def test_overdue_independent_of_task_execution_time(self): + """Overdue detection gives the same result whether the task runs at 00:00:01 or 23:59:59.""" + _, rule, iteration = self._create_rule_and_iteration(grace_period="days=1") + opened_on = dt.datetime(2025, 6, 14, 18, 0, 0, tzinfo=dt.UTC) + LifecycleIteration.objects.filter(pk=iteration.pk).update( + opened_on=opened_on, state=ReviewState.PENDING + ) + for task_time in [ + dt.datetime(2025, 6, 15, 0, 0, 1, tzinfo=dt.UTC), + dt.datetime(2025, 6, 15, 12, 0, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 15, 23, 59, 59, tzinfo=dt.UTC), + ]: + with self.subTest(task_time=task_time): + with patch("django.utils.timezone.now", return_value=task_time): + self.assertIn(iteration, list(rule._get_newly_overdue_iterations())) + + def test_overdue_boundary_multi_day_grace_period(self): + """grace_period=30 days: overdue after 30 full days, not after 29.""" + _, rule, iteration = self._create_rule_and_iteration(grace_period="days=30") + fixed_now = dt.datetime(2025, 6, 15, 14, 30, 0, tzinfo=dt.UTC) + + # Opened 30 days ago (May 16), should go overdue + LifecycleIteration.objects.filter(pk=iteration.pk).update( + opened_on=dt.datetime(2025, 5, 16, 12, 0, 0, tzinfo=dt.UTC), + state=ReviewState.PENDING, + ) + with patch("django.utils.timezone.now", return_value=fixed_now): + self.assertIn(iteration, list(rule._get_newly_overdue_iterations())) + + # Opened 29 days ago (May 17), should NOT go overdue + LifecycleIteration.objects.filter(pk=iteration.pk).update( + opened_on=dt.datetime(2025, 5, 17, 12, 0, 0, tzinfo=dt.UTC), + state=ReviewState.PENDING, + ) + with patch("django.utils.timezone.now", return_value=fixed_now): + self.assertNotIn(iteration, list(rule._get_newly_overdue_iterations())) + + def test_due_object_iteration_opened_yesterday(self): + """interval=1 day: object with iteration opened yesterday is due for a new review.""" + app, rule, iteration = self._create_rule_and_iteration(interval="days=1") + fixed_now = dt.datetime(2025, 6, 15, 14, 30, 0, tzinfo=dt.UTC) + for opened_on in [ + dt.datetime(2025, 6, 14, 0, 0, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 14, 12, 0, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 14, 23, 59, 59, 999999, tzinfo=dt.UTC), + ]: + with self.subTest(opened_on=opened_on): + LifecycleIteration.objects.filter(pk=iteration.pk).update(opened_on=opened_on) + with patch("django.utils.timezone.now", return_value=fixed_now): + self.assertIn(app, list(rule._get_newly_due_objects())) + + def test_not_due_object_iteration_opened_today(self): + """interval=1 day: object with iteration opened today is NOT due.""" + app, rule, iteration = self._create_rule_and_iteration(interval="days=1") + fixed_now = dt.datetime(2025, 6, 15, 14, 30, 0, tzinfo=dt.UTC) + for opened_on in [ + dt.datetime(2025, 6, 15, 0, 0, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 15, 14, 30, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 15, 23, 59, 59, 999999, tzinfo=dt.UTC), + ]: + with self.subTest(opened_on=opened_on): + LifecycleIteration.objects.filter(pk=iteration.pk).update(opened_on=opened_on) + with patch("django.utils.timezone.now", return_value=fixed_now): + self.assertNotIn(app, list(rule._get_newly_due_objects())) + + def test_due_independent_of_task_execution_time(self): + """Due detection gives the same result whether the task runs at 00:00:01 or 23:59:59.""" + app, rule, iteration = self._create_rule_and_iteration(interval="days=1") + opened_on = dt.datetime(2025, 6, 14, 18, 0, 0, tzinfo=dt.UTC) + LifecycleIteration.objects.filter(pk=iteration.pk).update(opened_on=opened_on) + for task_time in [ + dt.datetime(2025, 6, 15, 0, 0, 1, tzinfo=dt.UTC), + dt.datetime(2025, 6, 15, 12, 0, 0, tzinfo=dt.UTC), + dt.datetime(2025, 6, 15, 23, 59, 59, tzinfo=dt.UTC), + ]: + with self.subTest(task_time=task_time): + with patch("django.utils.timezone.now", return_value=task_time): + self.assertIn(app, list(rule._get_newly_due_objects())) + + def test_due_boundary_multi_day_interval(self): + """interval=30 days: due after 30 full days, not after 29.""" + app, rule, iteration = self._create_rule_and_iteration(interval="days=30") + fixed_now = dt.datetime(2025, 6, 15, 14, 30, 0, tzinfo=dt.UTC) + + # Previous review opened 30 days ago (May 16), review is due for the object + LifecycleIteration.objects.filter(pk=iteration.pk).update( + opened_on=dt.datetime(2025, 5, 16, 12, 0, 0, tzinfo=dt.UTC) + ) + with patch("django.utils.timezone.now", return_value=fixed_now): + self.assertIn(app, list(rule._get_newly_due_objects())) + + # Previous review opened 29 days ago (May 17), new review is NOT due + LifecycleIteration.objects.filter(pk=iteration.pk).update( + opened_on=dt.datetime(2025, 5, 17, 12, 0, 0, tzinfo=dt.UTC) + ) + with patch("django.utils.timezone.now", return_value=fixed_now): + self.assertNotIn(app, list(rule._get_newly_due_objects())) + + def test_apply_overdue_at_boundary(self): + """apply() marks iteration overdue when grace period just expired, + regardless of what time the daily task runs.""" + _, rule, iteration = self._create_rule_and_iteration( + grace_period="days=1", interval="days=365" + ) + opened_on = dt.datetime(2025, 6, 14, 20, 0, 0, tzinfo=dt.UTC) + for task_time in [ + dt.datetime(2025, 6, 15, 0, 0, 1, tzinfo=dt.UTC), + dt.datetime(2025, 6, 15, 23, 59, 59, tzinfo=dt.UTC), + ]: + with self.subTest(task_time=task_time): + LifecycleIteration.objects.filter(pk=iteration.pk).update( + opened_on=opened_on, state=ReviewState.PENDING + ) + with patch("django.utils.timezone.now", return_value=task_time): + rule.apply() + iteration.refresh_from_db() + self.assertEqual(iteration.state, ReviewState.OVERDUE) diff --git a/authentik/enterprise/lifecycle/utils.py b/authentik/enterprise/lifecycle/utils.py index 343949aa2c..7d2eb61b55 100644 --- a/authentik/enterprise/lifecycle/utils.py +++ b/authentik/enterprise/lifecycle/utils.py @@ -1,3 +1,4 @@ +from datetime import datetime from urllib import parse from django.contrib.contenttypes.models import ContentType @@ -39,6 +40,10 @@ def link_for_model(model: Model) -> str: return f"{reverse("authentik_core:if-admin")}#{admin_link_for_model(model)}" +def start_of_day(dt: datetime) -> datetime: + return dt.replace(hour=0, minute=0, second=0, microsecond=0) + + class ContentTypeField(ChoiceField): def __init__(self, **kwargs): super().__init__(choices=model_choices(), **kwargs) diff --git a/authentik/enterprise/providers/microsoft_entra/clients/users.py b/authentik/enterprise/providers/microsoft_entra/clients/users.py index cc323df1b2..3897ed3c47 100644 --- a/authentik/enterprise/providers/microsoft_entra/clients/users.py +++ b/authentik/enterprise/providers/microsoft_entra/clients/users.py @@ -78,7 +78,8 @@ class MicrosoftEntraUserClient(MicrosoftEntraSyncClient[User, MicrosoftEntraProv def create(self, user: User): """Create user from scratch and create a connection object""" microsoft_user = self.to_schema(user, None) - self.check_email_valid(microsoft_user.user_principal_name) + if microsoft_user.user_principal_name: + self.check_email_valid(microsoft_user.user_principal_name) with transaction.atomic(): try: response = self._request(self.client.users.post(microsoft_user)) @@ -118,7 +119,8 @@ class MicrosoftEntraUserClient(MicrosoftEntraSyncClient[User, MicrosoftEntraProv def update(self, user: User, connection: MicrosoftEntraProviderUser): """Update existing user""" microsoft_user = self.to_schema(user, connection) - self.check_email_valid(microsoft_user.user_principal_name) + if microsoft_user.user_principal_name: + self.check_email_valid(microsoft_user.user_principal_name) response = self._request( self.client.users.by_user_id(connection.microsoft_id).patch(microsoft_user) ) diff --git a/authentik/policies/engine.py b/authentik/policies/engine.py index 0a57b92e74..9fe3a9f2cd 100644 --- a/authentik/policies/engine.py +++ b/authentik/policies/engine.py @@ -185,6 +185,16 @@ class PolicyEngine: # Only call .recv() if no result is saved, otherwise we just deadlock here if not proc_info.result: proc_info.result = proc_info.connection.recv() + if proc_info.result and proc_info.result._exec_time: + HIST_POLICIES_EXECUTION_TIME.labels( + binding_order=proc_info.binding.order, + binding_target_type=proc_info.binding.target_type, + binding_target_name=proc_info.binding.target_name, + object_type=( + class_to_path(self.request.obj.__class__) if self.request.obj else "" + ), + mode="execute_process", + ).observe(proc_info.result._exec_time) return self @property diff --git a/authentik/policies/process.py b/authentik/policies/process.py index ece691b1b4..e064f7fede 100644 --- a/authentik/policies/process.py +++ b/authentik/policies/process.py @@ -2,6 +2,7 @@ from multiprocessing import get_context from multiprocessing.connection import Connection +from time import perf_counter from django.core.cache import cache from sentry_sdk import start_span @@ -11,8 +12,6 @@ from structlog.stdlib import get_logger from authentik.events.models import Event, EventAction from authentik.lib.config import CONFIG from authentik.lib.utils.errors import exception_to_dict -from authentik.lib.utils.reflection import class_to_path -from authentik.policies.apps import HIST_POLICIES_EXECUTION_TIME from authentik.policies.exceptions import PolicyException from authentik.policies.models import PolicyBinding from authentik.policies.types import CACHE_PREFIX, PolicyRequest, PolicyResult @@ -123,18 +122,9 @@ class PolicyProcess(PROCESS_CLASS): def profiling_wrapper(self): """Run with profiling enabled""" - with ( - start_span( - op="authentik.policy.process.execute", - ) as span, - HIST_POLICIES_EXECUTION_TIME.labels( - binding_order=self.binding.order, - binding_target_type=self.binding.target_type, - binding_target_name=self.binding.target_name, - object_type=class_to_path(self.request.obj.__class__) if self.request.obj else "", - mode="execute_process", - ).time(), - ): + with start_span( + op="authentik.policy.process.execute", + ) as span: span: Span span.set_data("policy", self.binding.policy) span.set_data("request", self.request) @@ -142,8 +132,14 @@ class PolicyProcess(PROCESS_CLASS): def run(self): # pragma: no cover """Task wrapper to run policy checking""" + result = None try: - self.connection.send(self.profiling_wrapper()) + start = perf_counter() + result = self.profiling_wrapper() + end = perf_counter() + result._exec_time = max((end - start), 0) except Exception as exc: # noqa LOGGER.warning("Policy failed to run", exc=exc) - self.connection.send(PolicyResult(False, str(exc))) + result = PolicyResult(False, str(exc)) + finally: + self.connection.send(result) diff --git a/authentik/policies/types.py b/authentik/policies/types.py index dd95f6e7d9..31e561e771 100644 --- a/authentik/policies/types.py +++ b/authentik/policies/types.py @@ -77,6 +77,8 @@ class PolicyResult: log_messages: list[LogEvent] | None + _exec_time: int | None + def __init__(self, passing: bool, *messages: str): self.passing = passing self.messages = messages @@ -84,6 +86,7 @@ class PolicyResult: self.source_binding = None self.source_results = [] self.log_messages = [] + self._exec_time = None def __repr__(self): return self.__str__() diff --git a/authentik/providers/oauth2/tests/test_device_backchannel.py b/authentik/providers/oauth2/tests/test_device_backchannel.py index 6a30ce0310..51f2d15ac5 100644 --- a/authentik/providers/oauth2/tests/test_device_backchannel.py +++ b/authentik/providers/oauth2/tests/test_device_backchannel.py @@ -1,5 +1,6 @@ """Device backchannel tests""" +from base64 import b64encode from json import loads from django.urls import reverse @@ -26,7 +27,7 @@ class TesOAuth2DeviceBackchannel(OAuthTestCase): provider=self.provider, ) - def test_backchannel_invalid(self): + def test_backchannel_invalid_client_id_via_post_body(self): """Test backchannel""" res = self.client.post( reverse("authentik_providers_oauth2:device"), @@ -50,7 +51,7 @@ class TesOAuth2DeviceBackchannel(OAuthTestCase): ) self.assertEqual(res.status_code, 400) - def test_backchannel(self): + def test_backchannel_client_id_via_post_body(self): """Test backchannel""" res = self.client.post( reverse("authentik_providers_oauth2:device"), @@ -61,3 +62,37 @@ class TesOAuth2DeviceBackchannel(OAuthTestCase): self.assertEqual(res.status_code, 200) body = loads(res.content.decode()) self.assertEqual(body["expires_in"], 60) + + def test_backchannel_invalid_client_id_via_auth_header(self): + """Test backchannel""" + creds = b64encode(b"foo:").decode() + res = self.client.post( + reverse("authentik_providers_oauth2:device"), + HTTP_AUTHORIZATION=f"Basic {creds}", + ) + self.assertEqual(res.status_code, 400) + res = self.client.post( + reverse("authentik_providers_oauth2:device"), + ) + self.assertEqual(res.status_code, 400) + # test without application + self.application.provider = None + self.application.save() + res = self.client.post( + reverse("authentik_providers_oauth2:device"), + data={ + "client_id": "test", + }, + ) + self.assertEqual(res.status_code, 400) + + def test_backchannel_client_id_via_auth_header(self): + """Test backchannel""" + creds = b64encode(f"{self.provider.client_id}:".encode()).decode() + res = self.client.post( + reverse("authentik_providers_oauth2:device"), + HTTP_AUTHORIZATION=f"Basic {creds}", + ) + self.assertEqual(res.status_code, 200) + body = loads(res.content.decode()) + self.assertEqual(body["expires_in"], 60) diff --git a/authentik/providers/oauth2/views/device_backchannel.py b/authentik/providers/oauth2/views/device_backchannel.py index fb1b0e7fa4..d8e73f9894 100644 --- a/authentik/providers/oauth2/views/device_backchannel.py +++ b/authentik/providers/oauth2/views/device_backchannel.py @@ -16,7 +16,7 @@ from authentik.lib.config import CONFIG from authentik.lib.utils.time import timedelta_from_string from authentik.providers.oauth2.errors import DeviceCodeError from authentik.providers.oauth2.models import DeviceToken, OAuth2Provider -from authentik.providers.oauth2.utils import TokenResponse +from authentik.providers.oauth2.utils import TokenResponse, extract_client_auth from authentik.providers.oauth2.views.device_init import QS_KEY_CODE LOGGER = get_logger() @@ -32,7 +32,7 @@ class DeviceView(View): def parse_request(self): """Parse incoming request""" - client_id = self.request.POST.get("client_id", None) + client_id, _ = extract_client_auth(self.request) if not client_id: raise DeviceCodeError("invalid_client") provider = OAuth2Provider.objects.filter(client_id=client_id).first() diff --git a/authentik/sources/saml/exceptions.py b/authentik/sources/saml/exceptions.py index 69863b4400..71bd78ed85 100644 --- a/authentik/sources/saml/exceptions.py +++ b/authentik/sources/saml/exceptions.py @@ -14,24 +14,6 @@ class SAMLException(SentryIgnoredException): return self.default_message -class MissingSAMLResponse(SAMLException): - """Exception raised when request does not contain SAML Response.""" - - default_message = "Request does not contain a SAML response." - - -class UnsupportedNameIDFormat(SAMLException): - """Exception raised when SAML Response contains NameID Format not supported.""" - - default_message = "The NameID Format in the SAML Response is not supported." - - -class MismatchedRequestID(SAMLException): - """Exception raised when the returned request ID doesn't match the saved ID.""" - - default_message = "The SAML Response ID does not match the original request ID." - - class InvalidEncryption(SAMLException): """Encryption of XML Object is either missing or invalid.""" @@ -42,3 +24,21 @@ class InvalidSignature(SAMLException): """Signature of XML Object is either missing or invalid.""" default_message = "The signature of the SAML object is either missing or invalid." + + +class MismatchedRequestID(SAMLException): + """Exception raised when the returned request ID doesn't match the saved ID.""" + + default_message = "The SAML Response ID does not match the original request ID." + + +class MissingSAMLResponse(SAMLException): + """Exception raised when request does not contain SAML Response.""" + + default_message = "Request does not contain a SAML response." + + +class UnsupportedNameIDFormat(SAMLException): + """Exception raised when SAML Response contains NameID Format not supported.""" + + default_message = "The NameID Format in the SAML Response is not supported." diff --git a/authentik/sources/saml/views.py b/authentik/sources/saml/views.py index 5a94f2d3ce..47f1bc3adf 100644 --- a/authentik/sources/saml/views.py +++ b/authentik/sources/saml/views.py @@ -4,6 +4,7 @@ from urllib.parse import parse_qsl, urlparse, urlunparse from django.contrib.auth import logout from django.contrib.auth.mixins import LoginRequiredMixin +from django.core.exceptions import SuspiciousOperation from django.http import Http404, HttpRequest, HttpResponse from django.http.response import HttpResponseBadRequest from django.shortcuts import get_object_or_404, redirect @@ -37,7 +38,9 @@ from authentik.flows.views.executor import NEXT_ARG_NAME, SESSION_KEY_GET, SESSI from authentik.lib.views import bad_request_message from authentik.providers.saml.utils.encoding import nice64 from authentik.sources.saml.exceptions import ( + InvalidEncryption, InvalidSignature, + MismatchedRequestID, MissingSAMLResponse, UnsupportedNameIDFormat, ) @@ -156,7 +159,15 @@ class ACSView(View): processor = ResponseProcessor(source, request) try: processor.parse() - except (InvalidSignature, MissingSAMLResponse, VerificationError, ValueError) as exc: + except ( + InvalidEncryption, + InvalidSignature, + MismatchedRequestID, + MissingSAMLResponse, + SuspiciousOperation, + VerificationError, + ValueError, + ) as exc: return bad_request_message(request, str(exc)) try: diff --git a/authentik/stages/user_login/middleware.py b/authentik/stages/user_login/middleware.py index d4f8001470..a7a773f710 100644 --- a/authentik/stages/user_login/middleware.py +++ b/authentik/stages/user_login/middleware.py @@ -6,6 +6,7 @@ from django.contrib.auth.views import redirect_to_login from django.http.request import HttpRequest from structlog.stdlib import get_logger +from authentik.core.middleware import get_user from authentik.core.models import Session from authentik.events.context_processors.asn import ASN_CONTEXT_PROCESSOR from authentik.events.context_processors.geoip import GEOIP_CONTEXT_PROCESSOR @@ -54,11 +55,13 @@ class SessionBindingBroken(SentryIgnoredException): def logout_extra(request: HttpRequest, exc: SessionBindingBroken): """Similar to django's logout method, but able to carry more info to the signal""" - # Dispatch the signal before the user is logged out so the receivers have a - # chance to find out *who* logged out. - user = getattr(request, "user", None) + # Since this middleware runs before the AuthenticationMiddleware, we can't use `request.user` + # as it hasn't been populated yet. + user = get_user(request) if not getattr(user, "is_authenticated", True): user = None + # Dispatch the signal before the user is logged out so the receivers have a + # chance to find out *who* logged out. user_logged_out.send( sender=user.__class__, request=request, user=user, event_extra=exc.to_event() ) diff --git a/authentik/stages/user_login/tests.py b/authentik/stages/user_login/tests.py index 402bcef571..3e3a269d5b 100644 --- a/authentik/stages/user_login/tests.py +++ b/authentik/stages/user_login/tests.py @@ -10,6 +10,8 @@ from django.utils.timezone import now from authentik.blueprints.tests import apply_blueprint from authentik.core.models import AuthenticatedSession, Session from authentik.core.tests.utils import create_test_flow, create_test_user +from authentik.events.models import Event, EventAction +from authentik.events.utils import get_user from authentik.flows.markers import StageMarker from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan @@ -270,6 +272,7 @@ class TestUserLoginStage(FlowTestCase): def test_session_binding_broken(self): """Test session binding""" + Event.objects.all().delete() self.client.force_login(self.user) session = self.client.session session[Session.Keys.LAST_IP] = "192.0.2.1" @@ -285,3 +288,5 @@ class TestUserLoginStage(FlowTestCase): ) + f"?{NEXT_ARG_NAME}={reverse("authentik_api:user-me")}", ) + event = Event.objects.filter(action=EventAction.LOGOUT).first() + self.assertEqual(event.user, get_user(self.user)) diff --git a/internal/outpost/proxyv2/application/oauth.go b/internal/outpost/proxyv2/application/oauth.go index 172b98b629..7b8df2f505 100644 --- a/internal/outpost/proxyv2/application/oauth.go +++ b/internal/outpost/proxyv2/application/oauth.go @@ -76,7 +76,7 @@ func (a *Application) redirectToStart(rw http.ResponseWriter, r *http.Request) { } } - redirectUrl := urlJoin(a.proxyConfig.ExternalHost, r.URL.Path) + redirectUrl := urlJoin(a.proxyConfig.ExternalHost, r.URL.EscapedPath()) if a.Mode() == api.PROXYMODE_FORWARD_DOMAIN { dom := strings.TrimPrefix(*a.proxyConfig.CookieDomain, ".") diff --git a/internal/outpost/proxyv2/application/utils_test.go b/internal/outpost/proxyv2/application/utils_test.go index e8f40d2622..f35827ff9f 100644 --- a/internal/outpost/proxyv2/application/utils_test.go +++ b/internal/outpost/proxyv2/application/utils_test.go @@ -27,6 +27,24 @@ func TestRedirectToStart_Proxy(t *testing.T) { assert.Equal(t, "https://test.goauthentik.io/foo/bar/baz", s.Values[constants.SessionRedirect]) } +func TestRedirectToStart_Proxy_EncodedSlash(t *testing.T) { + a := newTestApplication() + a.proxyConfig.Mode = api.PROXYMODE_PROXY.Ptr() + a.proxyConfig.ExternalHost = "https://test.goauthentik.io" + // %2F is a URL-encoded forward slash, used by apps like RabbitMQ in queue paths + req, _ := http.NewRequest("GET", "/api/queues/%2F/MYChannelCreated", nil) + + rr := httptest.NewRecorder() + a.redirectToStart(rr, req) + + assert.Equal(t, http.StatusFound, rr.Code) + loc, _ := rr.Result().Location() + assert.Contains(t, loc.String(), "%252F", "encoded slash %2F must be preserved in redirect URL") + + s, _ := a.sessions.Get(req, a.SessionName()) + assert.Contains(t, s.Values[constants.SessionRedirect].(string), "%2F", "encoded slash %2F must be preserved in session redirect") +} + func TestRedirectToStart_Forward(t *testing.T) { a := newTestApplication() a.proxyConfig.Mode = api.PROXYMODE_FORWARD_SINGLE.Ptr() diff --git a/lifecycle/container/Dockerfile b/lifecycle/container/Dockerfile index 7822245fe4..11e8ab2f79 100644 --- a/lifecycle/container/Dockerfile +++ b/lifecycle/container/Dockerfile @@ -80,7 +80,7 @@ RUN --mount=type=secret,id=GEOIPUPDATE_ACCOUNT_ID \ # Stage 4: Download uv FROM ghcr.io/astral-sh/uv:0.10.4@sha256:4cac394b6b72846f8a85a7a0e577c6d61d4e17fe2ccee65d9451a8b3c9efb4ac AS uv # Stage 5: Base python image -FROM ghcr.io/goauthentik/fips-python:3.14.3-slim-trixie-fips@sha256:c2726911d327b377501adb6c1ca9ba6b9bde8feb09bc8787cd358413784fe39f AS python-base +FROM ghcr.io/goauthentik/fips-python:3.14.3-slim-trixie-fips@sha256:bccefeecbdd7b5895053c97b7cc24327380934e959a34b1331a1489201ed3df3 AS python-base ENV VENV_PATH="/ak-root/.venv" \ PATH="/lifecycle:/ak-root/.venv/bin:$PATH" \ diff --git a/lifecycle/container/ldap.Dockerfile b/lifecycle/container/ldap.Dockerfile index 13da62a63b..3950574c6a 100644 --- a/lifecycle/container/ldap.Dockerfile +++ b/lifecycle/container/ldap.Dockerfile @@ -31,7 +31,7 @@ RUN --mount=type=cache,sharing=locked,target=/go/pkg/mod \ go build -o /go/ldap ./cmd/ldap # Stage 2: Run -FROM ghcr.io/goauthentik/fips-debian:trixie-slim-fips@sha256:b0917afc8d7d3dea6cf8e741fee59bbd40776b9a98e6fdac16143adac2c45394 +FROM ghcr.io/goauthentik/fips-debian:trixie-slim-fips@sha256:d6def0a23db74f699199c7d72fe57e2313982a51eeedc4883039b22538f6ed02 ARG VERSION ARG GIT_BUILD_HASH diff --git a/lifecycle/container/proxy.Dockerfile b/lifecycle/container/proxy.Dockerfile index 7d70f833f9..d5da7702c8 100644 --- a/lifecycle/container/proxy.Dockerfile +++ b/lifecycle/container/proxy.Dockerfile @@ -47,7 +47,7 @@ RUN --mount=type=cache,sharing=locked,target=/go/pkg/mod \ go build -o /go/proxy ./cmd/proxy # Stage 3: Run -FROM ghcr.io/goauthentik/fips-debian:trixie-slim-fips@sha256:b0917afc8d7d3dea6cf8e741fee59bbd40776b9a98e6fdac16143adac2c45394 +FROM ghcr.io/goauthentik/fips-debian:trixie-slim-fips@sha256:d6def0a23db74f699199c7d72fe57e2313982a51eeedc4883039b22538f6ed02 ARG VERSION ARG GIT_BUILD_HASH diff --git a/lifecycle/container/radius.Dockerfile b/lifecycle/container/radius.Dockerfile index cd4a9da7f8..204178f5ac 100644 --- a/lifecycle/container/radius.Dockerfile +++ b/lifecycle/container/radius.Dockerfile @@ -31,7 +31,7 @@ RUN --mount=type=cache,sharing=locked,target=/go/pkg/mod \ go build -o /go/radius ./cmd/radius # Stage 2: Run -FROM ghcr.io/goauthentik/fips-debian:trixie-slim-fips@sha256:b0917afc8d7d3dea6cf8e741fee59bbd40776b9a98e6fdac16143adac2c45394 +FROM ghcr.io/goauthentik/fips-debian:trixie-slim-fips@sha256:d6def0a23db74f699199c7d72fe57e2313982a51eeedc4883039b22538f6ed02 ARG VERSION ARG GIT_BUILD_HASH diff --git a/package-lock.json b/package-lock.json index f71280290c..68929d9874 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,22 +16,22 @@ "@typescript-eslint/parser": "^8.48.1", "eslint": "^9.39.1", "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.48.1" }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -40,29 +40,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -88,13 +88,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -104,12 +104,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -138,27 +138,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -195,25 +195,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -223,31 +223,31 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -255,9 +255,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -314,9 +314,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" @@ -455,9 +455,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -592,27 +592,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -693,18 +672,6 @@ "node": ">= 8" } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -741,29 +708,29 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.0.tgz", - "integrity": "sha512-rl78HwuZlaDIUSeUKkmogkhebA+8K1Hy7tddZuJ3D0xV8pZSfsYGTsliGUol1JPzu9EKnTxPC4L1fiWouStRew==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz", + "integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.18.0" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.49.0.tgz", - "integrity": "sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz", + "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==", "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.49.0", - "@typescript-eslint/type-utils": "8.49.0", - "@typescript-eslint/utils": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0", - "ignore": "^7.0.0", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/type-utils": "8.56.0", + "@typescript-eslint/utils": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -773,22 +740,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.49.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/parser": "^8.56.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.49.0.tgz", - "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz", + "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.49.0", - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/typescript-estree": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -798,19 +765,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.49.0.tgz", - "integrity": "sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz", + "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==", "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.49.0", - "@typescript-eslint/types": "^8.49.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.56.0", + "@typescript-eslint/types": "^8.56.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -824,13 +791,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.49.0.tgz", - "integrity": "sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz", + "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0" + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -841,9 +808,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.49.0.tgz", - "integrity": "sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz", + "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -857,16 +824,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.49.0.tgz", - "integrity": "sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz", + "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/typescript-estree": "8.49.0", - "@typescript-eslint/utils": "8.49.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -876,14 +843,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.49.0.tgz", - "integrity": "sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", + "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -894,20 +861,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.49.0.tgz", - "integrity": "sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz", + "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==", "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.49.0", - "@typescript-eslint/tsconfig-utils": "8.49.0", - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0", - "debug": "^4.3.4", - "minimatch": "^9.0.4", - "semver": "^7.6.0", + "@typescript-eslint/project-service": "8.56.0", + "@typescript-eslint/tsconfig-utils": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -921,15 +888,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.49.0.tgz", - "integrity": "sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz", + "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==", "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.49.0", - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/typescript-estree": "8.49.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -939,18 +906,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.49.0.tgz", - "integrity": "sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz", + "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.49.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -961,12 +928,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", + "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1048,9 +1015,9 @@ "license": "MIT" }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -1297,12 +1264,15 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.6.tgz", - "integrity": "sha512-v9BVVpOTLB59C9E7aSnmIF8h7qRsFpx+A2nugVMTszEOMcfjlZMsXRm4LF23I3Z9AJxc8ANpIvzbzONoX9VJlg==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/brace-expansion": { @@ -1416,9 +1386,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001760", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", - "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", "funding": [ { "type": "opencollective", @@ -1672,15 +1642,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "license": "ISC" }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", @@ -1764,26 +1734,26 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", "license": "MIT", "dependencies": { "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.24.1", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", + "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", + "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", + "iterator.prototype": "^1.1.5", "safe-array-concat": "^1.1.3" }, "engines": { @@ -1868,9 +1838,9 @@ } }, "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", @@ -1879,7 +1849,7 @@ "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", + "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -2046,9 +2016,9 @@ } }, "node_modules/eslint-plugin-lit": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-2.1.1.tgz", - "integrity": "sha512-qmyAOnnTCdS+vDnNxtCoF0icSKIio4GUv6ZLnaCtTX6G/YezRa6Ag6tOQ+MfV5Elvtw9CIXeliRX4mIBSwrPIA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-2.2.1.tgz", + "integrity": "sha512-mnqqwpWF4PBF/YjlGt9mbHwrWCGMtaqdpnqISv3nGcTl8iStaAt9UGieMY3i8vwKfSSWtkEfBZUcRKFGys6yiw==", "license": "MIT", "dependencies": { "parse5": "^6.0.1", @@ -2135,18 +2105,24 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2161,9 +2137,9 @@ } }, "node_modules/eslint-plugin-wc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-3.0.2.tgz", - "integrity": "sha512-siwTrxPTw6GU2JmP3faInw8nhi0ZCnKsiSRM3j7EAkZmBTGYdDAToeseLYsvPrc5Urp/vPz+g7Ewh7XcICLxww==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-3.1.0.tgz", + "integrity": "sha512-spvXHD2/GTTgYXxFB3xlMThnXGUeNJaiCwWuPGzjDOLXnVGLcQpDt0fyiN6yiLoaLs/yhsj+7G1FpBZKeigCSA==", "license": "MIT", "dependencies": { "is-valid-element-name": "^1.0.0", @@ -2274,9 +2250,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -2340,9 +2316,9 @@ "license": "MIT" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -2485,6 +2461,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/format-imports/node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/format-imports/node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/format-imports/node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2506,14 +2498,25 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/format-imports/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/format-imports/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" } }, "node_modules/format-imports/node_modules/doctrine": { @@ -2600,6 +2603,22 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/format-imports/node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/format-imports/node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/format-imports/node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2680,24 +2699,24 @@ } }, "node_modules/format-imports/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", + "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -2825,9 +2844,9 @@ } }, "node_modules/git-hooks-list": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", - "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", "license": "MIT", "funding": { "url": "https://github.com/fisker/git-hooks-list?sponsor=1" @@ -2837,7 +2856,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -3808,6 +3827,33 @@ "node": ">= 8.0.0" } }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -4127,9 +4173,9 @@ } }, "node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -4142,16 +4188,15 @@ } }, "node_modules/prettier-plugin-packagejson": { - "version": "2.5.20", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.20.tgz", - "integrity": "sha512-G8cowPh+QmJJECTZlrPDKWkVVcwrFjF2rGcw546w3N8blLoc4szSs8UUPfFVxHUNLUjiru71Ah83g1lZkeK9Bw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-3.0.0.tgz", + "integrity": "sha512-z8/QmPSqx/ANvvQMWJSkSq1+ihBXeuwDEYdjX3ZjRJ5Ty1k7vGbFQfhzk2eDe0rwS/TNyRjWK/qnjJEStAOtDw==", "license": "MIT", "dependencies": { - "sort-package-json": "3.5.0", - "synckit": "0.11.11" + "sort-package-json": "3.6.0" }, "peerDependencies": { - "prettier": ">= 1.16.0" + "prettier": "^3" }, "peerDependenciesMeta": { "prettier": { @@ -4390,9 +4435,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4541,24 +4586,24 @@ } }, "node_modules/sort-object-keys": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.0.1.tgz", - "integrity": "sha512-R89fO+z3x7hiKPXX5P0qim+ge6Y60AjtlW+QQpRozrrNcR1lw9Pkpm5MLB56HoNvdcLHL4wbpq16OcvGpEDJIg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", "license": "MIT" }, "node_modules/sort-package-json": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.5.0.tgz", - "integrity": "sha512-moY4UtptUuP5sPuu9H9dp8xHNel7eP5/Kz/7+90jTvC0IOiPH2LigtRM/aSFSxreaWoToHUVUpEV4a2tAs2oKQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.0.tgz", + "integrity": "sha512-fyJsPLhWvY7u2KsKPZn1PixbXp+1m7V8NWqU8CvgFRbMEX41Ffw1kD8n0CfJiGoaSfoAvbrqRRl/DcHO8omQOQ==", "license": "MIT", "dependencies": { - "detect-indent": "^7.0.1", + "detect-indent": "^7.0.2", "detect-newline": "^4.0.1", - "git-hooks-list": "^4.0.0", + "git-hooks-list": "^4.1.1", "is-plain-obj": "^4.1.0", - "semver": "^7.7.1", - "sort-object-keys": "^2.0.0", - "tinyglobby": "^0.2.12" + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" }, "bin": { "sort-package-json": "cli.js" @@ -4785,21 +4830,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4832,9 +4862,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "license": "MIT", "engines": { "node": ">=18.12" @@ -4979,15 +5009,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.49.0.tgz", - "integrity": "sha512-zRSVH1WXD0uXczCXw+nsdjGPUdx4dfrs5VQoHnUWmv1U3oNlAKv4FUNdLDhVUg+gYn+a5hUESqch//Rv5wVhrg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.0.tgz", + "integrity": "sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==", "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.49.0", - "@typescript-eslint/parser": "8.49.0", - "@typescript-eslint/typescript-estree": "8.49.0", - "@typescript-eslint/utils": "8.49.0" + "@typescript-eslint/eslint-plugin": "8.56.0", + "@typescript-eslint/parser": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4997,7 +5027,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, @@ -5020,9 +5050,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true, "license": "MIT" }, @@ -5036,9 +5066,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", - "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", @@ -5084,9 +5114,9 @@ } }, "node_modules/validator": { - "version": "13.15.23", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.23.tgz", - "integrity": "sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==", + "version": "13.15.26", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.26.tgz", + "integrity": "sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -5172,9 +5202,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -5226,9 +5256,9 @@ } }, "node_modules/zod": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", - "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -5248,7 +5278,7 @@ }, "packages/eslint-config": { "name": "@goauthentik/eslint-config", - "version": "1.2.0", + "version": "1.2.1", "license": "MIT", "dependencies": { "eslint": "^9.39.1", @@ -5268,7 +5298,7 @@ }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -5287,7 +5317,7 @@ }, "packages/prettier-config": { "name": "@goauthentik/prettier-config", - "version": "3.3.1", + "version": "3.4.0", "license": "MIT", "dependencies": { "format-imports": "^4.0.8" @@ -5300,18 +5330,18 @@ "@typescript-eslint/eslint-plugin": "^8.49.0", "@typescript-eslint/parser": "^8.49.0", "eslint": "^9.39.1", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.49.0" }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20" + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0" } }, "packages/tsconfig": { diff --git a/package.json b/package.json index be52d931ec..83ed9fe4dc 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,12 @@ "name": "@goauthentik/authentik", "version": "2026.5.0-rc1", "private": true, + "scripts": { + "lint": "run-s lint:spellcheck lint:lockfile", + "lint:lockfile": "echo 'Skipping lockfile linting'", + "lint:node": "echo 'Skipping node linting'", + "lint:spellcheck": "echo 'Skipping spellcheck linting'" + }, "type": "module", "dependencies": { "@eslint/js": "^9.39.1", @@ -12,31 +18,31 @@ "@typescript-eslint/parser": "^8.48.1", "eslint": "^9.39.1", "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.48.1" }, + "workspaces": [], "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" + }, + "devEngines": { + "runtime": { + "name": "node", + "onFail": "ignore", + "version": "24" + }, + "packageManager": { + "name": "npm", + "version": "11.10.1", + "onFail": "ignore" + } }, - "workspaces": [], "prettier": "@goauthentik/prettier-config", "overrides": { "format-imports": { "eslint": "$eslint" } - }, - "devEngines": { - "runtime": { - "name": "node", - "onFail": "warn", - "version": ">=24" - }, - "packageManager": { - "name": "npm", - "onFail": "warn", - "version": ">=11.6.2" - } } } diff --git a/packages/docusaurus-config/package-lock.json b/packages/docusaurus-config/package-lock.json index 2132270569..8d0a41d439 100644 --- a/packages/docusaurus-config/package-lock.json +++ b/packages/docusaurus-config/package-lock.json @@ -1,12 +1,12 @@ { "name": "@goauthentik/docusaurus-config", - "version": "2.3.0", + "version": "2.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@goauthentik/docusaurus-config", - "version": "2.3.0", + "version": "2.4.0", "license": "MIT", "dependencies": { "deepmerge-ts": "^7.1.5", @@ -27,14 +27,14 @@ "@typescript-eslint/parser": "^8.47.0", "eslint": "^9.39.1", "pino": "^10.1.0", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.49.0" }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.0" }, "optionalDependencies": { "react": ">=18", @@ -61,7 +61,7 @@ }, "../eslint-config": { "name": "@goauthentik/eslint-config", - "version": "1.2.0", + "version": "1.3.0", "dev": true, "license": "MIT", "dependencies": { @@ -101,7 +101,7 @@ }, "../prettier-config": { "name": "@goauthentik/prettier-config", - "version": "3.3.1", + "version": "3.4.0", "dev": true, "license": "MIT", "dependencies": { @@ -115,18 +115,18 @@ "@typescript-eslint/eslint-plugin": "^8.49.0", "@typescript-eslint/parser": "^8.49.0", "eslint": "^9.39.1", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.49.0" }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.0" }, "peerDependencies": { - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20" + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0" } }, "../tsconfig": { @@ -4699,19 +4699,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -9426,9 +9413,9 @@ } }, "node_modules/git-hooks-list": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", - "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", "dev": true, "license": "MIT", "funding": { @@ -16131,9 +16118,9 @@ } }, "node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", "bin": { @@ -16147,17 +16134,16 @@ } }, "node_modules/prettier-plugin-packagejson": { - "version": "2.5.20", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.20.tgz", - "integrity": "sha512-G8cowPh+QmJJECTZlrPDKWkVVcwrFjF2rGcw546w3N8blLoc4szSs8UUPfFVxHUNLUjiru71Ah83g1lZkeK9Bw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-3.0.0.tgz", + "integrity": "sha512-z8/QmPSqx/ANvvQMWJSkSq1+ihBXeuwDEYdjX3ZjRJ5Ty1k7vGbFQfhzk2eDe0rwS/TNyRjWK/qnjJEStAOtDw==", "dev": true, "license": "MIT", "dependencies": { - "sort-package-json": "3.5.0", - "synckit": "0.11.11" + "sort-package-json": "3.6.0" }, "peerDependencies": { - "prettier": ">= 1.16.0" + "prettier": "^3" }, "peerDependenciesMeta": { "prettier": { @@ -17886,26 +17872,26 @@ } }, "node_modules/sort-object-keys": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.0.1.tgz", - "integrity": "sha512-R89fO+z3x7hiKPXX5P0qim+ge6Y60AjtlW+QQpRozrrNcR1lw9Pkpm5MLB56HoNvdcLHL4wbpq16OcvGpEDJIg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", "dev": true, "license": "MIT" }, "node_modules/sort-package-json": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.5.0.tgz", - "integrity": "sha512-moY4UtptUuP5sPuu9H9dp8xHNel7eP5/Kz/7+90jTvC0IOiPH2LigtRM/aSFSxreaWoToHUVUpEV4a2tAs2oKQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.0.tgz", + "integrity": "sha512-fyJsPLhWvY7u2KsKPZn1PixbXp+1m7V8NWqU8CvgFRbMEX41Ffw1kD8n0CfJiGoaSfoAvbrqRRl/DcHO8omQOQ==", "dev": true, "license": "MIT", "dependencies": { - "detect-indent": "^7.0.1", + "detect-indent": "^7.0.2", "detect-newline": "^4.0.1", - "git-hooks-list": "^4.0.0", + "git-hooks-list": "^4.1.1", "is-plain-obj": "^4.1.0", - "semver": "^7.7.1", - "sort-object-keys": "^2.0.0", - "tinyglobby": "^0.2.12" + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" }, "bin": { "sort-package-json": "cli.js" @@ -18341,22 +18327,6 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, "node_modules/tapable": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", diff --git a/packages/docusaurus-config/package.json b/packages/docusaurus-config/package.json index 72a7bdf7e6..2dc162dcef 100644 --- a/packages/docusaurus-config/package.json +++ b/packages/docusaurus-config/package.json @@ -1,8 +1,13 @@ { "name": "@goauthentik/docusaurus-config", - "version": "2.3.0", + "version": "2.4.0", "description": "authentik's Docusaurus config", "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/goauthentik/authentik.git", + "directory": "packages/docusaurus-config" + }, "scripts": { "build": "tsc -p .", "lint": "eslint --fix .", @@ -11,11 +16,12 @@ "prettier-check": "prettier --cache --check -u ." }, "type": "module", + "types": "./out/index.d.ts", "exports": { "./package.json": "./package.json", ".": { - "import": "./index.js", - "types": "./out/index.d.ts" + "types": "./out/index.d.ts", + "import": "./index.js" }, "./css/*.css": "./css/*.css" }, @@ -38,8 +44,8 @@ "@typescript-eslint/parser": "^8.47.0", "eslint": "^9.39.1", "pino": "^10.1.0", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.49.0" }, @@ -54,22 +60,28 @@ "react": ">=18", "react-dom": ">=18" }, - "engines": { - "node": ">=24", - "npm": ">=11.6.2" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/goauthentik/authentik.git", - "directory": "packages/docusaurus-config" - }, - "types": "./out/index.d.ts", "files": [ "./index.js", "lib/**/*", "css/**/*", "out/**/*" ], + "engines": { + "node": ">=24", + "npm": ">=11.10.0" + }, + "devEngines": { + "runtime": { + "name": "node", + "onFail": "warn", + "version": ">=24" + }, + "packageManager": { + "name": "npm", + "version": "11.10.1", + "onFail": "warn" + } + }, "prettier": "@goauthentik/prettier-config", "peerDependenciesMeta": { "@docusaurus/theme-search-algolia": { diff --git a/packages/esbuild-plugin-live-reload/package-lock.json b/packages/esbuild-plugin-live-reload/package-lock.json index 206a4eff37..6df284ab86 100644 --- a/packages/esbuild-plugin-live-reload/package-lock.json +++ b/packages/esbuild-plugin-live-reload/package-lock.json @@ -1,12 +1,12 @@ { "name": "@goauthentik/esbuild-plugin-live-reload", - "version": "1.4.0", + "version": "1.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@goauthentik/esbuild-plugin-live-reload", - "version": "1.4.0", + "version": "1.5.0", "license": "MIT", "dependencies": { "find-free-ports": "^3.1.1" @@ -22,8 +22,8 @@ "esbuild": "^0.27.1", "eslint": "^9.39.1", "pino": "^10.1.0", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typedoc": "^0.28.15", "typedoc-plugin-markdown": "^4.9.0", "typescript": "^5.9.3", @@ -39,7 +39,7 @@ }, "../eslint-config": { "name": "@goauthentik/eslint-config", - "version": "1.2.0", + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { @@ -60,7 +60,7 @@ }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -79,7 +79,7 @@ }, "../prettier-config": { "name": "@goauthentik/prettier-config", - "version": "3.3.1", + "version": "3.4.0", "dev": true, "license": "MIT", "dependencies": { @@ -93,18 +93,18 @@ "@typescript-eslint/eslint-plugin": "^8.49.0", "@typescript-eslint/parser": "^8.49.0", "eslint": "^9.39.1", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.49.0" }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20" + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0" } }, "../tsconfig": { @@ -833,19 +833,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, "node_modules/@shikijs/engine-oniguruma": { "version": "3.19.0", "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.19.0.tgz", @@ -971,7 +958,6 @@ "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.49.0", "@typescript-eslint/types": "8.49.0", @@ -1176,7 +1162,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1455,7 +1440,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -1761,9 +1745,9 @@ "license": "ISC" }, "node_modules/git-hooks-list": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", - "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", "dev": true, "license": "MIT", "funding": { @@ -2138,7 +2122,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -2197,12 +2180,11 @@ } }, "node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -2214,17 +2196,16 @@ } }, "node_modules/prettier-plugin-packagejson": { - "version": "2.5.20", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.20.tgz", - "integrity": "sha512-G8cowPh+QmJJECTZlrPDKWkVVcwrFjF2rGcw546w3N8blLoc4szSs8UUPfFVxHUNLUjiru71Ah83g1lZkeK9Bw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-3.0.0.tgz", + "integrity": "sha512-z8/QmPSqx/ANvvQMWJSkSq1+ihBXeuwDEYdjX3ZjRJ5Ty1k7vGbFQfhzk2eDe0rwS/TNyRjWK/qnjJEStAOtDw==", "dev": true, "license": "MIT", "dependencies": { - "sort-package-json": "3.5.0", - "synckit": "0.11.11" + "sort-package-json": "3.6.0" }, "peerDependencies": { - "prettier": ">= 1.16.0" + "prettier": "^3" }, "peerDependenciesMeta": { "prettier": { @@ -2353,26 +2334,26 @@ } }, "node_modules/sort-object-keys": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.0.1.tgz", - "integrity": "sha512-R89fO+z3x7hiKPXX5P0qim+ge6Y60AjtlW+QQpRozrrNcR1lw9Pkpm5MLB56HoNvdcLHL4wbpq16OcvGpEDJIg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", "dev": true, "license": "MIT" }, "node_modules/sort-package-json": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.5.0.tgz", - "integrity": "sha512-moY4UtptUuP5sPuu9H9dp8xHNel7eP5/Kz/7+90jTvC0IOiPH2LigtRM/aSFSxreaWoToHUVUpEV4a2tAs2oKQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.0.tgz", + "integrity": "sha512-fyJsPLhWvY7u2KsKPZn1PixbXp+1m7V8NWqU8CvgFRbMEX41Ffw1kD8n0CfJiGoaSfoAvbrqRRl/DcHO8omQOQ==", "dev": true, "license": "MIT", "dependencies": { - "detect-indent": "^7.0.1", + "detect-indent": "^7.0.2", "detect-newline": "^4.0.1", - "git-hooks-list": "^4.0.0", + "git-hooks-list": "^4.1.1", "is-plain-obj": "^4.1.0", - "semver": "^7.7.1", - "sort-object-keys": "^2.0.0", - "tinyglobby": "^0.2.12" + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" }, "bin": { "sort-package-json": "cli.js" @@ -2417,22 +2398,6 @@ "node": ">=8" } }, - "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, "node_modules/thread-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", @@ -2492,7 +2457,6 @@ "integrity": "sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@gerrit0/mini-shiki": "^3.17.0", "lunr": "^2.3.9", @@ -2530,7 +2494,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/packages/esbuild-plugin-live-reload/package.json b/packages/esbuild-plugin-live-reload/package.json index 2073aef569..06d65fcb83 100644 --- a/packages/esbuild-plugin-live-reload/package.json +++ b/packages/esbuild-plugin-live-reload/package.json @@ -1,8 +1,13 @@ { "name": "@goauthentik/esbuild-plugin-live-reload", - "version": "1.4.0", + "version": "1.5.0", "description": "ESBuild + browser refresh. Build completes, page reloads.", "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/goauthentik/authentik.git", + "directory": "packages/esbuild-plugin-live-reload" + }, "scripts": { "build": "npm run build:types && npm run build:docs", "build:docs": "typedoc", @@ -14,6 +19,7 @@ }, "main": "index.js", "type": "module", + "types": "./out/index.d.ts", "exports": { "./package.json": "./package.json", ".": { @@ -47,8 +53,8 @@ "esbuild": "^0.27.1", "eslint": "^9.39.1", "pino": "^10.1.0", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typedoc": "^0.28.15", "typedoc-plugin-markdown": "^4.9.0", "typescript": "^5.9.3", @@ -57,10 +63,30 @@ "peerDependencies": { "esbuild": "^0.27.0" }, + "files": [ + "./index.js", + "client/**/*", + "plugin/**/*", + "shared/**/*", + "out/**/*" + ], "engines": { "node": ">=24", "npm": ">=11.6.2" }, + "devEngines": { + "runtime": { + "name": "node", + "onFail": "warn", + "version": ">=24" + }, + "packageManager": { + "name": "npm", + "version": "11.10.1", + "onFail": "warn" + } + }, + "prettier": "@goauthentik/prettier-config", "keywords": [ "esbuild", "live-reload", @@ -69,20 +95,6 @@ "reload", "authentik" ], - "repository": { - "type": "git", - "url": "git+https://github.com/goauthentik/authentik.git", - "directory": "packages/esbuild-plugin-live-reload" - }, - "types": "./out/index.d.ts", - "files": [ - "./index.js", - "client/**/*", - "plugin/**/*", - "shared/**/*", - "out/**/*" - ], - "prettier": "@goauthentik/prettier-config", "publishConfig": { "access": "public" } diff --git a/packages/eslint-config/package-lock.json b/packages/eslint-config/package-lock.json index 8302f2ee64..cea9ffd5ce 100644 --- a/packages/eslint-config/package-lock.json +++ b/packages/eslint-config/package-lock.json @@ -1,12 +1,12 @@ { "name": "@goauthentik/eslint-config", - "version": "1.2.0", + "version": "1.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@goauthentik/eslint-config", - "version": "1.2.0", + "version": "1.2.1", "license": "MIT", "dependencies": { "eslint": "^9.39.1", @@ -26,7 +26,7 @@ }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -45,7 +45,7 @@ }, "../prettier-config": { "name": "@goauthentik/prettier-config", - "version": "3.3.1", + "version": "3.4.0", "dev": true, "license": "MIT", "dependencies": { @@ -59,18 +59,18 @@ "@typescript-eslint/eslint-plugin": "^8.49.0", "@typescript-eslint/parser": "^8.49.0", "eslint": "^9.39.1", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.49.0" }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20" + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0" } }, "../tsconfig": { @@ -111,7 +111,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -658,7 +657,6 @@ "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.49.0", "@typescript-eslint/types": "8.49.0", @@ -888,7 +886,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -906,9 +903,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -1162,7 +1159,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -1648,7 +1644,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3212,7 +3207,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3820,7 +3814,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4049,7 +4042,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index a473268a80..b75d51573b 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,8 +1,13 @@ { "name": "@goauthentik/eslint-config", - "version": "1.2.0", + "version": "1.2.1", "description": "authentik's ESLint config", "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/goauthentik/authentik.git", + "directory": "packages/eslint-config" + }, "scripts": { "build": "tsc -p .", "lint": "eslint --fix .", @@ -11,6 +16,7 @@ "prettier-check": "prettier --cache --check -u ." }, "type": "module", + "types": "./out/index.d.ts", "exports": { "./package.json": "./package.json", ".": { @@ -52,21 +58,27 @@ "typescript": "^5.9.3", "typescript-eslint": "^8.49.0" }, - "engines": { - "node": ">=24", - "npm": ">=11.6.2" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/goauthentik/authentik.git", - "directory": "packages/eslint-config" - }, - "types": "./out/index.d.ts", "files": [ "./index.js", "lib/**/*", "out/**/*" ], + "engines": { + "node": ">=24", + "npm": ">=11.10.1" + }, + "devEngines": { + "runtime": { + "name": "node", + "version": "24", + "onFail": "ignore" + }, + "packageManager": { + "name": "npm", + "version": "11.10.1", + "onFail": "ignore" + } + }, "prettier": "@goauthentik/prettier-config", "peerDependenciesMeta": { "react": { diff --git a/packages/prettier-config/lib/constants.js b/packages/prettier-config/lib/constants.js index 7e81e6145b..718ff896fa 100644 --- a/packages/prettier-config/lib/constants.js +++ b/packages/prettier-config/lib/constants.js @@ -11,10 +11,86 @@ import { fileURLToPath } from "node:url"; * @property {string[]} [packageSortOrder] Custom ordering array. */ +/** + * @typedef {PrettierConfig & PackageJSONPluginConfig} ExtendedPrettierConfig + */ + +const CI = !!process.env.CI; + +/** + * @type {ExtendedPrettierConfig['plugins']} + */ +const plugins = [ + // --- + fileURLToPath(import.meta.resolve("@goauthentik/prettier-config/imports-plugin")), +]; + +/** + * @type {ExtendedPrettierConfig['overrides']} + */ +const overrides = [ + { + files: "schemas/**/*.json", + options: { + tabWidth: 2, + }, + }, + { + files: "tsconfig.json", + options: { + trailingComma: "none", + }, + }, +]; + +// Sort order can be a source of false-positives in CI when this package is updated. +if (!CI) { + plugins.unshift("prettier-plugin-packagejson"); + overrides.push({ + files: "package.json", + options: { + packageSortOrder: [ + // --- + "name", + "version", + "description", + "license", + "private", + "author", + "authors", + "contributors", + "funding", + "repository", + "bugs", + "homepage", + "scripts", + "main", + "type", + "types", + "exports", + "imports", + "dependencies", + "devDependencies", + "peerDependencies", + "optionalDependencies", + "workspaces", + "files", + "wireit", + "resolutions", + "engines", + "devEngines", + "packageManager", + "prettier", + "eslintConfig", + ], + }, + }); +} + /** * authentik Prettier configuration. * - * @type {PrettierConfig & PackageJSONPluginConfig} + * @type {ExtendedPrettierConfig} * @internal */ export const AuthentikPrettierConfig = { @@ -34,51 +110,6 @@ export const AuthentikPrettierConfig = { trailingComma: "all", useTabs: false, vueIndentScriptAndStyle: false, - plugins: [ - // --- - "prettier-plugin-packagejson", - fileURLToPath(import.meta.resolve("@goauthentik/prettier-config/imports-plugin")), - ], - - overrides: [ - { - files: "schemas/**/*.json", - options: { - tabWidth: 2, - }, - }, - { - files: "tsconfig.json", - options: { - trailingComma: "none", - }, - }, - { - files: "package.json", - options: { - packageSortOrder: [ - // --- - "name", - "version", - "description", - "license", - "private", - "author", - "authors", - "scripts", - "main", - "type", - "exports", - "imports", - "dependencies", - "devDependencies", - "peerDependencies", - "optionalDependencies", - "wireit", - "resolutions", - "engines", - ], - }, - }, - ], + plugins, + overrides, }; diff --git a/packages/prettier-config/lib/formatter.js b/packages/prettier-config/lib/formatter.js index 249b528bf9..5e53a0ac1f 100644 --- a/packages/prettier-config/lib/formatter.js +++ b/packages/prettier-config/lib/formatter.js @@ -1,7 +1,7 @@ -import { format } from "prettier"; - import { AuthentikPrettierConfig } from "./constants.js"; +import { format } from "prettier"; + /** * Format using Prettier. * diff --git a/packages/prettier-config/package-lock.json b/packages/prettier-config/package-lock.json index 2a36b7afdb..805ca78c92 100644 --- a/packages/prettier-config/package-lock.json +++ b/packages/prettier-config/package-lock.json @@ -1,12 +1,12 @@ { "name": "@goauthentik/prettier-config", - "version": "3.3.1", + "version": "3.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@goauthentik/prettier-config", - "version": "3.3.1", + "version": "3.4.0", "license": "MIT", "dependencies": { "format-imports": "^4.0.8" @@ -19,23 +19,23 @@ "@typescript-eslint/eslint-plugin": "^8.49.0", "@typescript-eslint/parser": "^8.49.0", "eslint": "^9.39.1", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.49.0" }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20" + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0" } }, "../eslint-config": { "name": "@goauthentik/eslint-config", - "version": "1.2.0", + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { @@ -56,7 +56,7 @@ }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -433,19 +433,6 @@ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -792,9 +779,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -1353,9 +1340,9 @@ } }, "node_modules/git-hooks-list": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", - "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", "dev": true, "license": "MIT", "funding": { @@ -1799,9 +1786,9 @@ } }, "node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -1814,17 +1801,16 @@ } }, "node_modules/prettier-plugin-packagejson": { - "version": "2.5.20", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.20.tgz", - "integrity": "sha512-G8cowPh+QmJJECTZlrPDKWkVVcwrFjF2rGcw546w3N8blLoc4szSs8UUPfFVxHUNLUjiru71Ah83g1lZkeK9Bw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-3.0.0.tgz", + "integrity": "sha512-z8/QmPSqx/ANvvQMWJSkSq1+ihBXeuwDEYdjX3ZjRJ5Ty1k7vGbFQfhzk2eDe0rwS/TNyRjWK/qnjJEStAOtDw==", "dev": true, "license": "MIT", "dependencies": { - "sort-package-json": "3.5.0", - "synckit": "0.11.11" + "sort-package-json": "3.6.0" }, "peerDependencies": { - "prettier": ">= 1.16.0" + "prettier": "^3" }, "peerDependenciesMeta": { "prettier": { @@ -1897,26 +1883,26 @@ } }, "node_modules/sort-object-keys": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.0.1.tgz", - "integrity": "sha512-R89fO+z3x7hiKPXX5P0qim+ge6Y60AjtlW+QQpRozrrNcR1lw9Pkpm5MLB56HoNvdcLHL4wbpq16OcvGpEDJIg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", "dev": true, "license": "MIT" }, "node_modules/sort-package-json": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.5.0.tgz", - "integrity": "sha512-moY4UtptUuP5sPuu9H9dp8xHNel7eP5/Kz/7+90jTvC0IOiPH2LigtRM/aSFSxreaWoToHUVUpEV4a2tAs2oKQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.0.tgz", + "integrity": "sha512-fyJsPLhWvY7u2KsKPZn1PixbXp+1m7V8NWqU8CvgFRbMEX41Ffw1kD8n0CfJiGoaSfoAvbrqRRl/DcHO8omQOQ==", "dev": true, "license": "MIT", "dependencies": { - "detect-indent": "^7.0.1", + "detect-indent": "^7.0.2", "detect-newline": "^4.0.1", - "git-hooks-list": "^4.0.0", + "git-hooks-list": "^4.1.1", "is-plain-obj": "^4.1.0", - "semver": "^7.7.1", - "sort-object-keys": "^2.0.0", - "tinyglobby": "^0.2.12" + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" }, "bin": { "sort-package-json": "cli.js" @@ -2004,22 +1990,6 @@ "node": ">=8" } }, - "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", diff --git a/packages/prettier-config/package.json b/packages/prettier-config/package.json index fa64caebe3..98f2da0ea1 100644 --- a/packages/prettier-config/package.json +++ b/packages/prettier-config/package.json @@ -1,8 +1,13 @@ { "name": "@goauthentik/prettier-config", - "version": "3.3.1", + "version": "3.4.0", "description": "authentik's Prettier config", "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/goauthentik/authentik.git", + "directory": "packages/prettier-config" + }, "scripts": { "build": "tsc -p .", "lint": "eslint --fix .", @@ -11,19 +16,20 @@ "prettier-check": "prettier --check ." }, "type": "module", + "types": "./out/index.d.ts", "exports": { "./package.json": "./package.json", ".": { - "import": "./index.js", - "types": "./out/index.d.ts" + "types": "./out/index.d.ts", + "import": "./index.js" }, "./imports-plugin": { - "import": "./lib/imports.js", - "types": "./out/lib/imports.d.ts" + "types": "./out/lib/imports.d.ts", + "import": "./lib/imports.js" }, "./formatter": { - "import": "./lib/formatter.js", - "types": "./out/lib/formatter.d.ts" + "types": "./out/lib/formatter.d.ts", + "import": "./lib/formatter.js" } }, "dependencies": { @@ -37,30 +43,36 @@ "@typescript-eslint/eslint-plugin": "^8.49.0", "@typescript-eslint/parser": "^8.49.0", "eslint": "^9.39.1", - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript": "^5.9.3", "typescript-eslint": "^8.49.0" }, "peerDependencies": { - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20" + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0" }, - "engines": { - "node": ">=24", - "npm": ">=11.6.2" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/goauthentik/authentik.git", - "directory": "packages/prettier-config" - }, - "types": "./out/index.d.ts", "files": [ "./index.js", "lib/**/*", "out/**/*" ], + "engines": { + "node": ">=24", + "npm": ">=11.10.1" + }, + "devEngines": { + "runtime": { + "name": "node", + "version": "24", + "onFail": "ignore" + }, + "packageManager": { + "name": "npm", + "version": "11.10.1", + "onFail": "ignore" + } + }, "prettier": "./index.js", "overrides": { "format-imports": { diff --git a/pyproject.toml b/pyproject.toml index 4bb45dd2c9..6eec8ba926 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,7 @@ dependencies = [ "kubernetes==35.0.0", "ldap3==2.9.1", "lxml==6.0.2", - "msgraph-sdk==1.54.0", + "msgraph-sdk==1.55.0", "opencontainers==0.0.15", "packaging==26.0", "paramiko==4.0.0", @@ -76,13 +76,13 @@ dependencies = [ [dependency-groups] dev = [ - "aws-cdk-lib==2.238.0", + "aws-cdk-lib==2.239.0", "bandit==1.9.3", "black==26.1.0", "bpython==0.26", "codespell==2.4.1", "colorama==0.4.6", - "constructs==10.5.0", + "constructs==10.5.1", "coverage[toml]==7.13.4", "daphne==4.2.1", "debugpy==1.8.20", @@ -102,8 +102,8 @@ dev = [ "pytest-timeout==2.4.0", "pytest==9.0.2", "requests-mock==1.12.1", - "ruff==0.15.1", - "selenium==4.40.0", + "ruff==0.15.2", + "selenium==4.41.0", "types-channels==4.3.0.20250822", "types-docker==7.1.0.20260109", "types-jwcrypto==1.5.0.20251102", diff --git a/schema.yml b/schema.yml index f26e1b0f9c..08c8477aca 100644 --- a/schema.yml +++ b/schema.yml @@ -42199,15 +42199,15 @@ components: readOnly: true opened_on: type: string - format: date + format: date-time readOnly: true grace_period_end: type: string - format: date + format: date-time readOnly: true next_review_date: type: string - format: date + format: date-time readOnly: true reviews: type: array diff --git a/tests/e2e/test_flows_enroll.py b/tests/e2e/test_flows_enroll.py index 226a34fad4..370e30d8b5 100644 --- a/tests/e2e/test_flows_enroll.py +++ b/tests/e2e/test_flows_enroll.py @@ -110,8 +110,8 @@ class TestFlowsEnroll(SeleniumTestCase): identification_stage = self.get_shadow_root("ak-stage-identification", flow_executor) wait = WebDriverWait(identification_stage, self.wait_timeout) - wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "a[name='enroll']"))) - identification_stage.find_element(By.CSS_SELECTOR, "a[name='enroll']").click() + wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "a[ouiaId='enroll']"))) + identification_stage.find_element(By.CSS_SELECTOR, "a[ouiaId='enroll']").click() # First prompt stage flow_executor = self.get_shadow_root("ak-flow-executor") diff --git a/tests/e2e/test_flows_recovery.py b/tests/e2e/test_flows_recovery.py index e0e068e50c..320eb55639 100644 --- a/tests/e2e/test_flows_recovery.py +++ b/tests/e2e/test_flows_recovery.py @@ -26,8 +26,8 @@ class TestFlowsRecovery(SeleniumTestCase): identification_stage = self.get_shadow_root("ak-stage-identification", flow_executor) wait = WebDriverWait(identification_stage, self.wait_timeout) - wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "a[name='recovery']"))) - identification_stage.find_element(By.CSS_SELECTOR, "a[name='recovery']").click() + wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "a[ouiaId='recovery']"))) + identification_stage.find_element(By.CSS_SELECTOR, "a[ouiaId='recovery']").click() # First prompt stage flow_executor = self.get_shadow_root("ak-flow-executor") diff --git a/uv.lock b/uv.lock index 375de2f9a2..e34c866f7f 100644 --- a/uv.lock +++ b/uv.lock @@ -192,15 +192,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/91/be/317c2c55b8bbec407257d45f5c8d1b6867abc76d12043f2d3d58c538a4ea/asgiref-3.11.0-py3-none-any.whl", hash = "sha256:1db9021efadb0d9512ce8ffaf72fcef601c7b73a8807a1bb2ef143dc6b14846d", size = 24096, upload-time = "2025-11-19T15:32:19.004Z" }, ] -[[package]] -name = "async-generator" -version = "1.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/b6/6fa6b3b598a03cba5e80f829e0dadbb49d7645f523d209b2fb7ea0bbb02a/async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144", size = 29870, upload-time = "2018-08-01T03:36:21.69Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/52/39d20e03abd0ac9159c162ec24b93fbcaa111e8400308f2465432495ca2b/async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b", size = 18857, upload-time = "2018-08-01T03:36:20.029Z" }, -] - [[package]] name = "attrs" version = "25.4.0" @@ -363,7 +354,7 @@ requires-dist = [ { name = "kubernetes", specifier = "==35.0.0" }, { name = "ldap3", specifier = "==2.9.1" }, { name = "lxml", specifier = "==6.0.2" }, - { name = "msgraph-sdk", specifier = "==1.54.0" }, + { name = "msgraph-sdk", specifier = "==1.55.0" }, { name = "opencontainers", git = "https://github.com/vsoch/oci-python?rev=ceb4fcc090851717a3069d78e85ceb1e86c2740c" }, { name = "packaging", specifier = "==26.0" }, { name = "paramiko", specifier = "==4.0.0" }, @@ -395,13 +386,13 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ - { name = "aws-cdk-lib", specifier = "==2.238.0" }, + { name = "aws-cdk-lib", specifier = "==2.239.0" }, { name = "bandit", specifier = "==1.9.3" }, { name = "black", specifier = "==26.1.0" }, { name = "bpython", specifier = "==0.26" }, { name = "codespell", specifier = "==2.4.1" }, { name = "colorama", specifier = "==0.4.6" }, - { name = "constructs", specifier = "==10.5.0" }, + { name = "constructs", specifier = "==10.5.1" }, { name = "coverage", extras = ["toml"], specifier = "==7.13.4" }, { name = "daphne", specifier = "==4.2.1" }, { name = "debugpy", specifier = "==1.8.20" }, @@ -421,8 +412,8 @@ dev = [ { name = "pytest-randomly", specifier = "==4.0.1" }, { name = "pytest-timeout", specifier = "==2.4.0" }, { name = "requests-mock", specifier = "==1.12.1" }, - { name = "ruff", specifier = "==0.15.1" }, - { name = "selenium", specifier = "==4.40.0" }, + { name = "ruff", specifier = "==0.15.2" }, + { name = "selenium", specifier = "==4.41.0" }, { name = "types-channels", specifier = "==4.3.0.20250822" }, { name = "types-docker", specifier = "==7.1.0.20260109" }, { name = "types-jwcrypto", specifier = "==1.5.0.20251102" }, @@ -492,21 +483,21 @@ wheels = [ [[package]] name = "aws-cdk-cloud-assembly-schema" -version = "48.20.0" +version = "50.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsii" }, { name = "publication" }, { name = "typeguard" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a7/b5/1ce2f6bff913ca8c94a001b84290ec4ce3729f54a3af0e3ff0edb303ac20/aws_cdk_cloud_assembly_schema-48.20.0.tar.gz", hash = "sha256:229aa136c26b71b0a82b5a32658eabcd30e344f7e136315fdb6e3de8ef523bfa", size = 208109, upload-time = "2025-11-19T12:19:48.206Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/4c/a9ac7498f2b76d7697e60367b9a8c690fc54bb3bf4e591e6fe06977c847b/aws_cdk_cloud_assembly_schema-50.4.0.tar.gz", hash = "sha256:c9aa7a108ca63f3880f26594166d3e8c16b504a50424011baf785231dc009f30", size = 208573, upload-time = "2026-02-05T16:37:54.61Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/08/17a35f0b668451484f2254f5e50a0105958bffe90da11c41b7629972e6a9/aws_cdk_cloud_assembly_schema-48.20.0-py3-none-any.whl", hash = "sha256:f5b6cf661cac8690add9461de13aeae3f3742eec71c066032bd045b08d0b7c3e", size = 207669, upload-time = "2025-11-19T12:19:46.614Z" }, + { url = "https://files.pythonhosted.org/packages/50/37/946c9646606cf9dffa5d15a860557c9d507655c97fb2525bb8bd0c215179/aws_cdk_cloud_assembly_schema-50.4.0-py3-none-any.whl", hash = "sha256:3f98f06d99f68f5bae5c72f0f392494dd3ef4211197afd0e75cfe1d5fc487d1c", size = 208231, upload-time = "2026-02-05T16:37:52.037Z" }, ] [[package]] name = "aws-cdk-lib" -version = "2.238.0" +version = "2.239.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aws-cdk-asset-awscli-v1" }, @@ -517,9 +508,9 @@ dependencies = [ { name = "publication" }, { name = "typeguard" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3f/37/d9cdaf7068b5e598b2ab60687877de484adefc3927a7cf6571bff40da884/aws_cdk_lib-2.238.0.tar.gz", hash = "sha256:cef10c71e1575196df277fdac57c54010a8d28d77646da09200b1d1cb3625f8e", size = 47453139, upload-time = "2026-02-09T16:56:46.117Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/f8/851c18653bf6806877f5c942df7149c1d4f118063106b3c99c083d124da9/aws_cdk_lib-2.239.0.tar.gz", hash = "sha256:b5637f961e05b0d9ce28da2d759d605e23f4679f2cd0d1262efe3c32986d81f3", size = 47594912, upload-time = "2026-02-19T21:58:24.267Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/b9/47cb90169841bbbe74e2e30967132d8930a70e05340454caaa3e31b129ab/aws_cdk_lib-2.238.0-py3-none-any.whl", hash = "sha256:6602d6678597c649d80ff884972c3fa67a98fd6cacb56adcb77cd8fc4a735d43", size = 48104897, upload-time = "2026-02-09T16:56:06.79Z" }, + { url = "https://files.pythonhosted.org/packages/b8/05/d5293605890d315b2e91d3538b6ebdd7fa7704e9686a0beac76773ae6954/aws_cdk_lib-2.239.0-py3-none-any.whl", hash = "sha256:ef00581bb309440de8e4fbf0adc2ab53fa443a10783111a349c69bb25128ddad", size = 48242835, upload-time = "2026-02-19T21:57:38.138Z" }, ] [[package]] @@ -856,16 +847,16 @@ wheels = [ [[package]] name = "constructs" -version = "10.5.0" +version = "10.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsii" }, { name = "publication" }, { name = "typeguard" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/e3/29744d401eb6597701cba93dbedee08450a6e8412718091b986e48502e49/constructs-10.5.0.tar.gz", hash = "sha256:88d23b10361c0a8b4896f6bed66693a0f4c61f0aa4247eb33a34a4ed12e67aaf", size = 68010, upload-time = "2026-02-17T09:48:08.71Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/a7/1d87d7327aaa8662f7525b064b6c0524e4b3985092840e6a568f5eb4a7d6/constructs-10.5.1.tar.gz", hash = "sha256:c0e90bb2b9c2782f292017820b91714321cb78393c8965c9362b0b624bfaf23b", size = 68165, upload-time = "2026-02-19T09:56:32.925Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/0a/8141f766828dc6f249bf08d4e3bb4a65018ff7a8c5caf3c5f3f46f90d8e7/constructs-10.5.0-py3-none-any.whl", hash = "sha256:01e613161f087f0432c24824a1ba4e8a3084f5af4c7fcd852c8e94bfc0110ab5", size = 66172, upload-time = "2026-02-17T09:48:07.218Z" }, + { url = "https://files.pythonhosted.org/packages/c3/20/dff420181946bcaba48dba3f0c11db202c8441eda927f281ad78912cf777/constructs-10.5.1-py3-none-any.whl", hash = "sha256:fc5c14f6b2770c8542a43e298aa29b63dee4b18701763e8c0fdce202624c3a7c", size = 66344, upload-time = "2026-02-19T09:56:31.311Z" }, ] [[package]] @@ -2409,7 +2400,7 @@ wheels = [ [[package]] name = "msgraph-sdk" -version = "1.54.0" +version = "1.55.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "azure-identity" }, @@ -2419,9 +2410,9 @@ dependencies = [ { name = "microsoft-kiota-serialization-text" }, { name = "msgraph-core" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/56/0c2fba87b6eee19e4589bf21c3141de290afc51d654445fc3e2908244d7b/msgraph_sdk-1.54.0.tar.gz", hash = "sha256:4dc294fc7f8a173f5bee30ccfc396b81fa1a16d7dcc95debe76fdf706920e5b3", size = 6283861, upload-time = "2026-02-06T01:29:26.975Z" } +sdist = { url = "https://files.pythonhosted.org/packages/10/44/0b5a188addf6341b3da10dd207e444417de255f7c1651902ba72016a2843/msgraph_sdk-1.55.0.tar.gz", hash = "sha256:6df691a31954a050d26b8a678968017e157d940fb377f2a8a4e17a9741b98756", size = 6295669, upload-time = "2026-02-20T00:32:29.378Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/7a/d9eed36c7f309eb6c81c5b72b5b8bad40203487414ad2b9e371febc79885/msgraph_sdk-1.54.0-py3-none-any.whl", hash = "sha256:2b9894fd9f21ed9a71188e3d68bd1a9a58b2d1077e96ee4cb10a9f3d9d59a58e", size = 25707515, upload-time = "2026-02-06T01:29:23.344Z" }, + { url = "https://files.pythonhosted.org/packages/fb/a8/de807e62f8ff93003b573aa243cdcee2da2c0618b42efbc9a8e61aa7300d/msgraph_sdk-1.55.0-py3-none-any.whl", hash = "sha256:c8e68ebc4b88af5111de312e7fa910a4e76ddf48a4534feadb1fb8a411c48cfc", size = 25758742, upload-time = "2026-02-20T00:30:40.039Z" }, ] [[package]] @@ -3285,27 +3276,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.1" +version = "0.15.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/dc/4e6ac71b511b141cf626357a3946679abeba4cf67bc7cc5a17920f31e10d/ruff-0.15.1.tar.gz", hash = "sha256:c590fe13fb57c97141ae975c03a1aedb3d3156030cabd740d6ff0b0d601e203f", size = 4540855, upload-time = "2026-02-12T23:09:09.998Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/04/eab13a954e763b0606f460443fcbf6bb5a0faf06890ea3754ff16523dce5/ruff-0.15.2.tar.gz", hash = "sha256:14b965afee0969e68bb871eba625343b8673375f457af4abe98553e8bbb98342", size = 4558148, upload-time = "2026-02-19T22:32:20.271Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/23/bf/e6e4324238c17f9d9120a9d60aa99a7daaa21204c07fcd84e2ef03bb5fd1/ruff-0.15.1-py3-none-linux_armv6l.whl", hash = "sha256:b101ed7cf4615bda6ffe65bdb59f964e9f4a0d3f85cbf0e54f0ab76d7b90228a", size = 10367819, upload-time = "2026-02-12T23:09:03.598Z" }, - { url = "https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:939c995e9277e63ea632cc8d3fae17aa758526f49a9a850d2e7e758bfef46602", size = 10798618, upload-time = "2026-02-12T23:09:22.928Z" }, - { url = "https://files.pythonhosted.org/packages/5e/0f/1d0d88bc862624247d82c20c10d4c0f6bb2f346559d8af281674cf327f15/ruff-0.15.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1d83466455fdefe60b8d9c8df81d3c1bbb2115cede53549d3b522ce2bc703899", size = 10148518, upload-time = "2026-02-12T23:08:58.339Z" }, - { url = "https://files.pythonhosted.org/packages/f5/c8/291c49cefaa4a9248e986256df2ade7add79388fe179e0691be06fae6f37/ruff-0.15.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9457e3c3291024866222b96108ab2d8265b477e5b1534c7ddb1810904858d16", size = 10518811, upload-time = "2026-02-12T23:09:31.865Z" }, - { url = "https://files.pythonhosted.org/packages/c3/1a/f5707440e5ae43ffa5365cac8bbb91e9665f4a883f560893829cf16a606b/ruff-0.15.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92c92b003e9d4f7fbd33b1867bb15a1b785b1735069108dfc23821ba045b29bc", size = 10196169, upload-time = "2026-02-12T23:09:17.306Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ff/26ddc8c4da04c8fd3ee65a89c9fb99eaa5c30394269d424461467be2271f/ruff-0.15.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fe5c41ab43e3a06778844c586251eb5a510f67125427625f9eb2b9526535779", size = 10990491, upload-time = "2026-02-12T23:09:25.503Z" }, - { url = "https://files.pythonhosted.org/packages/fc/00/50920cb385b89413f7cdb4bb9bc8fc59c1b0f30028d8bccc294189a54955/ruff-0.15.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66a6dd6df4d80dc382c6484f8ce1bcceb55c32e9f27a8b94c32f6c7331bf14fb", size = 11843280, upload-time = "2026-02-12T23:09:19.88Z" }, - { url = "https://files.pythonhosted.org/packages/5d/6d/2f5cad8380caf5632a15460c323ae326f1e1a2b5b90a6ee7519017a017ca/ruff-0.15.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a4a42cbb8af0bda9bcd7606b064d7c0bc311a88d141d02f78920be6acb5aa83", size = 11274336, upload-time = "2026-02-12T23:09:14.907Z" }, - { url = "https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ab064052c31dddada35079901592dfba2e05f5b1e43af3954aafcbc1096a5b2", size = 11137288, upload-time = "2026-02-12T23:09:07.475Z" }, - { url = "https://files.pythonhosted.org/packages/cd/20/6f8d7d8f768c93b0382b33b9306b3b999918816da46537d5a61635514635/ruff-0.15.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:5631c940fe9fe91f817a4c2ea4e81f47bee3ca4aa646134a24374f3c19ad9454", size = 11070681, upload-time = "2026-02-12T23:08:55.43Z" }, - { url = "https://files.pythonhosted.org/packages/9a/67/d640ac76069f64cdea59dba02af2e00b1fa30e2103c7f8d049c0cff4cafd/ruff-0.15.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:68138a4ba184b4691ccdc39f7795c66b3c68160c586519e7e8444cf5a53e1b4c", size = 10486401, upload-time = "2026-02-12T23:09:27.927Z" }, - { url = "https://files.pythonhosted.org/packages/65/3d/e1429f64a3ff89297497916b88c32a5cc88eeca7e9c787072d0e7f1d3e1e/ruff-0.15.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:518f9af03bfc33c03bdb4cb63fabc935341bb7f54af500f92ac309ecfbba6330", size = 10197452, upload-time = "2026-02-12T23:09:12.147Z" }, - { url = "https://files.pythonhosted.org/packages/78/83/e2c3bade17dad63bf1e1c2ffaf11490603b760be149e1419b07049b36ef2/ruff-0.15.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:da79f4d6a826caaea95de0237a67e33b81e6ec2e25fc7e1993a4015dffca7c61", size = 10693900, upload-time = "2026-02-12T23:09:34.418Z" }, - { url = "https://files.pythonhosted.org/packages/a1/27/fdc0e11a813e6338e0706e8b39bb7a1d61ea5b36873b351acee7e524a72a/ruff-0.15.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3dd86dccb83cd7d4dcfac303ffc277e6048600dfc22e38158afa208e8bf94a1f", size = 11227302, upload-time = "2026-02-12T23:09:36.536Z" }, - { url = "https://files.pythonhosted.org/packages/f6/58/ac864a75067dcbd3b95be5ab4eb2b601d7fbc3d3d736a27e391a4f92a5c1/ruff-0.15.1-py3-none-win32.whl", hash = "sha256:660975d9cb49b5d5278b12b03bb9951d554543a90b74ed5d366b20e2c57c2098", size = 10462555, upload-time = "2026-02-12T23:09:29.899Z" }, - { url = "https://files.pythonhosted.org/packages/e0/5e/d4ccc8a27ecdb78116feac4935dfc39d1304536f4296168f91ed3ec00cd2/ruff-0.15.1-py3-none-win_amd64.whl", hash = "sha256:c820fef9dd5d4172a6570e5721704a96c6679b80cf7be41659ed439653f62336", size = 11599956, upload-time = "2026-02-12T23:09:01.157Z" }, - { url = "https://files.pythonhosted.org/packages/2a/07/5bda6a85b220c64c65686bc85bd0bbb23b29c62b3a9f9433fa55f17cda93/ruff-0.15.1-py3-none-win_arm64.whl", hash = "sha256:5ff7d5f0f88567850f45081fac8f4ec212be8d0b963e385c3f7d0d2eb4899416", size = 10874604, upload-time = "2026-02-12T23:09:05.515Z" }, + { url = "https://files.pythonhosted.org/packages/2f/70/3a4dc6d09b13cb3e695f28307e5d889b2e1a66b7af9c5e257e796695b0e6/ruff-0.15.2-py3-none-linux_armv6l.whl", hash = "sha256:120691a6fdae2f16d65435648160f5b81a9625288f75544dc40637436b5d3c0d", size = 10430565, upload-time = "2026-02-19T22:32:41.824Z" }, + { url = "https://files.pythonhosted.org/packages/71/0b/bb8457b56185ece1305c666dc895832946d24055be90692381c31d57466d/ruff-0.15.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a89056d831256099658b6bba4037ac6dd06f49d194199215befe2bb10457ea5e", size = 10820354, upload-time = "2026-02-19T22:32:07.366Z" }, + { url = "https://files.pythonhosted.org/packages/2d/c1/e0532d7f9c9e0b14c46f61b14afd563298b8b83f337b6789ddd987e46121/ruff-0.15.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e36dee3a64be0ebd23c86ffa3aa3fd3ac9a712ff295e192243f814a830b6bd87", size = 10170767, upload-time = "2026-02-19T22:32:13.188Z" }, + { url = "https://files.pythonhosted.org/packages/47/e8/da1aa341d3af017a21c7a62fb5ec31d4e7ad0a93ab80e3a508316efbcb23/ruff-0.15.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9fb47b6d9764677f8c0a193c0943ce9a05d6763523f132325af8a858eadc2b9", size = 10529591, upload-time = "2026-02-19T22:32:02.547Z" }, + { url = "https://files.pythonhosted.org/packages/93/74/184fbf38e9f3510231fbc5e437e808f0b48c42d1df9434b208821efcd8d6/ruff-0.15.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f376990f9d0d6442ea9014b19621d8f2aaf2b8e39fdbfc79220b7f0c596c9b80", size = 10260771, upload-time = "2026-02-19T22:32:36.938Z" }, + { url = "https://files.pythonhosted.org/packages/05/ac/605c20b8e059a0bc4b42360414baa4892ff278cec1c91fff4be0dceedefd/ruff-0.15.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2dcc987551952d73cbf5c88d9fdee815618d497e4df86cd4c4824cc59d5dd75f", size = 11045791, upload-time = "2026-02-19T22:32:31.642Z" }, + { url = "https://files.pythonhosted.org/packages/fd/52/db6e419908f45a894924d410ac77d64bdd98ff86901d833364251bd08e22/ruff-0.15.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:42a47fd785cbe8c01b9ff45031af875d101b040ad8f4de7bbb716487c74c9a77", size = 11879271, upload-time = "2026-02-19T22:32:29.305Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d8/7992b18f2008bdc9231d0f10b16df7dda964dbf639e2b8b4c1b4e91b83af/ruff-0.15.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbe9f49354866e575b4c6943856989f966421870e85cd2ac94dccb0a9dcb2fea", size = 11303707, upload-time = "2026-02-19T22:32:22.492Z" }, + { url = "https://files.pythonhosted.org/packages/d7/02/849b46184bcfdd4b64cde61752cc9a146c54759ed036edd11857e9b8443b/ruff-0.15.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7a672c82b5f9887576087d97be5ce439f04bbaf548ee987b92d3a7dede41d3a", size = 11149151, upload-time = "2026-02-19T22:32:44.234Z" }, + { url = "https://files.pythonhosted.org/packages/70/04/f5284e388bab60d1d3b99614a5a9aeb03e0f333847e2429bebd2aaa1feec/ruff-0.15.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:72ecc64f46f7019e2bcc3cdc05d4a7da958b629a5ab7033195e11a438403d956", size = 11091132, upload-time = "2026-02-19T22:32:24.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ae/88d844a21110e14d92cf73d57363fab59b727ebeabe78009b9ccb23500af/ruff-0.15.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:8dcf243b15b561c655c1ef2f2b0050e5d50db37fe90115507f6ff37d865dc8b4", size = 10504717, upload-time = "2026-02-19T22:32:26.75Z" }, + { url = "https://files.pythonhosted.org/packages/64/27/867076a6ada7f2b9c8292884ab44d08fd2ba71bd2b5364d4136f3cd537e1/ruff-0.15.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dab6941c862c05739774677c6273166d2510d254dac0695c0e3f5efa1b5585de", size = 10263122, upload-time = "2026-02-19T22:32:10.036Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ef/faf9321d550f8ebf0c6373696e70d1758e20ccdc3951ad7af00c0956be7c/ruff-0.15.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1b9164f57fc36058e9a6806eb92af185b0697c9fe4c7c52caa431c6554521e5c", size = 10735295, upload-time = "2026-02-19T22:32:39.227Z" }, + { url = "https://files.pythonhosted.org/packages/2f/55/e8089fec62e050ba84d71b70e7834b97709ca9b7aba10c1a0b196e493f97/ruff-0.15.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:80d24fcae24d42659db7e335b9e1531697a7102c19185b8dc4a028b952865fd8", size = 11241641, upload-time = "2026-02-19T22:32:34.617Z" }, + { url = "https://files.pythonhosted.org/packages/23/01/1c30526460f4d23222d0fabd5888868262fd0e2b71a00570ca26483cd993/ruff-0.15.2-py3-none-win32.whl", hash = "sha256:fd5ff9e5f519a7e1bd99cbe8daa324010a74f5e2ebc97c6242c08f26f3714f6f", size = 10507885, upload-time = "2026-02-19T22:32:15.635Z" }, + { url = "https://files.pythonhosted.org/packages/5c/10/3d18e3bbdf8fc50bbb4ac3cc45970aa5a9753c5cb51bf9ed9a3cd8b79fa3/ruff-0.15.2-py3-none-win_amd64.whl", hash = "sha256:d20014e3dfa400f3ff84830dfb5755ece2de45ab62ecea4af6b7262d0fb4f7c5", size = 11623725, upload-time = "2026-02-19T22:32:04.947Z" }, + { url = "https://files.pythonhosted.org/packages/6d/78/097c0798b1dab9f8affe73da9642bb4500e098cb27fd8dc9724816ac747b/ruff-0.15.2-py3-none-win_arm64.whl", hash = "sha256:cabddc5822acdc8f7b5527b36ceac55cc51eec7b1946e60181de8fe83ca8876e", size = 10941649, upload-time = "2026-02-19T22:32:18.108Z" }, ] [[package]] @@ -3334,22 +3325,19 @@ wheels = [ [[package]] name = "selenium" -version = "4.40.0" +version = "4.41.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "trio" }, - { name = "trio-typing" }, { name = "trio-websocket" }, - { name = "types-certifi" }, - { name = "types-urllib3" }, { name = "typing-extensions" }, { name = "urllib3", extra = ["socks"] }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/ef/a5727fa7b33d20d296322adf851b76072d8d3513e1b151969d3228437faf/selenium-4.40.0.tar.gz", hash = "sha256:a88f5905d88ad0b84991c2386ea39e2bbde6d6c334be38df5842318ba98eaa8c", size = 930444, upload-time = "2026-01-18T23:12:31.565Z" } +sdist = { url = "https://files.pythonhosted.org/packages/04/7c/133d00d6d013a17d3f39199f27f1a780ec2e95d7b9aa997dc1b8ac2e62a7/selenium-4.41.0.tar.gz", hash = "sha256:003e971f805231ad63e671783a2b91a299355d10cefb9de964c36ff3819115aa", size = 937872, upload-time = "2026-02-20T03:42:06.216Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/74/eb9d6540aca1911106fa0877b8e9ef24171bc18857937a6b0ffe0586c623/selenium-4.40.0-py3-none-any.whl", hash = "sha256:c8823fc02e2c771d9ad9a0cf899cee7de1a57a6697e3d0b91f67566129f2b729", size = 9608184, upload-time = "2026-01-18T23:12:29.435Z" }, + { url = "https://files.pythonhosted.org/packages/a8/d6/e4160989ef6b272779af6f3e5c43c3ba9be6687bdc21c68c3fb220e555b3/selenium-4.41.0-py3-none-any.whl", hash = "sha256:b8ccde8d2e7642221ca64af184a92c19eee6accf2e27f20f30472f5efae18eb1", size = 9532858, upload-time = "2026-02-20T03:42:03.218Z" }, ] [[package]] @@ -3530,23 +3518,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/bf/945d527ff706233636c73880b22c7c953f3faeb9d6c7e2e85bfbfd0134a0/trio-0.32.0-py3-none-any.whl", hash = "sha256:4ab65984ef8370b79a76659ec87aa3a30c5c7c83ff250b4de88c29a8ab6123c5", size = 512030, upload-time = "2025-10-31T07:18:15.885Z" }, ] -[[package]] -name = "trio-typing" -version = "0.10.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "async-generator" }, - { name = "importlib-metadata" }, - { name = "mypy-extensions" }, - { name = "packaging" }, - { name = "trio" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b5/74/a87aafa40ec3a37089148b859892cbe2eef08d132c816d58a60459be5337/trio-typing-0.10.0.tar.gz", hash = "sha256:065ee684296d52a8ab0e2374666301aec36ee5747ac0e7a61f230250f8907ac3", size = 38747, upload-time = "2023-12-01T02:54:55.508Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/89/ff/9bd795273eb14fac7f6a59d16cc8c4d0948a619a1193d375437c7f50f3eb/trio_typing-0.10.0-py3-none-any.whl", hash = "sha256:6d0e7ec9d837a2fe03591031a172533fbf4a1a95baf369edebfc51d5a49f0264", size = 42224, upload-time = "2023-12-01T02:54:54.1Z" }, -] - [[package]] name = "trio-websocket" version = "0.12.2" @@ -3619,15 +3590,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9a/bb/d43e5c75054e53efce310e79d63df0ac3f25e34c926be5dffb7d283fb2a8/typeguard-2.13.3-py3-none-any.whl", hash = "sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1", size = 17605, upload-time = "2021-12-10T21:09:37.844Z" }, ] -[[package]] -name = "types-certifi" -version = "2021.10.8.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/68/943c3aeaf14624712a0357c4a67814dba5cea36d194f5c764dad7959a00c/types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f", size = 2095, upload-time = "2022-06-09T15:19:05.244Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/63/2463d89481e811f007b0e1cd0a91e52e141b47f9de724d20db7b861dcfec/types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a", size = 2136, upload-time = "2022-06-09T15:19:03.127Z" }, -] - [[package]] name = "types-channels" version = "4.3.0.20250822" @@ -3721,15 +3683,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1c/12/709ea261f2bf91ef0a26a9eed20f2623227a8ed85610c1e54c5805692ecb/types_requests-2.32.4.20260107-py3-none-any.whl", hash = "sha256:b703fe72f8ce5b31ef031264fe9395cac8f46a04661a79f7ed31a80fb308730d", size = 20676, upload-time = "2026-01-07T03:20:52.929Z" }, ] -[[package]] -name = "types-urllib3" -version = "1.26.25.14" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/de/b9d7a68ad39092368fb21dd6194b362b98a1daeea5dcfef5e1adb5031c7e/types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f", size = 11239, upload-time = "2023-07-20T15:19:31.307Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/7b/3fc711b2efea5e85a7a0bbfe269ea944aa767bbba5ec52f9ee45d362ccf3/types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e", size = 15377, upload-time = "2023-07-20T15:19:30.379Z" }, -] - [[package]] name = "types-zxcvbn" version = "4.5.0.20250809" diff --git a/web/package-lock.json b/web/package-lock.json index 2a620566f0..acebeea73b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -26,8 +26,8 @@ "@goauthentik/api": "^2026.2.0-rc1-1770744803", "@goauthentik/core": "^1.0.0", "@goauthentik/esbuild-plugin-live-reload": "^1.4.0", - "@goauthentik/eslint-config": "^1.2.0", - "@goauthentik/prettier-config": "^3.3.1", + "@goauthentik/eslint-config": "^1.2.1", + "@goauthentik/prettier-config": "^3.4.0", "@goauthentik/tsconfig": "^1.0.5", "@hcaptcha/types": "^1.1.0", "@lit/context": "^1.1.6", @@ -77,7 +77,7 @@ "globals": "^17.3.0", "guacamole-common-js": "^1.5.0", "hastscript": "^9.0.1", - "knip": "^5.84.1", + "knip": "^5.85.0", "lex": "^2025.11.0", "lit": "^3.3.2", "lit-analyzer": "^2.0.3", @@ -91,6 +91,7 @@ "pino-pretty": "^13.1.2", "playwright": "^1.58.2", "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "pseudolocale": "^2.2.0", "rapidoc": "^9.3.8", "react": "^19.2.4", @@ -161,12 +162,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -175,29 +176,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -223,13 +224,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -239,12 +240,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -273,27 +274,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -330,25 +331,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -358,52 +359,52 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", - "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.29.0.tgz", + "integrity": "sha512-TgUkdp71C9pIbBcHudc+gXZnihEDOjUAmXO1VO4HHGES7QLZcShR0stfKIxLSNIYx2fqhmJChOjm/wkF8wv4gA==", "license": "MIT", "dependencies": { - "core-js-pure": "^3.43.0" + "core-js-pure": "^3.48.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -411,9 +412,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -424,9 +425,9 @@ } }, "node_modules/@borewit/text-codec": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", - "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.1.tgz", + "integrity": "sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==", "license": "MIT", "funding": { "type": "github", @@ -434,9 +435,9 @@ } }, "node_modules/@braintree/sanitize-url": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz", - "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz", + "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", "license": "MIT" }, "node_modules/@chevrotain/cst-dts-gen": { @@ -491,9 +492,9 @@ } }, "node_modules/@codemirror/commands": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.0.tgz", - "integrity": "sha512-2xUIc5mHXQzT16JnyOFkh8PvfeXuIut3pslWGfsGOhxP/lpgRm9HOl/mpzLErgt5mXDovqA0d11P21gofRLb9w==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.2.tgz", + "integrity": "sha512-vvX1fsih9HledO1c9zdotZYUZnE4xV0m6i3m25s5DIfXofuprk6cRcLUZvSk3CASUbwjQX21tOGbkY2BH8TpnQ==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", @@ -575,14 +576,14 @@ } }, "node_modules/@codemirror/language": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.3.tgz", - "integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.1.tgz", + "integrity": "sha512-Fa6xkSiuGKc8XC8Cn96T+TQHYj4ZZ7RdFmXA3i9xe/3hLHfwPZdM+dqfX0Cp0zQklBKhVD8Yzc8LS45rkqcwpQ==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", - "@lezer/common": "^1.1.0", + "@lezer/common": "^1.5.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" @@ -598,9 +599,9 @@ } }, "node_modules/@codemirror/lint": { - "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.2.tgz", - "integrity": "sha512-sv3DylBiIyi+xKwRCJAAsBZZZWo82shJ/RTMymLabAdtbkV5cSKwWDeCgtUq3v8flTaXS2y1kKkICuRYtUswyQ==", + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.4.tgz", + "integrity": "sha512-ABc9vJ8DEmvOWuH26P3i8FpMWPQkduD9Rvba5iwb6O3hxASgclm3T3krGo8NASXkHCidz6b++LWlzWIUfEPSWw==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -609,20 +610,20 @@ } }, "node_modules/@codemirror/search": { - "version": "6.5.11", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", - "integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.6.0.tgz", + "integrity": "sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", + "@codemirror/view": "^6.37.0", "crelt": "^1.0.5" } }, "node_modules/@codemirror/state": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", - "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.4.tgz", + "integrity": "sha512-8y7xqG/hpB53l25CIoit9/ngxdfoG+fx+V3SHBrinnhOtLvKHRyAJJuHzkWrR4YXXLX8eXBsejgAAxHUOdW1yw==", "license": "MIT", "dependencies": { "@marijn/find-cluster-break": "^1.0.0" @@ -641,9 +642,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.39.3", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.3.tgz", - "integrity": "sha512-ZR32LYnPMpf7XZcrYJpSrHJUHNZPTj73/amTtZLhAwzYhSKiDI2OZmCiXbTRvxL1T8X7QTHnCG+KfnRJvH/QsA==", + "version": "6.39.14", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.14.tgz", + "integrity": "sha512-WJcvgHm/6Q7dvGT0YFv/6PSkoc36QlR0VCESS6x9tGsnF1lWLmmYxOgX3HH6v8fo6AvSLgpcs+H0Olre6MKXlg==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.5.0", @@ -699,9 +700,9 @@ } }, "node_modules/@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "license": "MIT", "optional": true, "dependencies": { @@ -710,9 +711,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "license": "MIT", "optional": true, "dependencies": { @@ -1146,9 +1147,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" @@ -1434,9 +1435,9 @@ } }, "node_modules/@goauthentik/eslint-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@goauthentik/eslint-config/-/eslint-config-1.2.0.tgz", - "integrity": "sha512-OHI/VTc34rZ4rLihuiXvrwsnBONXzikXPUUqGninKFZviOzIosED76NfgAh8PFS0G2G5XhxKgE/X3y66jmfBSA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@goauthentik/eslint-config/-/eslint-config-1.2.1.tgz", + "integrity": "sha512-Il47UJolIPG2j671iV64QcX5DCScorm70m0rjr7wsGcSDvc/CflD04fHKwXH4Ud+Hs5khJD4LQp2usTZT/Bi/g==", "license": "MIT", "dependencies": { "eslint": "^9.39.1", @@ -1448,7 +1449,7 @@ }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", @@ -1466,20 +1467,20 @@ } }, "node_modules/@goauthentik/prettier-config": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@goauthentik/prettier-config/-/prettier-config-3.3.1.tgz", - "integrity": "sha512-ZfwokcGQkZmRwhDrNu+PUgFVV/dyx8B/Utu1EOKMWNV9rEnOLqrlC7L5Zwj5aCNezYewiodOL4zvAUifnArsqw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@goauthentik/prettier-config/-/prettier-config-3.4.0.tgz", + "integrity": "sha512-00SnyvdfHhoifuqlQlS+Beyl0aFUUBWShI4Ci+QxFS1pkiyl1HnHbr20QRSR7DPqPmRMVAYmsr1Yv6/1heNhIg==", "license": "MIT", "dependencies": { "format-imports": "^4.0.8" }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { - "prettier": "^3.7.4", - "prettier-plugin-packagejson": "^2.5.20" + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0" } }, "node_modules/@goauthentik/tsconfig": { @@ -1567,27 +1568,6 @@ "mlly": "^1.8.0" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1640,15 +1620,15 @@ "license": "MIT" }, "node_modules/@lezer/common": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.4.0.tgz", - "integrity": "sha512-DVeMRoGrgn/k45oQNu189BoW4SZwgZFzJ1+1TV5j2NJ/KFC83oa/enRqZSGshyeMk5cPWMhsKs9nx+8o0unwGg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.1.tgz", + "integrity": "sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==", "license": "MIT" }, "node_modules/@lezer/css": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.0.tgz", - "integrity": "sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.1.tgz", + "integrity": "sha512-PYAKeUVBo3HFThruRyp/iK91SwiZJnzXh8QzkQlwijB5y+N5iB28+iLk78o2zmKqqV0uolNhCwFqB8LA7b0Svg==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -1666,9 +1646,9 @@ } }, "node_modules/@lezer/html": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.12.tgz", - "integrity": "sha512-RJ7eRWdaJe3bsiiLLHjCFT1JMk8m1YP9kaUbvu2rMLEoOnke9mcTVDyfOslsln0LtujdWespjJ39w6zo+RsQYw==", + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.13.tgz", + "integrity": "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -1688,9 +1668,9 @@ } }, "node_modules/@lezer/lr": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.5.tgz", - "integrity": "sha512-/YTRKP5yPPSo1xImYQk7AZZMAgap0kegzqCSYHjAL9x1AZ0ZQW+IpcEzMKagCsbTsLnVeWkxYrCNeXG8xEPrjg==", + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.8.tgz", + "integrity": "sha512-bPWa0Pgx69ylNlMlPvBPryqeLYQjyJjqPx+Aupm5zydLIF3NE+6MMLT8Yi23Bd9cif9VS00aUebn+6fDIGBcDA==", "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" @@ -1719,9 +1699,9 @@ } }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.0.tgz", - "integrity": "sha512-HLomZXMmrCFHSRKESF5vklAKsDY7/fsT/ZhqCu3V0UoW/Qbv8wxmO4W9bx4KnCCF2Zak4yuk+AGraK/bPmI4kA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", + "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==", "license": "BSD-3-Clause" }, "node_modules/@lit/context": { @@ -2209,15 +2189,19 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.0.tgz", - "integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", "license": "MIT", "optional": true, "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" } }, "node_modules/@nodelib/fs.scandir": { @@ -2286,9 +2270,9 @@ } }, "node_modules/@oxc-resolver/binding-android-arm-eabi": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.15.0.tgz", - "integrity": "sha512-Q+lWuFfq7whNelNJIP1dhXaVz4zO9Tu77GcQHyxDWh3MaCoO2Bisphgzmsh4ZoUe2zIchQh6OvQL99GlWHg9Tw==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.17.1.tgz", + "integrity": "sha512-+VuZyMYYaap5uDAU1xDU3Kul0FekLqpBS8kI5JozlWfYQKnc/HsZg2gHPkQrj0SC9lt74WMNCfOzZZJlYXSdEQ==", "cpu": [ "arm" ], @@ -2299,9 +2283,9 @@ ] }, "node_modules/@oxc-resolver/binding-android-arm64": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.15.0.tgz", - "integrity": "sha512-vbdBttesHR0W1oJaxgWVTboyMUuu+VnPsHXJ6jrXf4czELzB6GIg5DrmlyhAmFBhjwov+yJH/DfTnHS+2sDgOw==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.17.1.tgz", + "integrity": "sha512-YlDDTjvOEKhom/cRSVsXsMVeXVIAM9PJ/x2mfe08rfuS0iIEfJd8PngKbEIhG72WPxleUa+vkEZj9ncmC14z3Q==", "cpu": [ "arm64" ], @@ -2312,9 +2296,9 @@ ] }, "node_modules/@oxc-resolver/binding-darwin-arm64": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.15.0.tgz", - "integrity": "sha512-R67lsOe1UzNjqVBCwCZX1rlItTsj/cVtBw4Uy19CvTicqEWvwaTn8t34zLD75LQwDDPCY3C8n7NbD+LIdw+ZoA==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.17.1.tgz", + "integrity": "sha512-HOYYLSY4JDk14YkXaz/ApgJYhgDP4KsG8EZpgpOxdszGW9HmIMMY/vXqVKYW74dSH+GQkIXYxBrEh3nv+XODVg==", "cpu": [ "arm64" ], @@ -2325,9 +2309,9 @@ ] }, "node_modules/@oxc-resolver/binding-darwin-x64": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.15.0.tgz", - "integrity": "sha512-77mya5F8WV0EtCxI0MlVZcqkYlaQpfNwl/tZlfg4jRsoLpFbaTeWv75hFm6TE84WULVlJtSgvf7DhoWBxp9+ZQ==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.17.1.tgz", + "integrity": "sha512-JHPJbsa5HvPq2/RIdtGlqfaG9zV2WmgvHrKTYmlW0L5esqtKCBuetFudXTBzkNcyD69kSZLzH92AzTr6vFHMFg==", "cpu": [ "x64" ], @@ -2338,9 +2322,9 @@ ] }, "node_modules/@oxc-resolver/binding-freebsd-x64": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.15.0.tgz", - "integrity": "sha512-X1Sz7m5PC+6D3KWIDXMUtux+0Imj6HfHGdBStSvgdI60OravzI1t83eyn6eN0LPTrynuPrUgjk7tOnOsBzSWHw==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.17.1.tgz", + "integrity": "sha512-UD1FRC8j8xZstFXYsXwQkNmmg7vUbee006IqxokwDUUA+xEgKZDpLhBEiVKM08Urb+bn7Q0gn6M1pyNR0ng5mg==", "cpu": [ "x64" ], @@ -2351,9 +2335,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-arm-gnueabihf": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.15.0.tgz", - "integrity": "sha512-L1x/wCaIRre+18I4cH/lTqSAymlV0k4HqfSYNNuI9oeL28Ks86lI6O5VfYL6sxxWYgjuWB98gNGo7tq7d4GarQ==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.17.1.tgz", + "integrity": "sha512-wFWC1wyf2ROFWTxK5x0Enm++DSof3EBQ/ypyAesMDLiYxOOASDoMOZG1ylWUnlKaCt5W7eNOWOzABpdfFf/ssA==", "cpu": [ "arm" ], @@ -2364,9 +2348,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-arm-musleabihf": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.15.0.tgz", - "integrity": "sha512-abGXd/zMGa0tH8nKlAXdOnRy4G7jZmkU0J85kMKWns161bxIgGn/j7zxqh3DKEW98wAzzU9GofZMJ0P5YCVPVw==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.17.1.tgz", + "integrity": "sha512-k/hUif0GEBk/csSqCfTPXb8AAVs1NNWCa/skBghvNbTtORcWfOVqJ3mM+2pE189+enRm4UnryLREu5ysI0kXEQ==", "cpu": [ "arm" ], @@ -2377,9 +2361,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-arm64-gnu": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.15.0.tgz", - "integrity": "sha512-SVjjjtMW66Mza76PBGJLqB0KKyFTBnxmtDXLJPbL6ZPGSctcXVmujz7/WAc0rb9m2oV0cHQTtVjnq6orQnI/jg==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.17.1.tgz", + "integrity": "sha512-Cwm6A071ww60QouJ9LoHAwBgEoZzHQ0Qaqk2E7WLfBdiQN9mLXIDhnrpn04hlRElRPhLiu/dtg+o5PPLvaINXQ==", "cpu": [ "arm64" ], @@ -2390,9 +2374,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-arm64-musl": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.15.0.tgz", - "integrity": "sha512-JDv2/AycPF2qgzEiDeMJCcSzKNDm3KxNg0KKWipoKEMDFqfM7LxNwwSVyAOGmrYlE4l3dg290hOMsr9xG7jv9g==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.17.1.tgz", + "integrity": "sha512-+hwlE2v3m0r3sk93SchJL1uyaKcPjf+NGO/TD2DZUDo+chXx7FfaEj0nUMewigSt7oZ2sQN9Z4NJOtUa75HE5Q==", "cpu": [ "arm64" ], @@ -2403,9 +2387,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-ppc64-gnu": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.15.0.tgz", - "integrity": "sha512-zbu9FhvBLW4KJxo7ElFvZWbSt4vP685Qc/Gyk/Ns3g2gR9qh2qWXouH8PWySy+Ko/qJ42+HJCLg+ZNcxikERfg==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.17.1.tgz", + "integrity": "sha512-bO+rsaE5Ox8cFyeL5Ct5tzot1TnQpFa/Wmu5k+hqBYSH2dNVDGoi0NizBN5QV8kOIC6O5MZr81UG4yW/2FyDTA==", "cpu": [ "ppc64" ], @@ -2416,9 +2400,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-riscv64-gnu": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.15.0.tgz", - "integrity": "sha512-Kfleehe6B09C2qCnyIU01xLFqFXCHI4ylzkicfX/89j+gNHh9xyNdpEvit88Kq6i5tTGdavVnM6DQfOE2qNtlg==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.17.1.tgz", + "integrity": "sha512-B/P+hxKQ1oX4YstI9Lyh4PGzqB87Ddqj/A4iyRBbPdXTcxa+WW3oRLx1CsJKLmHPdDk461Hmbghq1Bm3pl+8Aw==", "cpu": [ "riscv64" ], @@ -2429,9 +2413,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-riscv64-musl": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.15.0.tgz", - "integrity": "sha512-J7LPiEt27Tpm8P+qURDwNc8q45+n+mWgyys4/V6r5A8v5gDentHRGUx3iVk5NxdKhgoGulrzQocPTZVosq25Eg==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.17.1.tgz", + "integrity": "sha512-ulp2H3bFXzd/th2maH+QNKj5qgOhJ3v9Yspdf1svTw3CDOuuTl6sRKsWQ7MUw0vnkSNvQndtflBwVXgzZvURsQ==", "cpu": [ "riscv64" ], @@ -2442,9 +2426,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-s390x-gnu": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.15.0.tgz", - "integrity": "sha512-+8/d2tAScPjVJNyqa7GPGnqleTB/XW9dZJQ2D/oIM3wpH3TG+DaFEXBbk4QFJ9K9AUGBhvQvWU2mQyhK/yYn3Q==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.17.1.tgz", + "integrity": "sha512-LAXYVe3rKk09Zo9YKF2ZLBcH8sz8Oj+JIyiUxiHtq0hiYLMsN6dOpCf2hzQEjPAmsSEA/hdC1PVKeXo+oma8mQ==", "cpu": [ "s390x" ], @@ -2455,9 +2439,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-x64-gnu": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.15.0.tgz", - "integrity": "sha512-xtvSzH7Nr5MCZI2FKImmOdTl9kzuQ51RPyLh451tvD2qnkg3BaqI9Ox78bTk57YJhlXPuxWSOL5aZhKAc9J6qg==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.17.1.tgz", + "integrity": "sha512-3RAhxipMKE8RCSPn7O//sj440i+cYTgYbapLeOoDvQEt6R1QcJjTsFgI4iz99FhVj3YbPxlZmcLB5VW+ipyRTA==", "cpu": [ "x64" ], @@ -2468,9 +2452,9 @@ ] }, "node_modules/@oxc-resolver/binding-linux-x64-musl": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.15.0.tgz", - "integrity": "sha512-14YL1zuXj06+/tqsuUZuzL0T425WA/I4nSVN1kBXeC5WHxem6lQ+2HGvG+crjeJEqHgZUT62YIgj88W+8E7eyg==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.17.1.tgz", + "integrity": "sha512-wpjMEubGU8r9VjZTLdZR3aPHaBqTl8Jl8F4DBbgNoZ+yhkhQD1/MGvY70v2TLnAI6kAHSvcqgfvaqKDa2iWsPQ==", "cpu": [ "x64" ], @@ -2481,9 +2465,9 @@ ] }, "node_modules/@oxc-resolver/binding-openharmony-arm64": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.15.0.tgz", - "integrity": "sha512-/7Qli+1Wk93coxnrQaU8ySlICYN8HsgyIrzqjgIkQEpI//9eUeaeIHZptNl2fMvBGeXa7k2QgLbRNaBRgpnvMw==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.17.1.tgz", + "integrity": "sha512-XIE4w17RYAVIgx+9Gs3deTREq5tsmalbatYOOBGNdH7n0DfTE600c7wYXsp7ANc3BPDXsInnOzXDEPCvO1F6cg==", "cpu": [ "arm64" ], @@ -2494,25 +2478,25 @@ ] }, "node_modules/@oxc-resolver/binding-wasm32-wasi": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.15.0.tgz", - "integrity": "sha512-q5rn2eIMQLuc/AVGR2rQKb2EVlgreATGG8xXg8f4XbbYCVgpxaq+dgMbiPStyNywW1MH8VU2T09UEm30UtOQvg==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.17.1.tgz", + "integrity": "sha512-Lqi5BlHX3zS4bpSOkIbOKVf7DIk6Gvmdifr2OuOI58eUUyP944M8/OyaB09cNpPy9Vukj7nmmhOzj8pwLgAkIg==", "cpu": [ "wasm32" ], "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.0" + "@napi-rs/wasm-runtime": "^1.1.1" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@oxc-resolver/binding-win32-arm64-msvc": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.15.0.tgz", - "integrity": "sha512-yCAh2RWjU/8wWTxQDgGPgzV9QBv0/Ojb5ej1c/58iOjyTuy/J1ZQtYi2SpULjKmwIxLJdTiCHpMilauWimE31w==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.17.1.tgz", + "integrity": "sha512-l6lTcLBQVj1HNquFpXSsrkCIM8X5Hlng5YNQJrg00z/KyovvDV5l3OFhoRyZ+aLBQ74zUnMRaJZC7xcBnHyeNg==", "cpu": [ "arm64" ], @@ -2523,9 +2507,9 @@ ] }, "node_modules/@oxc-resolver/binding-win32-ia32-msvc": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.15.0.tgz", - "integrity": "sha512-lmXKb6lvA6M6QIbtYfgjd+AryJqExZVSY2bfECC18OPu7Lv1mHFF171Mai5l9hG3r4IhHPPIwT10EHoilSCYeA==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.17.1.tgz", + "integrity": "sha512-VTzVtfnCCsU/6GgvursWoyZrhe3Gj/RyXzDWmh4/U1Y3IW0u1FZbp+hCIlBL16pRPbDc5YvXVtCOnA41QOrOoQ==", "cpu": [ "ia32" ], @@ -2536,9 +2520,9 @@ ] }, "node_modules/@oxc-resolver/binding-win32-x64-msvc": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.15.0.tgz", - "integrity": "sha512-HZsfne0s/tGOcJK9ZdTGxsNU2P/dH0Shf0jqrPvsC6wX0Wk+6AyhSpHFLQCnLOuFQiHHU0ePfM8iYsoJb5hHpQ==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.17.1.tgz", + "integrity": "sha512-jRPVU+6/12baj87q2+UGRh30FBVBzqKdJ7rP/mSqiL1kpNQB9yZ1j0+m3sru1m+C8hiFK7lBFwjUtYUBI7+UpQ==", "cpu": [ "x64" ], @@ -2604,19 +2588,6 @@ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", "license": "MIT" }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, "node_modules/@playwright/test": { "version": "1.58.2", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", @@ -3351,13 +3322,13 @@ } }, "node_modules/@swagger-api/apidom-ast": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.1.tgz", - "integrity": "sha512-inTGo5b49XkHs/Vq48VafXnCzZrwwE+KTNcdfMybdm3RQTbfVFbvSUrS54WoHoaSbef1GsB9rnS/oXoXfNr72g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.5.1.tgz", + "integrity": "sha512-BtaUaWXE0zzosuy6d1UFZp8wQZlqXapolTNF5f/3kzzZPLdDDWZeFyvvGww3Jt0Bwcw5rzavqD/lrTZp3j2qTQ==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-error": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3365,14 +3336,14 @@ } }, "node_modules/@swagger-api/apidom-core": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.1.tgz", - "integrity": "sha512-biA53spAUphP2IMJSPdqcRFjvLbvLspv1mJQrZpePUq4XGxGOKOHof7dUc1bXJuYvl6OOxOwnVniv5oK2Wyblw==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.5.1.tgz", + "integrity": "sha512-vjP+HhbIN2D+Z8qsq57Ab2z0CpxCTD177Zd8mbUEKpOFYtc9qoizv6bAXTmhZGfVLxBsw+iGzFVH/z6DvuD3ag==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ast": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", "@types/ramda": "~0.30.0", "minim": "~0.23.8", "ramda": "~0.30.0", @@ -3382,37 +3353,37 @@ } }, "node_modules/@swagger-api/apidom-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.1.tgz", - "integrity": "sha512-uwduVNLg9a2qA+Pl4b8gPERH6Xhvm/Ilv4iKMUOpUicLwNmYjrlcRsyYxLvFiNlTghm70xuI3hap1iaXbrer4A==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.5.1.tgz", + "integrity": "sha512-R0BSvVgKVNNxnC8S4uJVf4JwWCFNI1ktpLbML6UbzXBPquHfM0gjv+WQgKApMAYw809rtaVIF9ADoUtL/c6+uQ==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7" } }, "node_modules/@swagger-api/apidom-json-pointer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.1.tgz", - "integrity": "sha512-Dgxd9hl1AiCIM1b5f4dSfmP+rGtASUso8Lw51+az605hqrohgykxt8voiQtaJxKySWYbS1J9Vz2xjLwrEmfTKg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.5.1.tgz", + "integrity": "sha512-EFJzHgHbs5AIPSRowuc02WjbQY5bbFvijQuFIkHSKCsPOQ8VX+h8xOe3dxRjgnCAJ33nk+VOYiaZTy48BK2bfw==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", "@swaggerexpert/json-pointer": "^2.10.1" } }, "node_modules/@swagger-api/apidom-ns-api-design-systems": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.1.tgz", - "integrity": "sha512-frRfiLjcufeBgqnHQOcXgl6dnvcIdP4+18pWb+qT3N+dv87geJBk1CbXo6RjW9AEQX/7BtvWYkfSMLrh8q2TZA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.5.1.tgz", + "integrity": "sha512-YQJdNb6TJQ8lNa1o8ThfT0P7DY/cGhnI4Se8YiGIsdTPSBOiPtTY72+lfsM1O+3bOeAy7n/MvWRXrJuiKGf7Pg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", + "@swagger-api/apidom-ns-openapi-3-1": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3420,15 +3391,15 @@ } }, "node_modules/@swagger-api/apidom-ns-arazzo-1": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.0.1.tgz", - "integrity": "sha512-gJJY0vmi3TJtlCYNPsZahQnP6GA9GtJX1a9jEUASaYYxz6cBBfY39y8C5tQTo0Jvc7QEff/UZ8iGX0kltcwlzA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.5.1.tgz", + "integrity": "sha512-hC/AD9TG3DMex+UAlYmg3fKcbmgrLGyZ3Fm2KqJfaC3CkiYE6SdVtfCBK9mPOcArPVa2RfzSgU4aRYzClDmvNQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-json-schema-2020-12": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3436,15 +3407,15 @@ } }, "node_modules/@swagger-api/apidom-ns-asyncapi-2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.1.tgz", - "integrity": "sha512-d8HBr2EVB2gK8FKrxj0Wsss6Qeael//WxnNv1ZtmNeCe1l83iC9RO/hjjq/OFob94ZTOfpPRNwGqZBd4tMxOnA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.5.1.tgz", + "integrity": "sha512-9k97IdvSde7OaGwE8opX9psjmhsRYkuKm5eCmM3n6WOZkwdJFD73bCtYVqCuDCVRzJwT9xMras4fVG5Zn1Vhcw==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3452,15 +3423,15 @@ } }, "node_modules/@swagger-api/apidom-ns-asyncapi-3": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-3/-/apidom-ns-asyncapi-3-1.0.1.tgz", - "integrity": "sha512-vonGt1ScMlT+GbbSGa/+oe874Zl7NVylX3ZoMAhMkRyqu49vmWB6dXUcWw6ZsZu2GxVphjNTm+D52Ikw8UAMWg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-3/-/apidom-ns-asyncapi-3-1.5.1.tgz", + "integrity": "sha512-EQGnSP93yB8ZDhaESqtavnynySH/hjkdkb4tInRoKYN3j3WU+in6Bvxwq2qCkyH9ACaSbW2HFlT2qIRBcLW+oA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-asyncapi-2": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3468,15 +3439,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-2019-09": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.0.1.tgz", - "integrity": "sha512-wtVkFhkM7a0ybjAR0HCQyXzAwIWWcaoHmXiZGAS7wTpI2sDMLwCrBXBuISa7BoRkG4ieA2odDF5Eac73knWUbA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.5.1.tgz", + "integrity": "sha512-peszjtx5OPUYsvl/t4XTRVt0vY0WfR7jBpcmq3/ioqAaddhfbnb4i3PPWWhAIzzeKAiFHc/m4E5HCMMdDF2wDA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", - "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3484,15 +3455,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-2020-12": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.0.1.tgz", - "integrity": "sha512-YBE5kYKARFWi+8HAiUVJxF9WpkdlW2ebH6K4oZt6mnOWROkPS+30Kjjxlz+Q994KhSZGBHKK0d3TU11xXUqyAQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.5.1.tgz", + "integrity": "sha512-4L6X5SxkXCD4W7O0KI8e3kc0Q8TkVg0kPSNOWYosGAHOk9g5KyMIbACDjZhJ2q+uPlyLFCLAPY93aOVaVZ+nsA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", - "@swagger-api/apidom-ns-json-schema-2019-09": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", + "@swagger-api/apidom-ns-json-schema-2019-09": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3500,14 +3471,14 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.1.tgz", - "integrity": "sha512-OR3D7EXVq2H07n9uPKpNCikKC5857Pggbi1g5rt9X0znaUgxTtkYu8unPfbEcjQgFVglzIwqbGhMnahUFXYaTA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.5.1.tgz", + "integrity": "sha512-vdc+vVLwf4JwDeK4mPfZqyVHG5gJc766GkqH522VRTh1XWJPlW674lIJuhqo5HLzXLm4zV4alI/QJMR3fRWFIQ==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.1", - "@swagger-api/apidom-core": "^1.0.1", + "@swagger-api/apidom-ast": "^1.5.1", + "@swagger-api/apidom-core": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3515,15 +3486,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.1.tgz", - "integrity": "sha512-J9/aSU9/YwiRU/avkSN1APYPs9sYVyrzaMpfq7XIY8xMFC4buwrPzCymrqshSOLbn1Qzr9Ruavcqx5Bwt0EuRg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.5.1.tgz", + "integrity": "sha512-sNRDQybpzl16HwktI0by0nWj85Rpmx/K1Qc6e4uQRmpPeozJTi8hAdyxw9ays1WJI+Bao9YEz+xJNAqNIE5xlg==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3531,15 +3502,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.1.tgz", - "integrity": "sha512-b8pNff3epzweot5Edoa05mM/jBMgvjqajvNTOvOa8SNPWHWLjSJNYkBT2jI3BnFqqEMMo7litEfKnblblFuDtQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.5.1.tgz", + "integrity": "sha512-hdgYjOzZCN866F/BP5tuReZmVTZF2NTNykOwILhR/uoDR2YvgvwvHbnifsywLhreZOkhf3HIbfvCkQnIopkluw==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", - "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", + "@swagger-api/apidom-ns-json-schema-draft-6": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3547,16 +3518,16 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.1.tgz", - "integrity": "sha512-XZ1xHHvsZZaNNHkqk0KWggZxMM2Av5eJdjbxwLij7TFWjodYVJAMZLyWG15llDBjnTXQYtpFIVLGjndf2oC7Xg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.5.1.tgz", + "integrity": "sha512-KnFYGqvlHBeczLs5P1R1dCfDGW3O7LaLu/AmFLRvt0ya8AXwkF4gd5gHsXKn0lXBeAc3kEwHAValtg6WNR8keQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3564,15 +3535,15 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-0": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.1.tgz", - "integrity": "sha512-BAypZcl8NO+jYpAmAXJVCLVe4f+v3ZoZN21Oxu03N2lsv+qz/P9vpl+6C0dOfta6X8fACkuGr4KIGU6leUPpJg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.5.1.tgz", + "integrity": "sha512-n3KaIh7dVkINDC7g8osBpxvYCZnsDHHg8rOvOYy1kKlZHi7xd3Ui83rDnKCsOsdsKlFdIdd6isBcBEBQazgwPA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3580,17 +3551,17 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-1": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.1.tgz", - "integrity": "sha512-nIkgyIW8XTV+zjzLKxP1JaA/lpgmtsRBLshh1mL+Fspd+RYAhyMpRDRNvBOmkIhva9Dst9LNYyMjBP9ssfKUwg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.5.1.tgz", + "integrity": "sha512-rJPZH969I67snT6ux3Dve5QXaHCfm/phv20kAojR50fW5FPbR+nn4a9FIi59F3OrD69zQascKUrJb24ieFVHIw==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.1", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-json-pointer": "^1.0.1", - "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.1", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.1", + "@swagger-api/apidom-ast": "^1.5.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-json-pointer": "^1.5.1", + "@swagger-api/apidom-ns-json-schema-2020-12": "^1.5.1", + "@swagger-api/apidom-ns-openapi-3-0": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3598,144 +3569,144 @@ } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.1.tgz", - "integrity": "sha512-Udj6vJ6Au+fcqZJZtgHlUi1Y/ImLHo8fx4ICSas7hewA7z1/eZ7Y3Yp8YSGZ7ZwqXHS6nnm5fBHws0DgAplnDA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.5.1.tgz", + "integrity": "sha512-XomzUhgy+w1toxJMjN1mXKITl88QPiug4e9eyNWSEQkoCD1ko0MEVZYA6/6mjwlTW2DQ4qg+XF+TFmOPlkQWeA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.1", - "@swagger-api/apidom-parser-adapter-json": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-api-design-systems": "^1.5.1", + "@swagger-api/apidom-parser-adapter-json": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.1.tgz", - "integrity": "sha512-YZ2IuTEzUGXRF8oFuHHGZpM15hRnSI/rZnweGT984bX53HXi1NFpZdNxOz49vmkhFz6XJgxRXp1R3EDN/98urg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.5.1.tgz", + "integrity": "sha512-pfa+iQwMLhDcE4CYi4pUHraAOUUo2DNeRRWZGhregWZoZPo5gVZ8w9NwSowLE19zf922A9RfzBkouI969j27QQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.1", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-api-design-systems": "^1.5.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-arazzo-json-1": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.0.1.tgz", - "integrity": "sha512-Re8EcgYOITyTXvGeJyE/4ZNsprkSrkXVmHzyM9hqTWoMpDILnqOtbrjc0YwLkbe9awBkUMWJ51CEFLYALSYfDA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.5.1.tgz", + "integrity": "sha512-pJrlCospvJDvh8mqLjyb0ILRPuD3rYaZlTRs340W2ADgn6m+ClrDBQwXCod5QrKmcjYqAhtLZXwnwSuZStaj+Q==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-arazzo-1": "^1.0.1", - "@swagger-api/apidom-parser-adapter-json": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-arazzo-1": "^1.5.1", + "@swagger-api/apidom-parser-adapter-json": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-arazzo-yaml-1": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.0.1.tgz", - "integrity": "sha512-++BB47Vf9sarAf+YCvlt9V2OqFd8O5AZMr/xXBKTls4SzwpUcLf4oIQJpHcr/rl+bgI4CKwxKXHvnhg2vhEVmg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.5.1.tgz", + "integrity": "sha512-Q/EZ9BGnBlj4TiEQ+Q4k/pdgZ/Le+/ppZSfcc22umnKujDNyBLGB5L0sSfTOEjANRYNo+UtPYnkctwTkJu3/ZQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-arazzo-1": "^1.0.1", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-arazzo-1": "^1.5.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.1.tgz", - "integrity": "sha512-dd8djfZy2utM1xO7oxDPB/dmExSFgEA2l71gjHaKmhJw7O5NB8E/1663w9lD4NElj2Ft8kuGLLDsqyKNhXW/9w==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.5.1.tgz", + "integrity": "sha512-GRM5iCz9eRMiTSV4iAlpuWM6q3SBndSmEMhgjDuclWiC3HF78CCNuT9KwYNFMAx1bEe5Fr8c8Gs8KNckdeCU4g==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.1", - "@swagger-api/apidom-parser-adapter-json": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-asyncapi-2": "^1.5.1", + "@swagger-api/apidom-parser-adapter-json": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-3": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-3/-/apidom-parser-adapter-asyncapi-json-3-1.0.1.tgz", - "integrity": "sha512-qD+gbnSnc9PlZ8b45knyWihrWOMKhnAHDnvzRllX+NiyM3XdBJ7B6yLn8dl6gZuKjTBHoMORLEefoTGvmskneA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-3/-/apidom-parser-adapter-asyncapi-json-3-1.5.1.tgz", + "integrity": "sha512-TCMm7Ce9PwzTQw2SnRYR0smCnrE6bmGbVsjqVz4d+tQy8h6ZNkfjAqOtBasKr/KpEywpLCRgWC2YRNAHGKLndw==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-asyncapi-3": "^1.0.1", - "@swagger-api/apidom-parser-adapter-json": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-asyncapi-3": "^1.5.1", + "@swagger-api/apidom-parser-adapter-json": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.1.tgz", - "integrity": "sha512-G5RS0pCFCOIsFflKvWbH+DblunmcAdVi5X9ETTTkGLa1IF5s0DIdjU46WxJAzEQpCXOvmUhpDspjaAYXxGTYpQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.5.1.tgz", + "integrity": "sha512-sZQ/7kOs7+apKq22uyhF3jmhPTzt7y8Xy8cGPIp1b0PnQhbm7rT1/rrOl9qh9MqCdUip2Dx0Y+WTyyET0faZ4g==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.1", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-asyncapi-2": "^1.5.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3/-/apidom-parser-adapter-asyncapi-yaml-3-1.0.1.tgz", - "integrity": "sha512-hzgUkTsuKYraY0NXQlaYe/j1/LkvNF/8r30Iz7/1B27BYLOKIwHoFGN6jUa8UBA9/0qSp8QPzSwVWFLrgNiqJQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3/-/apidom-parser-adapter-asyncapi-yaml-3-1.5.1.tgz", + "integrity": "sha512-bYoyX/qP9SmGF6DKohPO1Fguz8/8uHF8ieSo04jrQblHbEeDVcTBG6oTFVNcpG2ZxnqaoNF2/KY4/fUSKMH/4g==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-asyncapi-3": "^1.0.1", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-asyncapi-3": "^1.5.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-json": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.1.tgz", - "integrity": "sha512-95V2aMBGZ76rYXcod/PCJpVEMK+9mPk/gDgsDKEq2ka+YVMTtR1tUkPUIBmWlNC+brh5reks1QocyQL8B4f3TQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.5.1.tgz", + "integrity": "sha512-zYXchiHC5wsvCImr4lgrhwuLWDH3EDz4L4KJbp8ltO1Y+3PRwPYNruKVppHdIC6d+eTBy4e110a4629rl6LQTg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.1", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ast": "^1.5.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -3745,112 +3716,112 @@ } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.1.tgz", - "integrity": "sha512-Gp02eAA32SN+hAgVDc82xpkUthHn0oAdLdri5g3co4pa45XVRsBSHS3L/H3NEbhDJ8wpXjcg+FLs/OAwcm42yw==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.5.1.tgz", + "integrity": "sha512-05SXfF5ate18FKlPBg4YEfyS6Sr4lmu+gppxMQ202x172ejBQjAU37iZeSKfKw1egXngAmm6OZqWGKn36WD/fw==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-openapi-2": "^1.0.1", - "@swagger-api/apidom-parser-adapter-json": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-openapi-2": "^1.5.1", + "@swagger-api/apidom-parser-adapter-json": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.1.tgz", - "integrity": "sha512-Ls3U0stAtMqvzesy981crjDa7vwqGHlCoulHIsWQ/V74dHg3Nl1Vg9AgerefKg8LHxxLiYTZJITfsWQMYsnlkA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.5.1.tgz", + "integrity": "sha512-AG68rFxilJwQuwgYUlbSX89j96CzFwm7MLsMbd1Pe2k8bsZJF41bxYEWLck08hQ0v8HikZ7igJLGvkwm9Fk6EQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.1", - "@swagger-api/apidom-parser-adapter-json": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-openapi-3-0": "^1.5.1", + "@swagger-api/apidom-parser-adapter-json": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.1.tgz", - "integrity": "sha512-Xsf3jUCfgqZqZjiABWifPynBDLPkW54V210Oa4SvgyI7ZWgubcy5/Wgd68wvhq4knauRXqRmbgKc+WRm0UP3xw==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.5.1.tgz", + "integrity": "sha512-UYuaUegcqsR8DbqUS9gJnzdV/g7P61HfgjO620soSHwvDRlHCdgxd71dnaBZWT22+as8vuZABAzjQuKrtiej2g==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.1", - "@swagger-api/apidom-parser-adapter-json": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-openapi-3-1": "^1.5.1", + "@swagger-api/apidom-parser-adapter-json": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.1.tgz", - "integrity": "sha512-SygtOXG9XF6lYveg6rymk4u1Twgk1VTxzyVkQ8I6eQoGyBoYfJC00sI6qep9bGU/VnsaRaN/H8+N0vXBeAOsPg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.5.1.tgz", + "integrity": "sha512-d64JVYhBa5O6Kz2H/Wr1gLf5la0T1gZ22XIf2ABPTHga8fKQjEFDhFifxVS65NX9cOglcXQo9sRvD4AZkRMEkQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-openapi-2": "^1.0.1", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-openapi-2": "^1.5.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.1.tgz", - "integrity": "sha512-xm8tY1NYe329tGF01WCtCi7uepppORWs3WpwzskSiZnDAmyjIu5ez3R0RFPCiXnMRGgj4wO6UzjawSrKGTJHjA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.5.1.tgz", + "integrity": "sha512-MgyCo6rz+jH1cR5CpKleT1HOXOLoK2LuP7CrEGsuRNCA4nR6w/H4T75XYxUCWO/9T3870vkxDM8hp8IRW5xtQg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.1", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-openapi-3-0": "^1.5.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.1.tgz", - "integrity": "sha512-p0G3g63Jcd4Z5Y2hStNB0NgjwYJg9VBLhkDcmFdmKCbz9vYA45rMN+wn62pqkWQE7KBZ1F1zY0wacRlUy0VuuQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.5.1.tgz", + "integrity": "sha512-9ED9pmYqCfKqfeeDtGrXU7+gISjt6bh93XO5qCexwfHCbzrTdjiMcWMTCnaRjXvgv819LAKUDIDnnn88EGpUNg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.1", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-ns-openapi-3-1": "^1.5.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.5.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.1.tgz", - "integrity": "sha512-ppNo8mncbGA3TchroLmcDv1WUw9vruHa4M96WbWqI7cwH3zdJ1UddwfHkZ5IaCOUU08Iyo2uzMMRaarALAsl8g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.5.1.tgz", + "integrity": "sha512-jMZUwbS7P2n/3BG+w0Mg+G2m6tY1zuDCACTpVh3UjIMl15k+6VIyB49kKIs1q9BZRX8rbnJmmzpYcjhjDOgaqA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.1", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-ast": "^1.5.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", "@tree-sitter-grammars/tree-sitter-yaml": "=0.7.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", @@ -3892,56 +3863,76 @@ } }, "node_modules/@swagger-api/apidom-reference": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.1.tgz", - "integrity": "sha512-FvM6cooFx1ppWN9gKXSLFG2Y4u3SRdv1FIJxj+5VC/6V3++BF2LUFkb7hK0IOaAjw2vQ7G0NUyP+5UY/3qKBjA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.5.1.tgz", + "integrity": "sha512-KppyiuQ8EY1vnhb2RsCty60DKYP1jszmxNKHAAGaMgKOmTcoGCvPNDl0Fn6IPlEfXsy3yqYn1CsEePC3BcGtHg==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.1", - "@swagger-api/apidom-error": "^1.0.1", + "@swagger-api/apidom-core": "^1.5.1", + "@swagger-api/apidom-error": "^1.5.1", "@types/ramda": "~0.30.0", "axios": "^1.12.2", - "minimatch": "^7.4.3", - "process": "^0.11.10", + "minimatch": "^10.2.1", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" }, "optionalDependencies": { - "@swagger-api/apidom-json-pointer": "^1.0.1", - "@swagger-api/apidom-ns-arazzo-1": "^1.0.1", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.1", - "@swagger-api/apidom-ns-openapi-2": "^1.0.1", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.1", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.1", - "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.1", - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.1", - "@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.0.1", - "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.0.1", - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.1", - "@swagger-api/apidom-parser-adapter-asyncapi-json-3": "^1.0.1", - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.1", - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "^1.0.1", - "@swagger-api/apidom-parser-adapter-json": "^1.0.1", - "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.1", - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.1", - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.1", - "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.1", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.1", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.1", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.1" + "@swagger-api/apidom-json-pointer": "^1.5.1", + "@swagger-api/apidom-ns-arazzo-1": "^1.5.1", + "@swagger-api/apidom-ns-asyncapi-2": "^1.5.1", + "@swagger-api/apidom-ns-openapi-2": "^1.5.1", + "@swagger-api/apidom-ns-openapi-3-0": "^1.5.1", + "@swagger-api/apidom-ns-openapi-3-1": "^1.5.1", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.5.1", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.5.1", + "@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.5.1", + "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.5.1", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.5.1", + "@swagger-api/apidom-parser-adapter-asyncapi-json-3": "^1.5.1", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.5.1", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "^1.5.1", + "@swagger-api/apidom-parser-adapter-json": "^1.5.1", + "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.5.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.5.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.5.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.5.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.5.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.5.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.5.1" + } + }, + "node_modules/@swagger-api/apidom-reference/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@swagger-api/apidom-reference/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" } }, "node_modules/@swagger-api/apidom-reference/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "license": "ISC", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", + "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=10" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3971,58 +3962,6 @@ "node": ">=12.20.0" } }, - "node_modules/@swc/cli": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.8.0.tgz", - "integrity": "sha512-vzUkYzlqLe9dC+B0ZIH62CzfSZOCTjIsmquYyyyi45JCm1xmRfLDKeEeMrEPPyTWnEEN84e4iVd49Tgqa+2GaA==", - "license": "MIT", - "dependencies": { - "@swc/counter": "^0.1.3", - "@xhmikosr/bin-wrapper": "^13.0.5", - "commander": "^8.3.0", - "minimatch": "^9.0.3", - "piscina": "^4.3.1", - "semver": "^7.3.8", - "slash": "3.0.0", - "source-map": "^0.7.3", - "tinyglobby": "^0.2.13" - }, - "bin": { - "spack": "bin/spack.js", - "swc": "bin/swc.js", - "swcx": "bin/swcx.js" - }, - "engines": { - "node": ">= 20.19.0" - }, - "peerDependencies": { - "@swc/core": "^1.2.66", - "chokidar": "^5.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@swc/cli/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@swc/cli/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@swc/core": { "version": "1.15.11", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.11.tgz", @@ -4588,9 +4527,9 @@ "license": "MIT" }, "node_modules/@types/d3-shape": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", - "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", "license": "MIT", "dependencies": { "@types/d3-path": "*" @@ -4691,9 +4630,9 @@ } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", "license": "MIT" }, "node_modules/@types/json-schema": { @@ -4809,16 +4748,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", - "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz", + "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==", "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/type-utils": "8.54.0", - "@typescript-eslint/utils": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/type-utils": "8.56.0", + "@typescript-eslint/utils": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -4831,21 +4770,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.54.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/parser": "^8.56.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz", - "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz", + "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "debug": "^4.4.3" }, "engines": { @@ -4856,18 +4795,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", - "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz", + "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==", "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.54.0", - "@typescript-eslint/types": "^8.54.0", + "@typescript-eslint/tsconfig-utils": "^8.56.0", + "@typescript-eslint/types": "^8.56.0", "debug": "^4.4.3" }, "engines": { @@ -4882,13 +4821,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", - "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz", + "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0" + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4899,9 +4838,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", - "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz", + "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4915,14 +4854,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz", - "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz", + "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -4934,14 +4873,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz", - "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", + "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4952,15 +4891,15 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", - "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz", + "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==", "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.54.0", - "@typescript-eslint/tsconfig-utils": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/project-service": "8.56.0", + "@typescript-eslint/tsconfig-utils": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", @@ -4979,15 +4918,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz", - "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz", + "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0" + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4997,36 +4936,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", - "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz", + "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5037,12 +4958,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", + "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5127,6 +5048,18 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/expect/node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/@vitest/expect/node_modules/@vitest/utils": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", @@ -5176,15 +5109,6 @@ } } }, - "node_modules/@vitest/mocker/node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/@vitest/pretty-format": { "version": "4.0.18", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", @@ -5225,13 +5149,10 @@ } }, "node_modules/@vitest/spy": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, "funding": { "url": "https://opencollective.com/vitest" } @@ -5542,9 +5463,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5573,9 +5494,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -5911,10 +5832,16 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", "license": "Apache-2.0", "peerDependencies": { "react-native-b4a": "*" @@ -5985,18 +5912,21 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.6.tgz", - "integrity": "sha512-v9BVVpOTLB59C9E7aSnmIF8h7qRsFpx+A2nugVMTszEOMcfjlZMsXRm4LF23I3Z9AJxc8ANpIvzbzONoX9VJlg==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", + "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", "license": "MIT", "optional": true, "engines": { @@ -6264,9 +6194,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001760", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", - "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", "funding": [ { "type": "opencollective", @@ -6394,9 +6324,9 @@ } }, "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", "license": "MIT", "engines": { "node": ">= 16" @@ -6428,20 +6358,56 @@ "chevrotain": "^11.0.0" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chromedriver": { - "version": "145.0.3", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-145.0.3.tgz", - "integrity": "sha512-vmPpiuFNd/AfmZQzDOgeUiDgmH01Q3Nm6da7b4NGSrsnrU+4az7oL36Iw30Goo9/5oOK8HCGdXw9q45SbmNLzA==", + "version": "145.0.5", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-145.0.5.tgz", + "integrity": "sha512-cpDmNRmjTSM5xYV7Xov+SihjtP0PYxDZllLPbuQ0zpBeV79JTyB69b7yoUR+cLD35PIosfMzRMzXZ9yXKOP2oQ==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, "dependencies": { "@testim/chrome-version": "^1.1.4", - "axios": "^1.12.0", + "axios": "^1.13.5", "compare-versions": "^6.1.0", "extract-zip": "^2.0.1", "proxy-agent": "^6.4.0", - "proxy-from-env": "^1.1.0", + "proxy-from-env": "^2.0.0", "tcp-port-used": "^1.0.2" }, "bin": { @@ -6609,9 +6575,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz", - "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.48.0.tgz", + "integrity": "sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -6926,9 +6892,9 @@ } }, "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", "license": "ISC", "engines": { "node": ">=12" @@ -7037,6 +7003,12 @@ "d3-path": "1" } }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, "node_modules/d3-scale": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", @@ -7284,9 +7256,9 @@ "license": "MIT" }, "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", "license": "MIT", "dependencies": { "character-entities": "^2.0.0" @@ -7357,9 +7329,9 @@ } }, "node_modules/default-browser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", - "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -7498,7 +7470,6 @@ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", "license": "MIT", - "peer": true, "engines": { "node": ">=12.20" }, @@ -7511,7 +7482,6 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", "license": "MIT", - "peer": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -7604,9 +7574,9 @@ "license": "ISC" }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -7646,9 +7616,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", @@ -7732,26 +7702,26 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", "license": "MIT", "dependencies": { "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.24.1", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", + "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", + "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", + "iterator.prototype": "^1.1.5", "safe-array-concat": "^1.1.3" }, "engines": { @@ -8125,9 +8095,9 @@ } }, "node_modules/eslint-plugin-lit": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-2.1.1.tgz", - "integrity": "sha512-qmyAOnnTCdS+vDnNxtCoF0icSKIio4GUv6ZLnaCtTX6G/YezRa6Ag6tOQ+MfV5Elvtw9CIXeliRX4mIBSwrPIA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-2.2.1.tgz", + "integrity": "sha512-mnqqwpWF4PBF/YjlGt9mbHwrWCGMtaqdpnqISv3nGcTl8iStaAt9UGieMY3i8vwKfSSWtkEfBZUcRKFGys6yiw==", "license": "MIT", "dependencies": { "parse5": "^6.0.1", @@ -8220,18 +8190,24 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8246,9 +8222,9 @@ } }, "node_modules/eslint-plugin-wc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-3.0.2.tgz", - "integrity": "sha512-siwTrxPTw6GU2JmP3faInw8nhi0ZCnKsiSRM3j7EAkZmBTGYdDAToeseLYsvPrc5Urp/vPz+g7Ewh7XcICLxww==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-3.1.0.tgz", + "integrity": "sha512-spvXHD2/GTTgYXxFB3xlMThnXGUeNJaiCwWuPGzjDOLXnVGLcQpDt0fyiN6yiLoaLs/yhsj+7G1FpBZKeigCSA==", "license": "MIT", "dependencies": { "is-valid-element-name": "^1.0.0", @@ -8372,9 +8348,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -8622,9 +8598,9 @@ } }, "node_modules/fast-copy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.1.tgz", - "integrity": "sha512-+uUOQlhsaswsizHFmEFAQhB3lSiQ+lisxl50N6ZP0wywlZeWsIESxSi9ftPEps8UGfiBzyYP7x27zA674WUvXw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz", + "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==", "license": "MIT" }, "node_modules/fast-deep-equal": { @@ -8692,9 +8668,9 @@ "license": "MIT" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -8983,6 +8959,27 @@ "node": ">=16" } }, + "node_modules/format-imports/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/format-imports/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/format-imports/node_modules/fs-extra": { "version": "11.3.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", @@ -8998,15 +8995,15 @@ } }, "node_modules/format-imports/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", + "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -9238,11 +9235,10 @@ } }, "node_modules/git-hooks-list": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", - "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/fisker/git-hooks-list?sponsor=1" } @@ -9905,10 +9901,13 @@ } }, "node_modules/internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", - "license": "ISC" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } }, "node_modules/ip-address": { "version": "10.1.0", @@ -10490,9 +10489,9 @@ } }, "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -10693,9 +10692,9 @@ } }, "node_modules/katex": { - "version": "0.16.27", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.27.tgz", - "integrity": "sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==", + "version": "0.16.28", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.28.tgz", + "integrity": "sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" @@ -10741,9 +10740,9 @@ } }, "node_modules/knip": { - "version": "5.84.1", - "resolved": "https://registry.npmjs.org/knip/-/knip-5.84.1.tgz", - "integrity": "sha512-F1+yACEsSapAwmQLzfD4i9uPsnI82P4p5ABpNQ9pcc4fpQtjHEX34XDtNl5863I4O6SCECpymylcWDHI3ouhQQ==", + "version": "5.85.0", + "resolved": "https://registry.npmjs.org/knip/-/knip-5.85.0.tgz", + "integrity": "sha512-V2kyON+DZiYdNNdY6GALseiNCwX7dYdpz9Pv85AUn69Gk0UKCts+glOKWfe5KmaMByRjM9q17Mzj/KinTVOyxg==", "funding": [ { "type": "github", @@ -11589,12 +11588,13 @@ } }, "node_modules/mermaid-isomorphic": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/mermaid-isomorphic/-/mermaid-isomorphic-3.0.4.tgz", - "integrity": "sha512-XQTy7H1XwHK3DPEHf+ZNWiqUEd9BwX3Xws38R9Fj2gx718srmgjlZoUzHr+Tca+O+dqJOJsAJaKzCoP65QDfDg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mermaid-isomorphic/-/mermaid-isomorphic-3.1.0.tgz", + "integrity": "sha512-mzrvfEVjnJIkJlEqxp3eMuR1wS0TeLCH1VK5E/T5yzWaBwI3JqjJuw70yUIThSCDJ5bRs6O3rgfp00oBAbvSeQ==", "license": "MIT", "dependencies": { "@fortawesome/fontawesome-free": "^6.0.0", + "katex": "^0.16.0", "mermaid": "^11.0.0" }, "funding": { @@ -12599,6 +12599,33 @@ "resolved": "packages/node-domexception", "link": true }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/node-fetch-commonjs": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz", @@ -12665,9 +12692,9 @@ } }, "node_modules/normalize-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", - "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", + "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", "license": "MIT", "engines": { "node": ">=14.16" @@ -13136,34 +13163,34 @@ } }, "node_modules/oxc-resolver": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.15.0.tgz", - "integrity": "sha512-Hk2J8QMYwmIO9XTCUiOH00+Xk2/+aBxRUnhrSlANDyCnLYc32R1WSIq1sU2yEdlqd53FfMpPEpnBYIKQMzliJw==", + "version": "11.17.1", + "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.17.1.tgz", + "integrity": "sha512-pyRXK9kH81zKlirHufkFhOFBZRks8iAMLwPH8gU7lvKFiuzUH9L8MxDEllazwOb8fjXMcWjY1PMDfMJ2/yh5cw==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxc-resolver/binding-android-arm-eabi": "11.15.0", - "@oxc-resolver/binding-android-arm64": "11.15.0", - "@oxc-resolver/binding-darwin-arm64": "11.15.0", - "@oxc-resolver/binding-darwin-x64": "11.15.0", - "@oxc-resolver/binding-freebsd-x64": "11.15.0", - "@oxc-resolver/binding-linux-arm-gnueabihf": "11.15.0", - "@oxc-resolver/binding-linux-arm-musleabihf": "11.15.0", - "@oxc-resolver/binding-linux-arm64-gnu": "11.15.0", - "@oxc-resolver/binding-linux-arm64-musl": "11.15.0", - "@oxc-resolver/binding-linux-ppc64-gnu": "11.15.0", - "@oxc-resolver/binding-linux-riscv64-gnu": "11.15.0", - "@oxc-resolver/binding-linux-riscv64-musl": "11.15.0", - "@oxc-resolver/binding-linux-s390x-gnu": "11.15.0", - "@oxc-resolver/binding-linux-x64-gnu": "11.15.0", - "@oxc-resolver/binding-linux-x64-musl": "11.15.0", - "@oxc-resolver/binding-openharmony-arm64": "11.15.0", - "@oxc-resolver/binding-wasm32-wasi": "11.15.0", - "@oxc-resolver/binding-win32-arm64-msvc": "11.15.0", - "@oxc-resolver/binding-win32-ia32-msvc": "11.15.0", - "@oxc-resolver/binding-win32-x64-msvc": "11.15.0" + "@oxc-resolver/binding-android-arm-eabi": "11.17.1", + "@oxc-resolver/binding-android-arm64": "11.17.1", + "@oxc-resolver/binding-darwin-arm64": "11.17.1", + "@oxc-resolver/binding-darwin-x64": "11.17.1", + "@oxc-resolver/binding-freebsd-x64": "11.17.1", + "@oxc-resolver/binding-linux-arm-gnueabihf": "11.17.1", + "@oxc-resolver/binding-linux-arm-musleabihf": "11.17.1", + "@oxc-resolver/binding-linux-arm64-gnu": "11.17.1", + "@oxc-resolver/binding-linux-arm64-musl": "11.17.1", + "@oxc-resolver/binding-linux-ppc64-gnu": "11.17.1", + "@oxc-resolver/binding-linux-riscv64-gnu": "11.17.1", + "@oxc-resolver/binding-linux-riscv64-musl": "11.17.1", + "@oxc-resolver/binding-linux-s390x-gnu": "11.17.1", + "@oxc-resolver/binding-linux-x64-gnu": "11.17.1", + "@oxc-resolver/binding-linux-x64-musl": "11.17.1", + "@oxc-resolver/binding-openharmony-arm64": "11.17.1", + "@oxc-resolver/binding-wasm32-wasi": "11.17.1", + "@oxc-resolver/binding-win32-arm64-msvc": "11.17.1", + "@oxc-resolver/binding-win32-ia32-msvc": "11.17.1", + "@oxc-resolver/binding-win32-x64-msvc": "11.17.1" } }, "node_modules/p-cancelable": { @@ -13517,9 +13544,9 @@ } }, "node_modules/pino-std-serializers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", "license": "MIT" }, "node_modules/piscina": { @@ -13671,17 +13698,15 @@ } }, "node_modules/prettier-plugin-packagejson": { - "version": "2.5.20", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.20.tgz", - "integrity": "sha512-G8cowPh+QmJJECTZlrPDKWkVVcwrFjF2rGcw546w3N8blLoc4szSs8UUPfFVxHUNLUjiru71Ah83g1lZkeK9Bw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-3.0.0.tgz", + "integrity": "sha512-z8/QmPSqx/ANvvQMWJSkSq1+ihBXeuwDEYdjX3ZjRJ5Ty1k7vGbFQfhzk2eDe0rwS/TNyRjWK/qnjJEStAOtDw==", "license": "MIT", - "peer": true, "dependencies": { - "sort-package-json": "3.5.0", - "synckit": "0.11.11" + "sort-package-json": "3.6.0" }, "peerDependencies": { - "prettier": ">= 1.16.0" + "prettier": "^3" }, "peerDependenciesMeta": { "prettier": { @@ -13733,15 +13758,6 @@ "node": ">=6" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-warning": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", @@ -13826,11 +13842,19 @@ "node": ">=12" } }, - "node_modules/proxy-from-env": { + "node_modules/proxy-agent/node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" + "license": "MIT", + "optional": true + }, + "node_modules/proxy-from-env": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.0.0.tgz", + "integrity": "sha512-h2lD3OfRraP3R51rNFKIE8nX+qoLr1mE74X91YhVxtDbt+OD6ntoNZv56+JgI4RCdtwQ5eexsOk1KdOQDfvPCQ==", + "license": "MIT", + "optional": true }, "node_modules/pseudolocale": { "version": "2.2.0", @@ -14045,6 +14069,30 @@ "node": ">=4" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/real-require": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", @@ -15033,15 +15081,18 @@ } }, "node_modules/smob": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", - "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", - "license": "MIT" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.1.tgz", + "integrity": "sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } }, "node_modules/smol-toml": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.5.2.tgz", - "integrity": "sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", "license": "BSD-3-Clause", "engines": { "node": ">= 18" @@ -15081,9 +15132,9 @@ } }, "node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" @@ -15151,26 +15202,24 @@ } }, "node_modules/sort-object-keys": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.0.1.tgz", - "integrity": "sha512-R89fO+z3x7hiKPXX5P0qim+ge6Y60AjtlW+QQpRozrrNcR1lw9Pkpm5MLB56HoNvdcLHL4wbpq16OcvGpEDJIg==", - "license": "MIT", - "peer": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", + "license": "MIT" }, "node_modules/sort-package-json": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.5.0.tgz", - "integrity": "sha512-moY4UtptUuP5sPuu9H9dp8xHNel7eP5/Kz/7+90jTvC0IOiPH2LigtRM/aSFSxreaWoToHUVUpEV4a2tAs2oKQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.0.tgz", + "integrity": "sha512-fyJsPLhWvY7u2KsKPZn1PixbXp+1m7V8NWqU8CvgFRbMEX41Ffw1kD8n0CfJiGoaSfoAvbrqRRl/DcHO8omQOQ==", "license": "MIT", - "peer": true, "dependencies": { - "detect-indent": "^7.0.1", + "detect-indent": "^7.0.2", "detect-newline": "^4.0.1", - "git-hooks-list": "^4.0.0", + "git-hooks-list": "^4.1.1", "is-plain-obj": "^4.1.0", - "semver": "^7.7.1", - "sort-object-keys": "^2.0.0", - "tinyglobby": "^0.2.12" + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" }, "bin": { "sort-package-json": "cli.js" @@ -15327,6 +15376,18 @@ } } }, + "node_modules/storybook/node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/streamroller": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", @@ -15667,18 +15728,18 @@ } }, "node_modules/swagger-client": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.36.0.tgz", - "integrity": "sha512-9fkjxGHXuKy20jj8zwE6RwgFSOGKAyOD5U7aKgW/+/futtHZHOdZeqiEkb97sptk2rdBv7FEiUQDNlWZR186RA==", + "version": "3.36.1", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.36.1.tgz", + "integrity": "sha512-bcYpeN4P3sOoKi22zsxIlL9lSgouBAmQmL5hH4g5yeOvyTUvq1+OFtGTs0l1C5Dkb0ZN+2vNgp0FBAFulmUklA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.22.15", "@scarf/scarf": "=1.4.0", - "@swagger-api/apidom-core": "^1.0.0-rc.1", - "@swagger-api/apidom-error": "^1.0.0-rc.1", - "@swagger-api/apidom-json-pointer": "^1.0.0-rc.1", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-rc.1", - "@swagger-api/apidom-reference": "^1.0.0-rc.1", + "@swagger-api/apidom-core": "^1.3.0", + "@swagger-api/apidom-error": "^1.3.0", + "@swagger-api/apidom-json-pointer": "^1.3.0", + "@swagger-api/apidom-ns-openapi-3-1": "^1.3.0", + "@swagger-api/apidom-reference": "^1.3.0", "@swaggerexpert/cookie": "^2.0.2", "deepmerge": "~4.3.0", "fast-json-patch": "^3.0.0-1", @@ -15692,22 +15753,6 @@ "ramda-adjunct": "^5.1.0" } }, - "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, "node_modules/tagged-tag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", @@ -15768,9 +15813,9 @@ "optional": true }, "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" @@ -15871,12 +15916,12 @@ } }, "node_modules/token-types": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", - "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", "license": "MIT", "dependencies": { - "@borewit/text-codec": "^0.1.0", + "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" }, @@ -16166,15 +16211,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.54.0.tgz", - "integrity": "sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.0.tgz", + "integrity": "sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==", "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.54.0", - "@typescript-eslint/parser": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0" + "@typescript-eslint/eslint-plugin": "8.56.0", + "@typescript-eslint/parser": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -16184,14 +16229,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", "license": "MIT" }, "node_modules/uint8array-extras": { @@ -16453,9 +16498,9 @@ "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", - "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", @@ -16533,9 +16578,9 @@ } }, "node_modules/validator": { - "version": "13.15.23", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.23.tgz", - "integrity": "sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==", + "version": "13.15.26", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.26.tgz", + "integrity": "sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -16765,15 +16810,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vitest/node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/vitest/node_modules/chai": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", @@ -17060,9 +17096,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -17140,66 +17176,6 @@ "node": ">= 18" } }, - "node_modules/wireit/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/wireit/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/wireit/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/wireit/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -17233,9 +17209,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -17364,9 +17340,9 @@ } }, "node_modules/zod": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", - "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -17443,7 +17419,7 @@ "base64-js": "^1.5.1", "core-js": "^3.48.0", "formdata-polyfill": "^2025.11.0", - "globby": "^16.1.1", + "globby": "16.1.1", "jquery": "^3.7.1", "rollup": "^4.57.1", "weakmap-polyfill": "^2.0.4" @@ -17460,6 +17436,58 @@ "@swc/core-win32-ia32-msvc": "^1.15.3", "@swc/core-win32-x64-msvc": "^1.15.3" } + }, + "packages/sfe/node_modules/@swc/cli": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.8.0.tgz", + "integrity": "sha512-vzUkYzlqLe9dC+B0ZIH62CzfSZOCTjIsmquYyyyi45JCm1xmRfLDKeEeMrEPPyTWnEEN84e4iVd49Tgqa+2GaA==", + "license": "MIT", + "dependencies": { + "@swc/counter": "^0.1.3", + "@xhmikosr/bin-wrapper": "^13.0.5", + "commander": "^8.3.0", + "minimatch": "^9.0.3", + "piscina": "^4.3.1", + "semver": "^7.3.8", + "slash": "3.0.0", + "source-map": "^0.7.3", + "tinyglobby": "^0.2.13" + }, + "bin": { + "spack": "bin/spack.js", + "swc": "bin/swc.js", + "swcx": "bin/swcx.js" + }, + "engines": { + "node": ">= 20.19.0" + }, + "peerDependencies": { + "@swc/core": "^1.2.66", + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "packages/sfe/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "packages/sfe/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } } } } diff --git a/web/package.json b/web/package.json index 43a74ae827..880224b339 100644 --- a/web/package.json +++ b/web/package.json @@ -5,17 +5,17 @@ "private": true, "scripts": { "build": "wireit", + "build:sfe": "npm run build -w @goauthentik/web-sfe", "build-locales": "node scripts/build-locales.mjs", "build-proxy": "wireit", - "build:sfe": "npm run build -w @goauthentik/web-sfe", "bundler:watch": "node scripts/build-web.mjs --watch", "extract-locales": "lit-localize extract", "format": "wireit", "lint": "eslint --fix .", - "lint-check": "eslint --max-warnings 0 .", "lint:imports": "knip --config scripts/knip.config.ts", "lint:lockfile": "wireit", "lint:types": "wireit", + "lint-check": "eslint --max-warnings 0 .", "lit-analyse": "wireit", "precommit": "wireit", "prettier": "prettier --cache --write -u .", @@ -101,8 +101,8 @@ "@goauthentik/api": "^2026.2.0-rc1-1770744803", "@goauthentik/core": "^1.0.0", "@goauthentik/esbuild-plugin-live-reload": "^1.4.0", - "@goauthentik/eslint-config": "^1.2.0", - "@goauthentik/prettier-config": "^3.3.1", + "@goauthentik/eslint-config": "^1.2.1", + "@goauthentik/prettier-config": "^3.4.0", "@goauthentik/tsconfig": "^1.0.5", "@hcaptcha/types": "^1.1.0", "@lit/context": "^1.1.6", @@ -152,7 +152,7 @@ "globals": "^17.3.0", "guacamole-common-js": "^1.5.0", "hastscript": "^9.0.1", - "knip": "^5.84.1", + "knip": "^5.85.0", "lex": "^2025.11.0", "lit": "^3.3.2", "lit-analyzer": "^2.0.3", @@ -166,6 +166,7 @@ "pino-pretty": "^13.1.2", "playwright": "^1.58.2", "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "pseudolocale": "^2.2.0", "rapidoc": "^9.3.8", "react": "^19.2.4", @@ -202,6 +203,9 @@ "@rollup/rollup-linux-x64-gnu": "^4.57.1", "chromedriver": "^145.0.3" }, + "workspaces": [ + "./packages/*" + ], "wireit": { "build": { "#comment": [ @@ -299,14 +303,27 @@ "node": ">=24", "npm": ">=11.6.2" }, - "workspaces": [ - "./packages/*" - ], + "devEngines": { + "runtime": { + "name": "node", + "onFail": "warn", + "version": ">=24" + }, + "packageManager": { + "name": "npm", + "version": "11.10.1", + "onFail": "warn" + } + }, "prettier": "@goauthentik/prettier-config", "overrides": { "@goauthentik/esbuild-plugin-live-reload": { "esbuild": "$esbuild" }, + "@goauthentik/prettier-config": { + "prettier": "$prettier", + "prettier-plugin-packagejson": "$prettier-plugin-packagejson" + }, "@mrmarble/djangoql-completion": { "lex": "$lex" }, diff --git a/web/packages/core/package.json b/web/packages/core/package.json index 22c08aaf50..8a273dc348 100644 --- a/web/packages/core/package.json +++ b/web/packages/core/package.json @@ -9,6 +9,7 @@ }, "main": "index.js", "type": "module", + "types": "./out/index.d.ts", "exports": { "./package.json": "./package.json", "./*/browser": { @@ -52,6 +53,5 @@ "engines": { "node": ">=24", "npm": ">=11.6.2" - }, - "types": "./out/index.d.ts" + } } diff --git a/web/src/admin/admin-overview/AdminOverviewPage.ts b/web/src/admin/admin-overview/AdminOverviewPage.ts index 5624e9172b..ed640f0f8a 100644 --- a/web/src/admin/admin-overview/AdminOverviewPage.ts +++ b/web/src/admin/admin-overview/AdminOverviewPage.ts @@ -8,7 +8,7 @@ import "#admin/admin-overview/cards/WorkerStatusCard"; import "#admin/admin-overview/charts/AdminLoginAuthorizeChart"; import "#admin/admin-overview/charts/OutpostStatusChart"; import "#admin/admin-overview/charts/SyncStatusChart"; -import "#elements/cards/AggregatePromiseCard"; +import "#elements/cards/AggregateCard"; import "#elements/cards/QuickActionsCard"; import { formatUserDisplayName } from "#common/users"; diff --git a/web/src/admin/admin-overview/DashboardUserPage.ts b/web/src/admin/admin-overview/DashboardUserPage.ts index cecaa265e0..7769d15e03 100644 --- a/web/src/admin/admin-overview/DashboardUserPage.ts +++ b/web/src/admin/admin-overview/DashboardUserPage.ts @@ -1,5 +1,5 @@ import "#admin/admin-overview/charts/AdminModelPerDay"; -import "#elements/cards/AggregatePromiseCard"; +import "#elements/cards/AggregateCard"; import { AKElement } from "#elements/Base"; diff --git a/web/src/admin/flows/BoundStagesList.ts b/web/src/admin/flows/BoundStagesList.ts index 875690a147..8eced25541 100644 --- a/web/src/admin/flows/BoundStagesList.ts +++ b/web/src/admin/flows/BoundStagesList.ts @@ -89,7 +89,7 @@ export class BoundStagesList extends Table { html` ${StrictUnsafe(item.stageObj?.component, { slot: "form", - instancePk: item.pk, + instancePk: item.stageObj?.pk, actionLabel: msg("Update"), headline: msg(str`Update ${item.stageObj?.verboseName}`, { id: "form.headline.update", diff --git a/web/src/admin/flows/FlowViewPage.ts b/web/src/admin/flows/FlowViewPage.ts index 94373b7d7a..508aa671b5 100644 --- a/web/src/admin/flows/FlowViewPage.ts +++ b/web/src/admin/flows/FlowViewPage.ts @@ -272,7 +272,7 @@ export class FlowViewPage extends AKElement { >
- +
diff --git a/web/src/common/types.ts b/web/src/common/types.ts index 95a6559f34..75efb6f0a9 100644 --- a/web/src/common/types.ts +++ b/web/src/common/types.ts @@ -11,6 +11,15 @@ export type DeepPartial = T extends object } : T; +/** + * Type utility to make all properties in T recursively required. + */ +export type DeepRequired = T extends object + ? { + [P in keyof T]-?: DeepRequired; + } + : T; + /** * Type utility to make readonly properties mutable. */ diff --git a/web/src/elements/ak-dual-select/components/ak-dual-select-available-pane.ts b/web/src/elements/ak-dual-select/components/ak-dual-select-available-pane.ts index 28d3e2979c..b0bddf8db5 100644 --- a/web/src/elements/ak-dual-select/components/ak-dual-select-available-pane.ts +++ b/web/src/elements/ak-dual-select/components/ak-dual-select-available-pane.ts @@ -49,7 +49,7 @@ export class AkDualSelectAvailablePane extends CustomEmitterElement = new Set(); + public selected: Set = new Set(); //#endregion diff --git a/web/src/elements/ak-dual-select/components/ak-dual-select-selected-pane.ts b/web/src/elements/ak-dual-select/components/ak-dual-select-selected-pane.ts index 1dbb7bd32b..ca06626d27 100644 --- a/web/src/elements/ak-dual-select/components/ak-dual-select-selected-pane.ts +++ b/web/src/elements/ak-dual-select/components/ak-dual-select-selected-pane.ts @@ -42,7 +42,7 @@ export class AkDualSelectSelectedPane extends CustomEmitterElement = { - title: "Elements/", - component: "ak-aggregate-card-promise", - tags: ["autodocs"], - parameters: { - docs: { - description: { - component: /* md */ ` -# Aggregate Promise Cards - -Aggregate Promise Cards are Aggregate Cards that take a promise from client code and either display -the contents of that promise or a pre-configured failure notice. The contents must be compliant with -and produce a meaningful result via the \`.toString()\` API. HTML in the string will currently be -escaped. - -## Usage - -\`\`\`Typescript -import "#elements/cards/AggregatePromiseCard"; -\`\`\` - -\`\`\`html - -\`\`\` -`, - }, - }, - }, - argTypes: { - icon: { control: "text" }, - label: { control: "text" }, - headerLink: { control: "text" }, - subtext: { control: "text" }, - failureMessage: { control: "text" }, - }, -}; - -export default metadata; - -const text = - "Curl up and sleep on the freshly laundered towels mew, but make meme, make cute face growl at dogs in my sleep. Scratch me there, elevator butt humans, humans, humans oh how much they love us felines we are the center of attention they feed, they clean hopped up on catnip mice. Kitty time flop over, for see owner, run in terror"; - -const MILLIS_PER_SECOND = 1000; -const EXAMPLE_TIMEOUT = 8000; // 8 seconds - -export const DefaultStory: StoryObj = { - args: { - icon: undefined, - header: "Default", - headerLink: undefined, - subtext: `Demo has a ${EXAMPLE_TIMEOUT / MILLIS_PER_SECOND} second delay until resolution`, - }, - render: ({ icon, label, headerLink, subtext }: IAggregatePromiseCard) => { - const runThis = (timeout: number, value: string) => - new Promise((resolve) => setTimeout(resolve, timeout, value)); - - return html`> - - - `; - }, -}; - -export const PromiseRejected: StoryObj = { - args: { - icon: undefined, - header: "Default", - headerLink: undefined, - subtext: `Demo has a ${EXAMPLE_TIMEOUT / MILLIS_PER_SECOND} second delay until resolution`, - failureMessage: undefined, - }, - render: ({ icon, label, headerLink, subtext, failureMessage }: IAggregatePromiseCard) => { - const runThis = (timeout: number, value: string) => - new Promise((_resolve, reject) => setTimeout(reject, timeout, value)); - - return html` - - - - `; - }, -}; diff --git a/web/src/elements/utils/unsafe.ts b/web/src/elements/utils/unsafe.ts index 51c9b203f2..7e11776941 100644 --- a/web/src/elements/utils/unsafe.ts +++ b/web/src/elements/utils/unsafe.ts @@ -43,19 +43,23 @@ export const Prefix = { export type Prefix = (typeof Prefix)[keyof typeof Prefix]; +type WrappedPropertyDeclaration = PropertyDeclaration & { wrapped?: boolean }; + /** * Given a Lit property declaration, determine the appropriate prefix for rendering the property as either a property or an attribute, based on the declaration's type and attribute configuration. * * @param propDeclaration The Lit property declaration to analyze. * @returns The determined prefix for rendering the property. */ -function resolvePrefix>( - propDeclaration: T, -): Prefix { +function resolvePrefix(propDeclaration: T): Prefix { if (!propDeclaration.attribute) { return Prefix.Property; } + if ("wrapped" in propDeclaration && propDeclaration.wrapped && !propDeclaration.type) { + return Prefix.Attribute; + } + switch (propDeclaration.type) { case String: return Prefix.Attribute; @@ -71,7 +75,7 @@ function resolvePrefix>( * determine the appropriate name to use for rendering the property, * taking into account any custom attribute name specified in the declaration. */ -function resolvePropertyName>( +function resolvePropertyName( propDeclaration: T, prefix: Prefix, key: string, @@ -148,9 +152,7 @@ export function StrictUnsafe( if (propDeclaration) { const prefix = resolvePrefix(propDeclaration); const name = resolvePropertyName(propDeclaration, prefix, propName); - filteredProps[`${prefix}${name}`] = propValue; - continue; } diff --git a/web/src/flow/FlowExecutor.css b/web/src/flow/FlowExecutor.css index e12cab20c9..95f7ac7dea 100644 --- a/web/src/flow/FlowExecutor.css +++ b/web/src/flow/FlowExecutor.css @@ -7,8 +7,7 @@ ak-flow-executor.style-scope { flex-flow: column nowrap; } -.inspector-toggle, -.inspector-toggle.style-scope { +ak-flow-inspector-button { position: absolute; inset-inline-end: var(--pf-global--spacer--md); inset-block-start: var(--pf-global--spacer--md); diff --git a/web/src/flow/FlowExecutor.ts b/web/src/flow/FlowExecutor.ts index c5710b4666..ecab5bbaab 100644 --- a/web/src/flow/FlowExecutor.ts +++ b/web/src/flow/FlowExecutor.ts @@ -1,19 +1,13 @@ -import "#flow/stages/authenticator_webauthn/WebAuthnAuthenticatorRegisterStage"; import "#elements/LoadingOverlay"; import "#elements/locale/ak-locale-select"; import "#flow/components/ak-brand-footer"; import "#flow/components/ak-flow-card"; -import "#flow/sources/apple/AppleLoginInit"; -import "#flow/sources/plex/PlexLoginInit"; -import "#flow/sources/telegram/TelegramLogin"; -import "#flow/stages/FlowErrorStage"; -import "#flow/stages/FlowFrameStage"; -import "#flow/stages/RedirectStage"; +import "#flow/inspector/FlowInspectorButton"; import Styles from "./FlowExecutor.css" with { type: "bundled-text" }; import { DEFAULT_CONFIG } from "#common/api/config"; -import { parseAPIResponseError, pluckErrorDetail } from "#common/errors/network"; +import { APIError, parseAPIResponseError, pluckErrorDetail } from "#common/errors/network"; import { globalAK } from "#common/global"; import { configureSentry } from "#common/sentry/index"; import { applyBackgroundImageProperty } from "#common/theme"; @@ -24,36 +18,35 @@ import { listen } from "#elements/decorators/listen"; import { Interface } from "#elements/Interface"; import { showAPIErrorMessage } from "#elements/messages/MessageContainer"; import { WithBrandConfig } from "#elements/mixins/branding"; -import { WithCapabilitiesConfig } from "#elements/mixins/capabilities"; import { LitPropertyRecord, SlottedTemplateResult } from "#elements/types"; import { exportParts } from "#elements/utils/attributes"; import { ThemedImage } from "#elements/utils/images"; -import { AKFlowAdvanceEvent, AKFlowInspectorChangeEvent } from "#flow/events"; +import { AKFlowAdvanceEvent } from "#flow/events"; +import { StageMapping } from "#flow/FlowExecutorStageFactory"; import { BaseStage } from "#flow/stages/base"; import type { StageHost, SubmitOptions } from "#flow/types"; import { ConsoleLogger } from "#logger/browser"; import { - CapabilitiesEnum, ChallengeTypes, - ContextualFlowInfo, FlowChallengeResponseRequest, FlowErrorChallenge, FlowLayoutEnum, FlowsApi, - ShellChallenge, } from "@goauthentik/api"; import { spread } from "@open-wc/lit-helpers"; +import { match, P } from "ts-pattern"; import { msg } from "@lit/localize"; -import { CSSResult, html, nothing, PropertyValues, TemplateResult } from "lit"; -import { customElement, property, state } from "lit/decorators.js"; +import { CSSResult, html, nothing, PropertyValues } from "lit"; +import { customElement, property } from "lit/decorators.js"; import { guard } from "lit/directives/guard.js"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; import { until } from "lit/directives/until.js"; +import { html as staticHTML, unsafeStatic } from "lit/static-html.js"; import PFBackgroundImage from "@patternfly/patternfly/components/BackgroundImage/background-image.css"; import PFButton from "@patternfly/patternfly/components/Button/button.css"; @@ -83,10 +76,7 @@ import PFTitle from "@patternfly/patternfly/components/Title/title.css"; * @part locale-select-select - The select element of the locale select component. */ @customElement("ak-flow-executor") -export class FlowExecutor - extends WithCapabilitiesConfig(WithBrandConfig(Interface)) - implements StageHost -{ +export class FlowExecutor extends WithBrandConfig(Interface) implements StageHost { public static readonly DefaultLayout: FlowLayoutEnum = globalAK()?.flow?.layout || FlowLayoutEnum.Stacked; @@ -109,57 +99,31 @@ export class FlowExecutor @property({ type: String, attribute: "slug", useDefault: true }) public flowSlug: string = window.location.pathname.split("/")[3]; - #challenge: ChallengeTypes | null = null; - @property({ attribute: false }) - public set challenge(value: ChallengeTypes | null) { - const previousValue = this.#challenge; - const previousTitle = previousValue?.flowInfo?.title; - const nextTitle = value?.flowInfo?.title; - - this.#challenge = value; - - if (value?.flowInfo) { - this.flowInfo = value.flowInfo; - } - - if (!nextTitle) { - document.title = this.brandingTitle; - } else if (nextTitle !== previousTitle) { - document.title = `${nextTitle} - ${this.brandingTitle}`; - } - - this.requestUpdate("challenge", previousValue); - } - - public get challenge(): ChallengeTypes | null { - return this.#challenge; - } + public challenge: ChallengeTypes | null = null; @property({ type: Boolean }) public loading = false; - //#endregion - - //#region State - - #inspectorLoaded = false; - #logger = ConsoleLogger.prefix("flow-executor"); - - @property({ type: Boolean }) - public inspectorOpen?: boolean; - - @property({ type: Boolean }) - public inspectorAvailable?: boolean; - @property({ type: String, attribute: "data-layout", useDefault: true, reflect: true }) public layout: FlowLayoutEnum = FlowExecutor.DefaultLayout; - @state() - public flowInfo?: ContextualFlowInfo; + //#endregion + + //#region Internal State + + #logger = ConsoleLogger.prefix("flow-executor"); + + #api: FlowsApi; //#endregion + //#region Accessors + + public get flowInfo() { + return this.challenge?.flowInfo ?? null; + } + //#region Lifecycle constructor() { @@ -169,14 +133,7 @@ export class FlowExecutor WebsocketClient.connect(); - const inspector = new URLSearchParams(window.location.search).get("inspector"); - - if (inspector === "" || inspector === "open") { - this.inspectorOpen = true; - this.inspectorAvailable = true; - } else if (inspector === "available") { - this.inspectorAvailable = true; - } + this.#api = new FlowsApi(DEFAULT_CONFIG); window.addEventListener("message", (event) => { const msg: { @@ -233,7 +190,15 @@ export class FlowExecutor WebsocketClient.close(); } - protected refresh = (): Promise => { + private setFlowErrorChallenge(error: APIError) { + this.challenge = { + component: "ak-stage-flow-error", + error: pluckErrorDetail(error), + requestId: "", + } satisfies FlowErrorChallenge as ChallengeTypes; + } + + protected refresh = async () => { if (!this.flowSlug) { this.#logger.debug("Skipping refresh, no flow slug provided"); return Promise.resolve(); @@ -241,26 +206,20 @@ export class FlowExecutor this.loading = true; - return new FlowsApi(DEFAULT_CONFIG) + return this.#api .flowsExecutorGet({ flowSlug: this.flowSlug, query: window.location.search.substring(1), }) .then((challenge) => { this.challenge = challenge; + return !!this.challenge; }) .catch(async (error) => { const parsedError = await parseAPIResponseError(error); - - const challenge: FlowErrorChallenge = { - component: "ak-stage-flow-error", - error: pluckErrorDetail(parsedError), - requestId: "", - }; - showAPIErrorMessage(parsedError); - - this.challenge = challenge as ChallengeTypes; + this.setFlowErrorChallenge(parsedError); + return false; }) .finally(() => { this.loading = false; @@ -270,14 +229,8 @@ export class FlowExecutor public async firstUpdated(changed: PropertyValues): Promise { super.firstUpdated(changed); - if (this.can(CapabilitiesEnum.CanDebug)) { - this.inspectorAvailable = true; - } - this.refresh().then(() => { - if (this.inspectorOpen) { - window.dispatchEvent(new AKFlowAdvanceEvent()); - } + window.dispatchEvent(new AKFlowAdvanceEvent()); }); } @@ -285,6 +238,10 @@ export class FlowExecutor public updated(changedProperties: PropertyValues) { super.updated(changedProperties); + document.title = match(this.challenge?.flowInfo?.title) + .with(P.nullish, () => this.brandingTitle) + .otherwise((title) => `${title} - ${this.brandingTitle}`); + if (changedProperties.has("challenge") && this.challenge?.flowInfo) { this.layout = this.challenge?.flowInfo?.layout || FlowExecutor.DefaultLayout; } @@ -292,16 +249,6 @@ export class FlowExecutor if (changedProperties.has("flowInfo") || changedProperties.has("activeTheme")) { this.#synchronizeFlowInfo(); } - - if ( - changedProperties.has("inspectorOpen") && - this.inspectorOpen && - !this.#inspectorLoaded - ) { - import("#flow/FlowInspector").then(() => { - this.#inspectorLoaded = true; - }); - } } //#endregion @@ -331,33 +278,19 @@ export class FlowExecutor this.loading = true; } - return new FlowsApi(DEFAULT_CONFIG) + return this.#api .flowsExecutorSolve({ flowSlug: this.flowSlug, query: window.location.search.substring(1), flowChallengeResponseRequest: payload, }) .then((challenge) => { - if (this.inspectorOpen) { - window.dispatchEvent(new AKFlowAdvanceEvent()); - } - + window.dispatchEvent(new AKFlowAdvanceEvent()); this.challenge = challenge; - - if (this.challenge.flowInfo) { - this.flowInfo = this.challenge.flowInfo; - } - return !this.challenge.responseErrors; }) - .catch((error: unknown) => { - const challenge: FlowErrorChallenge = { - component: "ak-stage-flow-error", - error: pluckErrorDetail(error), - requestId: "", - }; - - this.challenge = challenge as ChallengeTypes; + .catch((error: APIError) => { + this.setFlowErrorChallenge(error); return false; }) .finally(() => { @@ -367,183 +300,64 @@ export class FlowExecutor //#region Render Challenge - protected async renderChallenge( - component: ChallengeTypes["component"], - ): Promise { - const { challenge, inspectorOpen } = this; + protected async renderChallenge(challenge: ChallengeTypes) { + const stageEntry = StageMapping.registry.get(challenge.component); - const stageProps: LitPropertyRecord, unknown>> = { - ".challenge": challenge!, - ".host": this, - }; + // The special cases! + if (!stageEntry) { + if (challenge.component === "xak-flow-shell") { + return html`${unsafeHTML(challenge.body)}`; + } - const props = { - ...stageProps, + return this.renderChallengeError( + `No stage found for component: ${challenge.component}`, + ); + } + + const challengeProps: LitPropertyRecord, object>> = + { + ".challenge": challenge, + ".host": this, + }; + + const litParts = { part: "challenge", exportparts: exportParts(["additional-actions", "footer-band"], "challenge"), }; - switch (component) { - case "ak-stage-access-denied": - await import("#flow/stages/access_denied/AccessDeniedStage"); - return html``; - case "ak-stage-identification": - await import("#flow/stages/identification/IdentificationStage"); - return html``; - case "ak-stage-password": - await import("#flow/stages/password/PasswordStage"); - return html``; - case "ak-stage-captcha": - await import("#flow/stages/captcha/CaptchaStage"); - return html``; - case "ak-stage-consent": - await import("#flow/stages/consent/ConsentStage"); - return html``; - case "ak-stage-dummy": - await import("#flow/stages/dummy/DummyStage"); - return html``; - case "ak-stage-email": - await import("#flow/stages/email/EmailStage"); - return html``; - case "ak-stage-autosubmit": - await import("#flow/stages/autosubmit/AutosubmitStage"); - return html``; - case "ak-stage-prompt": - await import("#flow/stages/prompt/PromptStage"); - return html``; - case "ak-stage-authenticator-totp": - await import("#flow/stages/authenticator_totp/AuthenticatorTOTPStage"); - return html``; - case "ak-stage-authenticator-duo": - await import("#flow/stages/authenticator_duo/AuthenticatorDuoStage"); - return html``; - case "ak-stage-authenticator-static": - await import("#flow/stages/authenticator_static/AuthenticatorStaticStage"); - return html``; - case "ak-stage-authenticator-webauthn": - return html``; - case "ak-stage-authenticator-email": - await import("#flow/stages/authenticator_email/AuthenticatorEmailStage"); - return html``; - case "ak-stage-authenticator-sms": - await import("#flow/stages/authenticator_sms/AuthenticatorSMSStage"); - return html``; - case "ak-stage-authenticator-validate": - await import("#flow/stages/authenticator_validate/AuthenticatorValidateStage"); - return html``; - case "ak-stage-user-login": - await import("#flow/stages/user_login/UserLoginStage"); - return html``; - case "ak-stage-endpoint-agent": - await import("#flow/stages/endpoint/agent/EndpointAgentStage"); - return html``; - // Sources - case "ak-source-plex": - return html``; - case "ak-source-oauth-apple": - return html``; - case "ak-source-telegram": - return html``; - // Providers - case "ak-provider-oauth2-device-code": - await import("#flow/providers/oauth2/DeviceCode"); - return html``; - case "ak-provider-oauth2-device-code-finish": - await import("#flow/providers/oauth2/DeviceCodeFinish"); - return html``; - case "ak-stage-session-end": - await import("#flow/providers/SessionEnd"); - return html``; - case "ak-provider-saml-native-logout": - await import("#flow/providers/saml/NativeLogoutStage"); - return html``; - case "ak-provider-iframe-logout": - await import("#flow/providers/IFrameLogoutStage"); - return html``; - // Internal stages - case "ak-stage-flow-error": - return html``; - case "xak-flow-redirect": - return html` - `; - case "xak-flow-shell": - return html`${unsafeHTML((this.challenge as ShellChallenge).body)}`; - case "xak-flow-frame": - return html``; - default: - return html`Invalid native challenge element`; + let mapping: StageMapping; + + try { + mapping = await StageMapping.from(stageEntry); + } catch (error: unknown) { + return this.renderChallengeError(error); } + + const { tag, variant } = mapping; + + const props = spread( + match(variant) + .with("challenge", () => challengeProps) + .with("standard", () => ({ ...challengeProps, ...litParts })) + .exhaustive(), + ); + + return staticHTML`<${unsafeStatic(tag)} ${props}>`; } - //#endregion + protected renderChallengeError(error: unknown): SlottedTemplateResult { + const detail = pluckErrorDetail(error); - //#region Render Inspector + // eslint-disable-next-line no-console + console.trace(error); - @listen(AKFlowInspectorChangeEvent) - protected toggleInspector = () => { - this.inspectorOpen = !this.inspectorOpen; + const errorChallenge: FlowErrorChallenge = { + component: "ak-stage-flow-error", + error: detail, + requestId: "", + }; - const drawer = document.getElementById("flow-drawer"); - - if (!drawer) { - return; - } - - drawer.classList.toggle("pf-m-expanded", this.inspectorOpen); - drawer.classList.toggle("pf-m-collapsed", !this.inspectorOpen); - }; - - protected renderInspectorButton() { - return guard([this.inspectorAvailable, this.inspectorOpen], () => { - if (!this.inspectorAvailable || this.inspectorOpen) { - return null; - } - - return html``; - }); + return html``; } //#endregion @@ -555,7 +369,7 @@ export class FlowExecutor } protected renderFrameBackground(): SlottedTemplateResult { - return guard([this.layout, this.#challenge], () => { + return guard([this.layout, this.challenge], () => { if ( this.layout !== FlowLayoutEnum.SidebarLeftFrameBackground && this.layout !== FlowLayoutEnum.SidebarRightFrameBackground @@ -563,7 +377,7 @@ export class FlowExecutor return nothing; } - const src = this.#challenge?.flowInfo?.background; + const src = this.challenge?.flowInfo?.background; if (!src) return nothing; @@ -596,15 +410,17 @@ export class FlowExecutor } protected override render(): SlottedTemplateResult { - const { component } = this.challenge || {}; + const { challenge, loading } = this; return html` - ${this.renderFrameBackground()} - + +
- ${this.loading && this.challenge - ? html`` - : nothing} - ${component ? until(this.renderChallenge(component)) : this.renderLoading()} + ${loading && challenge ? html`` : nothing} + ${guard([challenge], () => { + return challenge?.component + ? until(this.renderChallenge(challenge)) + : this.renderLoading(); + })}
${this.renderFooter()}`; } diff --git a/web/src/flow/FlowExecutorStageFactory.ts b/web/src/flow/FlowExecutorStageFactory.ts new file mode 100644 index 0000000000..487c40c0a8 --- /dev/null +++ b/web/src/flow/FlowExecutorStageFactory.ts @@ -0,0 +1,110 @@ +/** + * We have several patterns for the client-side components that handle a stage. In most cases, the + * stage component-name and the client-side element-name are the same, but not always. Most stages + * need CSS-related help to be visually attractive, but "challenge" stages do not. Most stages can + * be imported as-needed, but some must be pre-loaded. + */ + +import { ResolvedDefaultESModule } from "#common/modules/types"; +import { DeepRequired } from "#common/types"; + +import { StageEntries, StageEntry } from "#flow/FlowExecutorStages"; +import type { + BaseStageConstructor, + FlowChallengeComponentName, + StageModuleCallback, +} from "#flow/types"; + +import { match, P } from "ts-pattern"; + +export type { FlowChallengeComponentName, StageModuleCallback }; +export const propVariants = ["standard", "challenge"] as const; +export type PropVariant = (typeof propVariants)[number]; + +// The first type supports "import only." +type StageEntryMetadata = + | [] + | [tag: string] + | [variant: PropVariant] + | [tag: string, variant: PropVariant]; + +const STANDARD = propVariants[0]; +const isImport = (x: unknown): x is StageModuleCallback => typeof x === "function"; +const PVariant = P.when( + (x): x is PropVariant => typeof x === "string" && propVariants.includes(x as PropVariant), +); +const PTag = P.when((x): x is string => typeof x === "string" && x.includes("-")); + +export class StageMappingError extends TypeError { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + this.name = "StageMappingError"; + } +} + +/** + * Resolve a stage constructor to its custom element tag name. + */ +function resolveStageTag(module: ResolvedDefaultESModule): string { + const StageConstructor = module.default; + const tag = window.customElements.getName(StageConstructor); + + if (!tag) { + const error = new StageMappingError( + `Failed to load module: No client stage found for component`, + ); + + throw error; + } + + return tag; +} + +interface StageMappingInit { + token: FlowChallengeComponentName; + variant: PropVariant; + tag?: string; +} + +/** + * The metadata needed to load and invoke a stage. + */ +export class StageMapping { + /** + * A mapping of server-side stage tokens to client-side custom element tags. + * + * This can be used to determine if a given stage component has a corresponding client-side stage. + */ + public static readonly registry: ReadonlyMap = new Map( + StageEntries.map((entry) => [entry[0], entry]), + ); + + public readonly token: FlowChallengeComponentName; + public readonly variant: PropVariant; + public readonly tag: string; + + protected constructor({ token, variant, tag }: DeepRequired) { + this.token = token; + this.tag = tag; + this.variant = variant; + } + + /** + * Create a `StageMapping` from a `StageEntry`. + */ + public static async from([token, ...rest]: StageEntry): Promise { + const last = rest.at(-1); + const callback = isImport(last) ? last : null; + const meta = (callback ? rest.slice(0, -1) : rest) as StageEntryMetadata; + + const init = match(meta) + .with([], () => ({ token, variant: STANDARD })) + .with([PTag, PVariant], ([tag, variant]) => ({ token, variant, tag })) + .with([PVariant], ([variant]) => ({ token, variant })) + .with([PTag], ([tag]) => ({ token, variant: STANDARD, tag })) + .exhaustive(); + + const tag = init.tag || (await callback?.().then(resolveStageTag)) || token; + return new StageMapping({ ...init, tag }); + } +} diff --git a/web/src/flow/FlowExecutorStages.ts b/web/src/flow/FlowExecutorStages.ts new file mode 100644 index 0000000000..38c49d2d80 --- /dev/null +++ b/web/src/flow/FlowExecutorStages.ts @@ -0,0 +1,96 @@ +/** + * @file Flow executor stage definitions. + * + * @remarks + * The following imports must be imported statically, as they define web components that are used in stage definitions below. + */ + +import "#flow/sources/apple/AppleLoginInit"; +import "#flow/sources/plex/PlexLoginInit"; +import "#flow/sources/telegram/TelegramLogin"; +import "#flow/stages/FlowErrorStage"; +import "#flow/stages/FlowFrameStage"; +import "#flow/stages/RedirectStage"; +import "#flow/stages/authenticator_webauthn/WebAuthnAuthenticatorRegisterStage"; + +import type { + FlowChallengeComponentName, + PropVariant, + StageModuleCallback, +} from "#flow/FlowExecutorStageFactory"; + +/** + * A tuple representing the metadata for a stage entry in the stage mapping registry. + */ +// prettier-ignore +export type StageEntry = + | [token: FlowChallengeComponentName, tag: string, variant: PropVariant, import?: StageModuleCallback] + | [token: FlowChallengeComponentName, variant: PropVariant, import?: StageModuleCallback] + | [token: FlowChallengeComponentName, tag: string, import?: StageModuleCallback] + | [token: FlowChallengeComponentName, import?: StageModuleCallback]; + +/** + * A mapping of server-side stage tokens to client-side custom element tags, along with the variant + * of props they consume and an optional import callback for lazy-loading. + * + * @remarks + * The different ways a stage can be associated with its server-side component are listed in the + * type declaration above. The variants are meant to reduce the amount of information you have to + * provide: + * + * - If the server-side component and the client-side tag are the same, only provide the component. + * - Variants describe the attribute needs. There are only two variant: "standard" and "challenge." + * The "challenge" variant is for components that immediately issue redirects. "standard" is the + * default; you don't need to specify it. + * - If the stage needs to be live immediately, import it above. Otherwise, provide an import + * function, following the examples already provided. + * + * Variants and Tags have a single strong differentiator: Tags refer to web components and so must + * always have a dash, whereas wariants are from a limited supply of names and do not have a dash. + * The StageFactory will not get confused. If you get confused, the type-checker will explain it. + * + * The resolution of the web component tag name is: tag supplied, tag received with import, tag + * derived from component name. THIS CAN FAIL: a preloaded stage with an incongruent and non- or + * incorrectly-specified tag will result in a stage that cannot be rendered. Pre-loaded stages must + * be tested carefully. + */ +// ,---. | | , . ,---.| | | +// |---|,---|,---| |\ |,---.. . . `---.|--- ,---.,---.,---.,---. |---|,---.,---.,---. +// | || || | | \ ||---'| | | || ,---|| ||---'`---. | ||---'| |---' +// ` '`---'`---' ` `'`---'`-'-' `---'`---'`---^`---|`---'`---' ` '`---'` `---' +// `---' +// prettier-ignore +export const StageEntries: readonly StageEntry[] = [ + ["ak-provider-iframe-logout", () => import("#flow/providers/IFrameLogoutStage")], + ["ak-provider-oauth2-device-code", () => import("#flow/providers/oauth2/DeviceCode")], + ["ak-provider-oauth2-device-code-finish", () => import("#flow/providers/oauth2/DeviceCodeFinish")], + ["ak-provider-saml-native-logout", () => import("#flow/providers/saml/NativeLogoutStage")], + + ["ak-source-oauth-apple", "ak-flow-source-oauth-apple"], + ["ak-source-plex", "ak-flow-source-plex"], + ["ak-source-telegram", "ak-flow-source-telegram"], + + ["ak-stage-access-denied", () => import("#flow/stages/access_denied/AccessDeniedStage")], + ["ak-stage-authenticator-duo", () => import("#flow/stages/authenticator_duo/AuthenticatorDuoStage")], + ["ak-stage-authenticator-email", () => import("#flow/stages/authenticator_email/AuthenticatorEmailStage")], + ["ak-stage-authenticator-sms", () => import("#flow/stages/authenticator_sms/AuthenticatorSMSStage")], + ["ak-stage-authenticator-static", () => import("#flow/stages/authenticator_static/AuthenticatorStaticStage")], + ["ak-stage-authenticator-totp", () => import("#flow/stages/authenticator_totp/AuthenticatorTOTPStage")], + ["ak-stage-authenticator-validate", () => import("#flow/stages/authenticator_validate/AuthenticatorValidateStage")], + ["ak-stage-authenticator-webauthn"], + ["ak-stage-autosubmit", () => import("#flow/stages/autosubmit/AutosubmitStage")], + ["ak-stage-captcha", () => import("#flow/stages/captcha/CaptchaStage")], + ["ak-stage-consent", () => import("#flow/stages/consent/ConsentStage")], + ["ak-stage-dummy", () => import("#flow/stages/dummy/DummyStage")], + ["ak-stage-email", () => import("#flow/stages/email/EmailStage")], + ["ak-stage-endpoint-agent", "challenge", () => import("#flow/stages/endpoint/agent/EndpointAgentStage")], + ["ak-stage-flow-error"], + ["ak-stage-identification", () => import("#flow/stages/identification/IdentificationStage")], + ["ak-stage-password", () => import("#flow/stages/password/PasswordStage")], + ["ak-stage-prompt", () => import("#flow/stages/prompt/PromptStage")], + ["ak-stage-session-end", () => import("#flow/providers/SessionEnd")], + ["ak-stage-user-login", "challenge", () => import("#flow/stages/user_login/UserLoginStage")], + + ["xak-flow-frame", "challenge"], + ["xak-flow-redirect", "ak-stage-redirect"], +] diff --git a/web/src/flow/components/ak-brand-footer.ts b/web/src/flow/components/ak-brand-footer.ts index bd2dd4b1b0..dc8f6440e6 100644 --- a/web/src/flow/components/ak-brand-footer.ts +++ b/web/src/flow/components/ak-brand-footer.ts @@ -33,21 +33,33 @@ export class BrandLinks extends AKElement { public links: FooterLink[] = globalAK().brand.uiFooterLinks || []; render() { - return html`
    - ${map(this.links, (link) => { + const links = [ + ...this.links, + { + name: msg("Powered by authentik"), + href: null, + }, + ]; + return html`
      + ${map(links, (link, idx) => { const children = sanitizeHTML(BrandedHTMLPolicy, link.name); - if (link.href) { - return html`
    • - ${children} -
    • `; - } - - return html`
    • - ${children} + return html`
    • + ${link.href + ? html`${children}` + : children}
    • `; })} -
    • ${msg("Powered by authentik")}
    `; } } diff --git a/web/src/flow/components/types.ts b/web/src/flow/components/types.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/web/src/flow/FlowInspector.css b/web/src/flow/inspector/FlowInspector.css similarity index 100% rename from web/src/flow/FlowInspector.css rename to web/src/flow/inspector/FlowInspector.css diff --git a/web/src/flow/FlowInspector.ts b/web/src/flow/inspector/FlowInspector.ts similarity index 99% rename from web/src/flow/FlowInspector.ts rename to web/src/flow/inspector/FlowInspector.ts index ae70bda255..f4b163b2de 100644 --- a/web/src/flow/FlowInspector.ts +++ b/web/src/flow/inspector/FlowInspector.ts @@ -8,7 +8,7 @@ import { AKElement } from "#elements/Base"; import { listen } from "#elements/decorators/listen"; import { AKFlowAdvanceEvent, AKFlowInspectorChangeEvent } from "#flow/events"; -import Styles from "#flow/FlowInspector.css"; +import Styles from "#flow/inspector/FlowInspector.css"; import { FlowInspection, FlowsApi, Stage } from "@goauthentik/api"; diff --git a/web/src/flow/inspector/FlowInspectorButton.ts b/web/src/flow/inspector/FlowInspectorButton.ts new file mode 100644 index 0000000000..e5086a2cb2 --- /dev/null +++ b/web/src/flow/inspector/FlowInspectorButton.ts @@ -0,0 +1,85 @@ +import { AKElement } from "#elements/Base"; +import { listen } from "#elements/decorators/listen"; +import { CapabilitiesEnum, WithCapabilitiesConfig } from "#elements/mixins/capabilities"; + +import { AKFlowAdvanceEvent, AKFlowInspectorChangeEvent } from "#flow/events"; + +import { msg } from "@lit/localize"; +import { html, nothing, PropertyValues } from "lit"; +import { customElement, property, state } from "lit/decorators.js"; + +import PFButton from "@patternfly/patternfly/components/Button/button.css"; + +// Custom implementation because there are rules for when to show this. + +@customElement("ak-flow-inspector-button") +export class FlowInspectorButton extends WithCapabilitiesConfig(AKElement) { + public static readonly styles = [PFButton]; + + @property({ type: Boolean, reflect: true }) + public open = false; + + @state() + private available = false; + + @state() + private loaded = false; + + @listen(AKFlowInspectorChangeEvent) + protected _onInspectorToggle = (ev: AKFlowInspectorChangeEvent) => { + this.open = ev.open; + }; + + public override connectedCallback() { + super.connectedCallback(); + const inspector = new URLSearchParams(window.location.search).get("inspector"); + this.available = this.can(CapabilitiesEnum.CanDebug) || inspector !== undefined; + this.open = inspector === "" || inspector === "open"; + } + + protected toggle = () => { + this.open = !this.open; + }; + + public override render() { + return this.open || !this.available + ? nothing + : html``; + } + + public override firstUpdated(changed: PropertyValues) { + super.firstUpdated(changed); + if (this.open) { + window.dispatchEvent(new AKFlowAdvanceEvent()); + } + } + + // Only load the inspector if the user requests it. It should hydrate automatically + public override updated(changed: PropertyValues) { + super.updated(changed); + if (changed.has("open") && this.open && !this.loaded) { + import("#flow/inspector/FlowInspector").then(() => { + this.loaded = true; + }); + } + const drawer = document.getElementById("flow-drawer"); + if (changed.has("open") && drawer) { + drawer.classList.toggle("pf-m-expanded", this.open); + drawer.classList.toggle("pf-m-collapsed", !this.open); + } + } +} + +declare global { + interface HTMLElementTagNameMap { + "ak-flow-inspector-button": FlowInspectorButton; + } +} diff --git a/web/src/flow/stages/RedirectStage.ts b/web/src/flow/stages/RedirectStage.ts index 19e212ae21..0928ec8ade 100644 --- a/web/src/flow/stages/RedirectStage.ts +++ b/web/src/flow/stages/RedirectStage.ts @@ -8,7 +8,7 @@ import { FlowChallengeResponseRequest, RedirectChallenge } from "@goauthentik/ap import { msg } from "@lit/localize"; import { css, CSSResult, html, nothing, PropertyValues, TemplateResult } from "lit"; -import { customElement, property, state } from "lit/decorators.js"; +import { customElement, state } from "lit/decorators.js"; import PFButton from "@patternfly/patternfly/components/Button/button.css"; import PFForm from "@patternfly/patternfly/components/Form/form.css"; @@ -18,9 +18,6 @@ import PFTitle from "@patternfly/patternfly/components/Title/title.css"; @customElement("ak-stage-redirect") export class RedirectStage extends BaseStage { - @property({ type: Boolean }) - promptUser = false; - @state() startedRedirect = false; @@ -41,6 +38,14 @@ export class RedirectStage extends BaseStage): void { super.updated(changed); diff --git a/web/src/flow/stages/identification/IdentificationStage.ts b/web/src/flow/stages/identification/IdentificationStage.ts index 56daef0275..646537a61c 100644 --- a/web/src/flow/stages/identification/IdentificationStage.ts +++ b/web/src/flow/stages/identification/IdentificationStage.ts @@ -365,13 +365,13 @@ export class IdentificationStage extends BaseStage< const enrollmentItem = enrollUrl ? html`` : null; const recoveryItem = recoveryUrl ? html`` @@ -450,7 +450,6 @@ export class IdentificationStage extends BaseStage< ${msg("Use a security key")} ` diff --git a/web/src/flow/stages/password/PasswordStage.ts b/web/src/flow/stages/password/PasswordStage.ts index 18f55a42ea..d34f406e50 100644 --- a/web/src/flow/stages/password/PasswordStage.ts +++ b/web/src/flow/stages/password/PasswordStage.ts @@ -46,7 +46,6 @@ export class PasswordStage extends BaseStage ${msg("Additional actions")} ` : null} diff --git a/web/src/styles/authentik/components/Login/login.css b/web/src/styles/authentik/components/Login/login.css index 6219579d37..17e3650cf5 100644 --- a/web/src/styles/authentik/components/Login/login.css +++ b/web/src/styles/authentik/components/Login/login.css @@ -344,6 +344,10 @@ (var(--ak-c-login__footer--PaddingBlock) * 2) + (var(--pf-global--LineHeight--md) * 1rem) ); + /* Only applicable to the smallest of mobile viewports. */ + max-width: 100dvw; + overflow: hidden; + color: var(--ak-c-login__footer--Color); @media (max-width: 35rem) { diff --git a/web/src/styles/authentik/static.global.css b/web/src/styles/authentik/static.global.css index 4d8d2a99ab..3b988fccf1 100644 --- a/web/src/styles/authentik/static.global.css +++ b/web/src/styles/authentik/static.global.css @@ -63,6 +63,36 @@ --ak-c-login__footer--PaddingBlock: var(--pf-global--spacer--md); --ak-c-login__footer--Color: var(--ak-global--BackgroundColorContrast--100); + + --ak-c-login__footer--ColumnGap: min(var(--pf-global--spacer--2xl), 2dvw); + --ak-c-login__footer--RowGap: var(--pf-global--spacer--md); + + --ak-c-login__footer--Display: grid; + + --ak-c-login__footer--MaxWidth: var(--ak-c-login--MaxWidth); + /* Gracefully degrade to the login max width if CSS size functions are not supported. */ + --ak-c-login__footer--MaxWidth: min(100dvw, var(--ak-c-login--MaxWidth)); + + --ak-c-login__footer--TrackMin: max-content; + --ak-c-login__footer--TrackWidth: minmax( + var(--ak-c-login__footer--TrackMin), + var(--ak-c-login__footer--TrackMax) + ); + + --ak-c-login__footer--ItemMaxWidth: calc( + var(--ak-c-login__footer--MaxWidth) - var(--ak-c-login__footer--ColumnGap) + ); + + --ak-c-login__footer--ColumnCount: 4; + --ak-c-login__footer--TrackMax: calc( + (var(--ak-c-login__footer--MaxWidth) / var(--ak-c-login__footer--ColumnCount)) - + var(--ak-c-login__footer--ColumnGap) + ); + + @media (width <= 35rem) { + --ak-c-login__footer--TrackWidth: 1fr; + --ak-c-login__footer__list-item--FlexBasis: 100%; + } } [data-theme="dark"] .pf-c-login { @@ -93,6 +123,9 @@ --pf-c-login__main-footer-band--BackgroundColor: transparent; --pf-c-login__footer--c-list--xl--PaddingTop: 0; + --pf-c-login__footer--PaddingLeft: var(--pf-global--spacer--lg); + --pf-c-login__footer--PaddingRight: var(--pf-global--spacer--lg); + --pf-c-login__container--PaddingLeft: 0 !important; --pf-c-login__container--PaddingRight: 0 !important; } @@ -133,9 +166,45 @@ &::part(list) { --pf-c-list--m-inline--li--MarginRight: 0; + /* 3 entries is a unique scenario where 2 columns is visually balanced. */ + &[data-count="3"] { + --ak-c-login__footer--ColumnCount: 2; + } + justify-content: center; - column-gap: var(--pf-global--spacer--2xl); - row-gap: var(--pf-global--spacer--md); + column-gap: var(--ak-c-login__footer--ColumnGap); + row-gap: var(--ak-c-login__footer--RowGap); + + max-width: var(--ak-c-login__footer--MaxWidth); + place-items: center; + display: var(--ak-c-login__footer--Display); + + grid-template-columns: repeat( + var(--ak-c-login__footer--ColumnCount), + var(--ak-c-login__footer--TrackWidth) + ); + + grid-template-rows: + [header] max-content + [main] max-content + [footer]; + } + + [part="list-item"], + &::part(list-item) { + /* CSS grid is preferred, but if the custom CSS overrides this, default to something reasonable. */ + flex: 1 1 var(--ak-c-login__footer__list-item--FlexBasis, auto); + text-align: center; + max-width: var(--ak-c-login__footer--ItemMaxWidth); + + &[data-kind="text"] { + &[data-track-name="start"] { + grid-column: 1 / -1; + } + &[data-track-name="end"] { + grid-column: 1 / -1; + } + } } [part="list-item-link"], diff --git a/website/docs/add-secure-apps/providers/oauth2/device_code.md b/website/docs/add-secure-apps/providers/oauth2/device_code.md index d49ac68d6d..6359d39a9f 100644 --- a/website/docs/add-secure-apps/providers/oauth2/device_code.md +++ b/website/docs/add-secure-apps/providers/oauth2/device_code.md @@ -25,6 +25,17 @@ client_id=application_client_id& scope=openid email my-other-scope ``` +Alternatively the client id may be sent via the HTTP Authorization header: + +```http +POST /application/o/device/ HTTP/1.1 +Host: authentik.company +Content-Type: application/x-www-form-urlencoded +Authorization: Bearer YXBwbGljYXRpb25fY2xpZW50X2lkOg== + +scope=openid email my-other-scope +``` + The response contains the following fields: - `device_code`: Device code, which is the code kept on the device diff --git a/website/docs/developer-docs/docs/writing-documentation.md b/website/docs/developer-docs/docs/writing-documentation.md index af4715fda1..cf964fc8d7 100644 --- a/website/docs/developer-docs/docs/writing-documentation.md +++ b/website/docs/developer-docs/docs/writing-documentation.md @@ -34,10 +34,6 @@ Adhering to the following guidelines will help us get your PRs merged much easie - [docs templates](./templates/index.md) - [integration guide template](https://integrations.goauthentik.io/applications#add-a-new-application) -:::tip -If you encounter build check fails, or issues with your local build, you might need to run `make docs-install` in order to get the latest build tools and dependencies; we do occasionally update our build tools. -::: - ## Setting up a docs development environment ### Prerequisites @@ -83,7 +79,11 @@ Run the following command to install or update the build tools for both the tech make docs-install ``` -Installs or updates the build dependencies such as Docusaurus, Prettier, and ESLint. You should run this command when you are first setting up your writing environment, and also if you encounter build check fails either when you build locally or when you push your PR to the authentik repository. Running this command will grab any new dependencies that we might have added to our build tool package. +This command installs or updates the build dependencies such as Docusaurus, Prettier, and ESLint. You should run this command when you are first setting up your writing environment, and also if you encounter build check fails either when you build locally or when you push your PR to the authentik repository. Running this command will grab any new dependencies that we might have added to our build tool package. + +:::tip +If you have the [full development environment](../setup/full-dev-environment.mdx) installed you can run `make install` to get all of the latest build tools and dependencies, not just those for building documentation. +::: ## Writing or modifying technical docs diff --git a/website/docs/developer-docs/setup/full-dev-environment.mdx b/website/docs/developer-docs/setup/full-dev-environment.mdx index ff405bb408..0d75b3cc08 100644 --- a/website/docs/developer-docs/setup/full-dev-environment.mdx +++ b/website/docs/developer-docs/setup/full-dev-environment.mdx @@ -126,7 +126,7 @@ make migrate ``` :::info -If you ever want to start over, use `make dev-reset` which drops and restores the authentik PostgreSQL database to the state after `make migrate`. +If you ever want to start over, use `make dev-reset` which drops and restores the authentik PostgreSQL database to the state it was after you ran after `make migrate`. ::: ## 5. Running authentik @@ -174,6 +174,18 @@ make web-watch When `AUTHENTIK_DEBUG` is set to `true` (the default for the development environment), the authentik server automatically reloads whenever changes are made to the code. However, due to instabilities in the reloading process of the worker, that behavior is turned off for the worker. You can enable code reloading in the worker by manually running `uv run ak worker --watch`. +## Troubleshooting + +### Recovery key + +If you can't login anymore or the authentication flow repeats (perhaps due to an incorrectly configured stage or a failed flow import), you can create a recovery key by running this command in your terminal: + +`uv run ak create_recovery_key 10 akadmin` + +Copy the generated recovery key and paste it into the URL, after the domain. For example: + +`http://localhost:9000/recovery/use-token/ChFk2nJKJKJKY9OdIc8yv6RCgpGYp5rdndBhR6qHoHoJoWDdlvLuvU/` + ## End-to-End (E2E) Setup Start the E2E test services with the following command: diff --git a/website/docs/users-sources/access-control/initial_permissions.mdx b/website/docs/users-sources/access-control/initial_permissions.mdx index b065d21388..8235c8d606 100644 --- a/website/docs/users-sources/access-control/initial_permissions.mdx +++ b/website/docs/users-sources/access-control/initial_permissions.mdx @@ -29,7 +29,7 @@ The fundamental steps to implement initial permissions are as follows: Because the new initial permissions object is coupled with the role (and that role is assigned to a group), the initial permissions object is applied automatically to any new objects (users or flows or any object) that the member user creates. :::info -Typically, initial permissions are assigned to non-super-user, non-administrator roles. In this scenario, the administrator needs to verify that the user has the `Can view Admin interface` permission (which allows the user to access the Admin interface). For details, see Step 5 below. +Typically, initial permissions are assigned to non-super-user, non-administrator roles. In this scenario, the administrator needs to verify that the user has the `Can access Admin interface` permission (which allows the user to access the Admin interface). For details, see Step 5 below. Be aware that any rights beyond viewing the Admin interface will need to be assigned as well; for example, if you want a non-administrator user to be able to create flows in the Admin interface, you need to grant those global permissions to add flows. ::: @@ -53,6 +53,6 @@ To create a new set of initial permissions and apply them to a role, follow thes - **Permissions**: select all permissions to add to the initial permissions object. -5. To ensure that the role to which you assign the initial permissions _also_ has access to the Admin interface, check to see if the users also need [the global permission `Can view admin interface`](./manage_permissions.md#assign-can-view-admin-interface-permissions). Furthermore, verify that the user(s) has the global permissions to add specific objects. +5. To ensure that the role to which you assign the initial permissions _also_ has access to the Admin interface, check to see if the users also need [the global permission `Can access admin interface`](./manage_permissions.md#assign-can-access-admin-interface-permissions). Furthermore, verify that the user(s) has the global permissions to add specific objects. 6. Optionally, create new users and add them to the group. Each new user added to the group will automatically have the set of permissions included within the initial permissions object. diff --git a/website/docs/users-sources/access-control/manage_permissions.md b/website/docs/users-sources/access-control/manage_permissions.md index 30fb39e982..cb924329b9 100644 --- a/website/docs/users-sources/access-control/manage_permissions.md +++ b/website/docs/users-sources/access-control/manage_permissions.md @@ -69,11 +69,11 @@ To assign or remove _global_ permissions for a role: 1. Select the permission(s) you'd like to remove. 2. Click **Delete Object Permission**. -### Assign `Can view Admin interface` permissions +### Assign `Can access admin interface` permissions You can use a role to grant regular users, who are not superusers nor Admins, the right to view the Admin interface. This can be useful in scenarios where you have a team who needs to be able to create certain objects (flows, other users, etc) but who should not have _full_ access to the Admin interface. -To assign the `Can view Admin interface` permission to a role: +To assign the `Can access Admin interface` permission to a role: 1. Go to the Admin interface and navigate to **Directory > Role**. 2. Select a specific role by clicking on the role's name. diff --git a/website/docs/users-sources/access-control/permissions.md b/website/docs/users-sources/access-control/permissions.md index d5586f6336..be9243b8d3 100644 --- a/website/docs/users-sources/access-control/permissions.md +++ b/website/docs/users-sources/access-control/permissions.md @@ -32,7 +32,7 @@ Additionally, authentik employs _initial permissions_ to streamline the process ### Global permissions -Global permissions define coarse-grained access control. For example, a role with a global permission of "Can change Flow" can change any [flow](../../add-secure-apps/flows-stages/flow/index.md). Some permissions only make sense as global permissions, e.g. the permission to add a specific object type or whether a user [`Can view admin interface`](./manage_permissions.md#assign-can-view-admin-interface-permissions). +Global permissions define coarse-grained access control. For example, a role with a global permission of "Can change Flow" can change any [flow](../../add-secure-apps/flows-stages/flow/index.md). Some permissions only make sense as global permissions, e.g. the permission to add a specific object type or whether a user [`Can access admin interface`](./manage_permissions.md#assign-can-access-admin-interface-permissions). ### Object permissions diff --git a/website/docs/users-sources/sources/social-logins/github/index.mdx b/website/docs/users-sources/sources/social-logins/github/index.mdx index d272a31e40..fc81f24542 100644 --- a/website/docs/users-sources/sources/social-logins/github/index.mdx +++ b/website/docs/users-sources/sources/social-logins/github/index.mdx @@ -1,11 +1,11 @@ --- -title: Github +title: GitHub tags: - source - github --- -Allows users to authenticate using their Github credentials by configuring GitHub as a federated identity provider via OAuth2. +Allows users to authenticate using their GitHub credentials by configuring GitHub as a federated identity provider via OAuth2. ## Preparation @@ -14,9 +14,9 @@ The following placeholders are used in this guide: - `authentik.company` is the FQDN of the authentik installation. - `www.my.company` is the Homepage URL for your site -## Github configuration +## GitHub configuration -To integrate GitHub with authentik you will need to create an OAuth application in GitHub Developer Settings. +To integrate GitHub with authentik, you need to create an OAuth application in GitHub Developer Settings. 1. Log in to GitHub and open the [Developer Settings](https://github.com/settings/developers) menu. 2. Create an OAuth app by clicking on the **Register a new application** button and set the following values: @@ -70,7 +70,7 @@ from authentik.sources.oauth.models import OAuthSource # Set this value accepted_org = "your_organization" -# Ensure flow is only run during oauth logins via Github +# Ensure flow is only run during OAuth logins via GitHub if not isinstance(context['source'], OAuthSource) or context["source"].provider_type != "github": return True @@ -81,7 +81,7 @@ access_token = connection.access_token # We also access the user info authentik already retrieved, to get the correct username github_username = context["oauth_userinfo"] -# Github does not include Organizations in the userinfo endpoint, so we have to call another URL +# GitHub does not include organizations in the userinfo endpoint, so we have to call another URL orgs_response = requests.get( "https://api.github.com/user/orgs", auth=(github_username["login"], access_token), diff --git a/website/integrations/chat-communication-collaboration/chatgpt/index.mdx b/website/integrations/chat-communication-collaboration/chatgpt/index.mdx index 5f1daa610f..4ca9173289 100644 --- a/website/integrations/chat-communication-collaboration/chatgpt/index.mdx +++ b/website/integrations/chat-communication-collaboration/chatgpt/index.mdx @@ -141,7 +141,7 @@ ChatGPT only enables the **Manage SSO** wizard after you verify ownership of you To verify that authentik is correctly integrated with ChatGPT, log out, then attempt to log back in by entering your email address and clicking **Continue**. You should be redirected to authentik and upon a successful login, redirected back to ChatGPT. -## References +## Resources - [OpenAI Help - Configuring SSO for ChatGPT](https://help.openai.com/en/articles/9534785-configuring-sso-for-chatgpt) - [OpenAI Help - SSO for ChatGPT Business - FAQ](https://help.openai.com/en/articles/11489188-sso-for-chatgpt-business-faq) diff --git a/website/integrations/chat-communication-collaboration/joplin/index.md b/website/integrations/chat-communication-collaboration/joplin/index.md index 1fcbad7c52..6b419e162f 100644 --- a/website/integrations/chat-communication-collaboration/joplin/index.md +++ b/website/integrations/chat-communication-collaboration/joplin/index.md @@ -115,6 +115,6 @@ LOCAL_AUTH_ENABLED="false" To confirm that authentik is properly configured with Joplin Server, log out of Joplin and then attempt to sign in again. The login page should redirect you to authentik; after a successful authentik login you should be returned to Joplin with access to your notes. -## References +## Resources - [Joplin Server – SAML configuration](https://joplinapp.org/help/apps/server/saml/) diff --git a/website/integrations/chat-communication-collaboration/mastodon/index.md b/website/integrations/chat-communication-collaboration/mastodon/index.md index 057ef838eb..e57ab6d0ad 100644 --- a/website/integrations/chat-communication-collaboration/mastodon/index.md +++ b/website/integrations/chat-communication-collaboration/mastodon/index.md @@ -68,7 +68,7 @@ OIDC_SECURITY_ASSUME_EMAIL_IS_VERIFIED=true Restart mastodon-web.service -## Additional Resources +## Resources - https://github.com/mastodon/mastodon/pull/16221 - https://forum.fedimins.net/t/sso-fuer-verschiedene-dienste/42 diff --git a/website/integrations/chat-communication-collaboration/mobilizon/index.md b/website/integrations/chat-communication-collaboration/mobilizon/index.md index 4996c68383..af95cd181a 100644 --- a/website/integrations/chat-communication-collaboration/mobilizon/index.md +++ b/website/integrations/chat-communication-collaboration/mobilizon/index.md @@ -68,6 +68,6 @@ config :ueberauth, Ueberauth.Strategy.Keycloak.OAuth, Restart mobilizon.service -## Additional Resources +## Resources - https://docs.mobilizon.org/3.%20System%20administration/configure/auth/#oauth diff --git a/website/integrations/chat-communication-collaboration/roundcube/index.md b/website/integrations/chat-communication-collaboration/roundcube/index.md index f60ce60b9e..9d39f4563c 100644 --- a/website/integrations/chat-communication-collaboration/roundcube/index.md +++ b/website/integrations/chat-communication-collaboration/roundcube/index.md @@ -126,7 +126,7 @@ With this setup, Dovecot can also be used with other email clients that support To verify that authentik is correctly integrated with Roundcube, first log out of Roundcube. Log in to roundcube using authentik credentials. A mailbox should open and you should be able to send and receive mail. -## References +## Resources - [Roundcube documentation - Configuration: OAuth2](https://github.com/roundcube/roundcubemail/wiki/Configuration:-OAuth2) - [Dovecot documentation - Open Authentication v2.0 Database](https://doc.dovecot.org/main/core/config/auth/databases/oauth2.html) diff --git a/website/integrations/chat-communication-collaboration/writefreely/index.md b/website/integrations/chat-communication-collaboration/writefreely/index.md index a3b457028e..27e3089601 100644 --- a/website/integrations/chat-communication-collaboration/writefreely/index.md +++ b/website/integrations/chat-communication-collaboration/writefreely/index.md @@ -99,6 +99,6 @@ If your usernames in authentik and WriteFreely are different, you might need to To link the accounts, first log into Writefreely with local credentials, and then navigate to **Customize -->Account Settings**. In the option "Linked Accounts", click on "authentik". -## Additional Resources +## Resources - https://writefreely.org/docs/latest/admin/config diff --git a/website/integrations/chat-communication-collaboration/zulip/index.md b/website/integrations/chat-communication-collaboration/zulip/index.md index 09a7e5a503..6d3374f665 100644 --- a/website/integrations/chat-communication-collaboration/zulip/index.md +++ b/website/integrations/chat-communication-collaboration/zulip/index.md @@ -82,7 +82,7 @@ The certificate file name must match the idp identifier name you set in the conf Remember to restart Zulip. ::: -## Additional Resources +## Resources Please refer to the following for further information: diff --git a/website/integrations/cloud-providers/digitalocean/index.md b/website/integrations/cloud-providers/digitalocean/index.md index 7361910896..335dd36bb2 100644 --- a/website/integrations/cloud-providers/digitalocean/index.md +++ b/website/integrations/cloud-providers/digitalocean/index.md @@ -90,7 +90,7 @@ To support the integration of DigitalOcean with authentik, you need to create a 3. Click **Edit**, expand **UI Settings**, and set **Launch URL** to the **SSO sign-in URL** copied from the DigitalOcean control panel. 4. Click **Update**. -## References +## Resources - [DigitalOcean Documentation - How to Configure Single Sign-On for Teams](https://docs.digitalocean.com/platform/teams/how-to/configure-sso/) diff --git a/website/integrations/cloud-providers/ovhcloud/index.md b/website/integrations/cloud-providers/ovhcloud/index.md index ff5055582a..0c9366e09e 100644 --- a/website/integrations/cloud-providers/ovhcloud/index.md +++ b/website/integrations/cloud-providers/ovhcloud/index.md @@ -61,7 +61,7 @@ To verify that authentik is properly integrated with OVHcloud, first log out of You’ll be redirected to your authentik instance to complete authentication. Once successful, you’ll be logged in to OVHcloud. -## References +## Resources - [OVHcloud Help Center - User management & Federation](https://help.ovhcloud.com/csm/en-ie-documentation-manage-operate-user-federation?id=kb_browse_cat&kb_id=3d4a8129a884a950f07829d7d5c75243&kb_category=21734cbe50d47d90476b12dfd60b3542&spa=1) - [OVHcloud US Help Center - User management & Federation](https://support.us.ovhcloud.com/hc/en-us/sections/27230986868883-Federation) diff --git a/website/integrations/documentation/snipe-it/index.md b/website/integrations/documentation/snipe-it/index.md index 95954442b5..c6b377fb0a 100644 --- a/website/integrations/documentation/snipe-it/index.md +++ b/website/integrations/documentation/snipe-it/index.md @@ -153,7 +153,7 @@ Configure Snipe-IT SAML settings by going to settings (the gear icon), and selec All other field can be left blank. -## Additional Resources +## Resources - https://snipe-it.readme.io/docs/ldap-sync-login - https://snipe-it.readme.io/docs/saml diff --git a/website/integrations/hypervisors-orchestrators/arcane/index.md b/website/integrations/hypervisors-orchestrators/arcane/index.md index 183e4c27ab..a71b60cc8f 100644 --- a/website/integrations/hypervisors-orchestrators/arcane/index.md +++ b/website/integrations/hypervisors-orchestrators/arcane/index.md @@ -76,7 +76,7 @@ OIDC_SCOPES="openid email profile" Then restart Arcane to apply the changes. -## References +## Resources - [Arcane Docs - OIDC Single Sign-On](https://getarcane.app/docs/configuration/sso) diff --git a/website/integrations/infrastructure/sssd/index.md b/website/integrations/infrastructure/sssd/index.md index 1cfdaf486c..e547e789fb 100644 --- a/website/integrations/infrastructure/sssd/index.md +++ b/website/integrations/infrastructure/sssd/index.md @@ -104,7 +104,7 @@ Please note that by default, sssd returns all user accounts; active and disabled ::: -## Additional Resources +## Resources The setup of sssd might vary based on Linux distribution and version; here are some resources that can help you get this set up: diff --git a/website/integrations/infrastructure/truecommand/index.md b/website/integrations/infrastructure/truecommand/index.md index 01b5fbfb5d..b3b384717a 100644 --- a/website/integrations/infrastructure/truecommand/index.md +++ b/website/integrations/infrastructure/truecommand/index.md @@ -85,6 +85,6 @@ To support the integration of TrueCommand with authentik, you need to create an - SAML Identity Provider URL: `Paste the Metadata URL from your clipboard.` - Click _Save_, then click _Configure_ again then select _Start the SAML service_, then click _Save_ to start the service. -## Additional Resources +## Resources - https://www.truenas.com/docs/truecommand/administration/settings/samlad/ diff --git a/website/integrations/infrastructure/zammad/index.md b/website/integrations/infrastructure/zammad/index.md index e96a00693a..297e4d7742 100644 --- a/website/integrations/infrastructure/zammad/index.md +++ b/website/integrations/infrastructure/zammad/index.md @@ -4,6 +4,9 @@ sidebar_label: Zammad support_level: community --- +import TabItem from "@theme/TabItem"; +import Tabs from "@theme/Tabs"; + ## What is Zammad > Zammad is a web-based, open source user support/ticketing solution. @@ -22,6 +25,18 @@ The following placeholders are used in this guide: This documentation lists only the settings that you need to change from their default values. Be aware that any changes other than those explicitly mentioned in this guide could cause issues accessing your application. ::: +## Configuration methods + +There are two ways to configure single sign-on for Zammad; SAML or OIDC. + + + + ## authentik configuration To support the integration of Zammad with authentik, you need to create an application/provider pair in authentik. @@ -30,19 +45,18 @@ To support the integration of Zammad with authentik, you need to create an appli 1. Log in to authentik as an administrator and open the authentik Admin interface. 2. Navigate to **Applications** > **Applications** and click **Create with Provider** to create an application and provider pair. (Alternatively you can first create a provider separately, then create the application and connect it with the provider.) - -- **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings. Take note of the **slug** as it will be required later. -- **Choose a Provider type**: select **SAML Provider** as the provider type. -- **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - - Set the **ACS URL** `bd>https://zammad.company/auth/saml/callback`. - - Set the **Issuer** to `https://zammad.company/auth/saml/metadata`. - - Set the **Audience** to `https://zammad.company/auth/saml/metadata`. - - Set the **Service Provider Binding** to `Post`. - - Set the **SLS URL** to `https://zammad.company/auth/saml/slo`. - - Set the **SLS Binding** to `Redirect`. - - Set the **Logout Method** to `Front-channel (Iframe)`. - - Under **Advanced protocol settings**, select an available **Signing certificate**. -- **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page. + - **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings. Take note of the **slug** as it will be required later. + - **Choose a Provider type**: select **SAML Provider** as the provider type. + - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. + - Set the **ACS URL** to `https://zammad.company/auth/saml/callback`. + - Set the **Issuer** to `https://zammad.company/auth/saml/metadata`. + - Set the **Audience** to `https://zammad.company/auth/saml/metadata`. + - Set the **Service Provider Binding** to `Post`. + - Set the **SLS URL** to `https://zammad.company/auth/saml/slo`. + - Set the **SLS Binding** to `Redirect`. + - Set the **Logout Method** to `Front-channel (Iframe)`. + - Under **Advanced protocol settings**, select an available **Signing certificate**. + - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page. 3. Click **Submit** to save the new application and provider. @@ -56,16 +70,68 @@ To support the integration of Zammad with authentik, you need to create an appli To configure Zammad's integration with authentik, go to **Settings** (the gear icon) and select **Security** > **Third-party Applications**. Next, activate the **Authentication via SAML** toggle and change the following fields: +1. Set the following fields: - **Display name**: authentik - - **IDP SSO target URL**: `https://authentik.company/application/saml//sso/binding/post/` + - **IDP SSO target URL**: `https://authentik.company/application/saml//sso/binding/redirect/` - **IDP single logout target URL**: `https://authentik.company/application/saml//slo/binding/redirect/` + - **IDP Certificate**: paste the contents of your certificate file. + - **IDP certificate fingerprint**: Leave this empty. + - **Name Identifier Format**: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress` + - **Automatic account link on initial logon**: Enable this to automatically create Zammad users when they sign in using authentik for the first time. +2. Click **Submit** to save the authentication settings. -- **IDP Certificate**: paste the contents of your certificate file. -- **IDP certificate fingerprint**: Leave this empty. -- **Name Identifier Format**: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress` -- **Automatic account link on initial logon**: Enable this to automatically create Zammad users when they sign in using authentik for the first time. +:::info +The **SSL verification** can fail when Zammad tries to connect to authentik directly, while accessing authentik in your browser works perfectly fine. You may have to disable the verification in order to save the configuration. See https://github.com/zammad/zammad/issues/5225 for details. +::: -## Additional Resources + -- https://admin-docs.zammad.org/en/latest/settings/security/third-party/saml.html -- https://community.zammad.org/t/saml-authentication-with-authentik-saml-login-url-and-auto-assign-permission/10876/3 + + +## authentik configuration + +To support the integration of Zammad with authentik, you need to create an application/provider pair in authentik. + +### Create an application and provider in authentik + +1. Log in to authentik as an administrator and open the authentik Admin interface. +2. Navigate to **Applications** > **Applications** and click **Create with Provider** to create an application and provider pair. (Alternatively you can first create a provider separately, then create the application and connect it with the provider.) + - **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings. + - **Choose a Provider type**: select **OAuth2/OpenID Connect** as the provider type. + - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. + - Set the **Client type** to `Public`. + - Take note of the **Client ID** and **slug** values because they will be required later. + - Set the **Redirect URIs/Origins** to `Strict` / `https://zammad.company/auth/openid_connect/callback`. + - Select a **Signing Key**. + - Under **Advanced protocol settings**, set **Subject mode** to **Based on the User's Email**. + - **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/bindings-overview/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page. + +3. Click **Submit** to save the new application and provider. + +## Zammad configuration + +To configure Zammad's integration with authentik, go to **Settings** (the gear icon) and select **Security** > **Third-party Applications**. Next, activate the **Authentication via OpenID Connect** toggle and change the following fields: + +1. Set the following fields: + - **Display name**: authentik + - **Identifier**: the **Client ID** from above. + - **Issuer**: `https://authentik.company/application/o//` + - **PKCE**: set to **yes**. + +2. Click **Submit** to save the authentication settings. + +At the very top of the **Third-party Applications** page are a few additional settings: + +- **Automatic account link on initial logon**: Enable this to automatically link existing Zammad users when they sign in using authentik for the first time. + + + + +## Configuration verification + +To verify that authentik is correctly integrated with Zammad, log out of Zammad and then log back in by clicking the SAML or OIDC button on the login screen. The button will show the **Display Name** you specified above. You should be redirected to authentik to log in, and if the process is successful, you'll be logged in to the Zammad dashboard. + +## Resources + +- [Zammad Admin Documentation - SAML](https://admin-docs.zammad.org/en/latest/settings/security/third-party/saml.html) +- [Zammad Admin Documentation - OpenID Connect](https://admin-docs.zammad.org/en/latest/settings/security/third-party/openid-connect.html) diff --git a/website/integrations/media/audiobookshelf/index.md b/website/integrations/media/audiobookshelf/index.md index 1153f34641..0ba113feb5 100644 --- a/website/integrations/media/audiobookshelf/index.md +++ b/website/integrations/media/audiobookshelf/index.md @@ -69,6 +69,6 @@ To bypass SSO for troubleshooting, navigate to `https://audiobookshelf.company/l To confirm that authentik is properly configured with Audiobookshelf, log out and attempt to log back in using OpenID Connect. You should be redirected to authentik for authentication and then redirected back to Audiobookshelf. -## References +## Resources - [Audiobookshelf OIDC Authentication documentation](https://www.audiobookshelf.org/guides/oidc_authentication/) diff --git a/website/integrations/miscellaneous/ezbookkeeping/index.mdx b/website/integrations/miscellaneous/ezbookkeeping/index.mdx index a110836ffb..3db6373677 100644 --- a/website/integrations/miscellaneous/ezbookkeeping/index.mdx +++ b/website/integrations/miscellaneous/ezbookkeeping/index.mdx @@ -101,6 +101,6 @@ If you're already signed in, go to **User Settings** > **Security** and click ** To confirm that authentik is properly configured with ezBookkeeping, log out of ezBookkeeping, click **Log in with authentik**, and complete the authentik sign-in flow. A successful authentication should return you to ezBookkeeping with access to your account. -## References +## Resources - [ezBookkeeping Documentation - Configuration](https://ezbookkeeping.mayswind.net/configuration#authentication) diff --git a/website/integrations/miscellaneous/open-webui/index.md b/website/integrations/miscellaneous/open-webui/index.md index 6c6e7af39a..2dd4aa6d01 100644 --- a/website/integrations/miscellaneous/open-webui/index.md +++ b/website/integrations/miscellaneous/open-webui/index.md @@ -80,6 +80,6 @@ Click on the user whose role should be increased from **Pending** to at least ** More details on how to administer Open WebUI can be found here: `https://docs.openwebui.com/`. ::: -## References +## Resources - [Open WebUI Documentation - Federated Authentication Support](https://docs.openwebui.com/features/sso/) diff --git a/website/integrations/monitoring/gatus/index.mdx b/website/integrations/monitoring/gatus/index.mdx index bbcf5311ba..fb05bab06a 100644 --- a/website/integrations/monitoring/gatus/index.mdx +++ b/website/integrations/monitoring/gatus/index.mdx @@ -56,11 +56,11 @@ OIDC_CLIENT_SECRET= ```yaml showLineNumbers title="config.yaml" security: oidc: - issuer-url: https://authentik.company/application/o// - client-id: $\{OIDC_CLIENT_ID} - client-secret: $\{OIDC_CLIENT_SECRET} - redirect-url: https://gatus.company/authorization-code/callback - scopes: [openid] + issuer-url: "https://authentik.company/application/o//" + client-id: "OIDC_CLIENT_ID" + client-secret: "OIDC_CLIENT_SECRET" + redirect-url: "https://gatus.company/authorization-code/callback" + scopes: ["openid"] ``` ## Configuration verification diff --git a/website/integrations/monitoring/pulse/index.md b/website/integrations/monitoring/pulse/index.md index ed6e059107..ac62debb1d 100644 --- a/website/integrations/monitoring/pulse/index.md +++ b/website/integrations/monitoring/pulse/index.md @@ -67,6 +67,6 @@ To hide the local login form and show only SSO, set `PULSE_AUTH_HIDE_LOCAL_LOGIN To confirm that authentik is properly configured with Pulse, log out and attempt to log back in using Single Sign-On. You should be redirected to authentik for authentication and then redirected back to Pulse. -## References +## Resources - [Pulse OIDC Single Sign-On documentation](https://github.com/rcourtman/Pulse/blob/main/docs/OIDC.md) diff --git a/website/integrations/monitoring/wazuh/index.mdx b/website/integrations/monitoring/wazuh/index.mdx index db6e7aa5be..64c598a26b 100644 --- a/website/integrations/monitoring/wazuh/index.mdx +++ b/website/integrations/monitoring/wazuh/index.mdx @@ -58,7 +58,7 @@ To support the integration of Wazuh with authentik, you need to create a group, - **Application**: provide a descriptive name (e.g., `Wazuh`), an optional group for the type of application, the policy engine mode, and optional UI settings. - **Choose a Provider type**: Select **SAML Provider** as the provider type. - **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations. - - **ACS URL**: `https://wazuh-dashboard.company/\_opendistro/\_security/saml/acs` + - **ACS URL**: `https://wazuh-dashboard.company/_opendistro/_security/saml/acs` - **Issuer**: `wazuh-saml` - **Service Provider Binding**: `Post` - Under **Advanced protocol settings**: diff --git a/website/integrations/networking/fortigate-ssl/index.md b/website/integrations/networking/fortigate-ssl/index.md index f9856b34fe..bc0353336c 100644 --- a/website/integrations/networking/fortigate-ssl/index.md +++ b/website/integrations/networking/fortigate-ssl/index.md @@ -139,7 +139,7 @@ If you encounter any issues: - Check the FortiGate logs for SAML-related errors ::: -## Additional Resources +## Resources - [FortiGate SSLVPN Documentation](https://docs.fortinet.com/document/fortigate/7.2.8/administration-guide/397719/ssl-vpn) - [FortiGate SAML Configuration Guide](https://docs.fortinet.com/document/fortigate/7.2.8/administration-guide/954635/saml-sp) diff --git a/website/integrations/platforms/drupal/index.md b/website/integrations/platforms/drupal/index.md index 886d0ea97a..8040fd3bdc 100644 --- a/website/integrations/platforms/drupal/index.md +++ b/website/integrations/platforms/drupal/index.md @@ -66,7 +66,7 @@ If you are developing Drupal locally with DDEV and authentik is also running loc TODO -## Additional Resources +## Resources - [Drupal OpenID Connect Module Documentation](https://www.drupal.org/project/openid_connect) - [Drupal User Account Settings Documentation](https://www.drupal.org/docs/user_guide/en/user-registration.html) diff --git a/website/integrations/platforms/microsoft/index.md b/website/integrations/platforms/microsoft/index.md index 1d66386936..6692300626 100644 --- a/website/integrations/platforms/microsoft/index.md +++ b/website/integrations/platforms/microsoft/index.md @@ -184,7 +184,7 @@ New-MgDomainFederationConfiguration ` To confirm that authentik is properly configured with Microsoft365, log out of your Microsoft account, then attempt to log back in by visiting [Microsoft 365 Portal](https://m365.cloud.microsoft/) and clicking **Sign In**. Enter an email address in your federated domain, then click **Next**. You should be redirected to authentik and, once authenticated, redirected back to Microsoft and logged in. -## References +## Resources - [Microsoft Learn - Use a SAML 2.0 Identity Provider for Single Sign On](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-fed-saml-idp) - [Microsoft Graph PowerShell - Domain Federation Configuration](https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.directorymanagement/new-mgdomainfederationconfiguration) diff --git a/website/integrations/platforms/salesforce/index.md b/website/integrations/platforms/salesforce/index.md index fdc11ff4d2..9599d697d4 100644 --- a/website/integrations/platforms/salesforce/index.md +++ b/website/integrations/platforms/salesforce/index.md @@ -252,7 +252,7 @@ Salesforce requires specific SCIM attributes that are not included in the defaul 4. In the **Backchannel Providers** field, select the SCIM provider you created. 5. Click **Update** to save the application. -## References +## Resources - [Salesforce Help - Configure SSO with Salesforce as a SAML Service Provider](https://help.salesforce.com/s/articleView?id=sf.sso_saml.htm&type=5) - [Salesforce Help - Just-in-Time SAML Assertion Fields for Salesforce](https://help.salesforce.com/s/articleView?id=sf.sso_jit_requirements.htm&type=5) diff --git a/website/integrations/security/vaultwarden/index.md b/website/integrations/security/vaultwarden/index.md index 2dfd5080b0..f392cecee2 100644 --- a/website/integrations/security/vaultwarden/index.md +++ b/website/integrations/security/vaultwarden/index.md @@ -72,7 +72,7 @@ SSO_ENABLED=true SSO_AUTHORITY=https://authentik.company/application/o// SSO_CLIENT_ID= SSO_CLIENT_SECRET= -SSO_SCOPES="openid email profile offline_access" +SSO_SCOPES=email profile offline_access SSO_ALLOW_UNKNOWN_EMAIL_VERIFICATION=false SSO_CLIENT_CACHE_EXPIRATION=0 SSO_ONLY=false # Set to true to disable email+master password login and require SSO @@ -81,7 +81,7 @@ SSO_SIGNUPS_MATCH_EMAIL=true # Match first SSO login to existing account by emai Then restart Vaultwarden to apply the changes. -## References +## Resources - [Vaultwarden Wiki - SSO using OpenID Connect](https://github.com/dani-garcia/vaultwarden/wiki/Enabling-SSO-support-using-OpenId-Connect) diff --git a/website/integrations/template/service.md b/website/integrations/template/service.md index 723943f32d..4f74e64605 100644 --- a/website/integrations/template/service.md +++ b/website/integrations/template/service.md @@ -54,7 +54,7 @@ Template sentence that you can typically use here: "To confirm that authentik is If there are more specific validation methods for the Service (e.g., clicking a button), include these instructions for clarity. -## References +## Resources List the external sources (official docs, community articles, blogs, videos) that were used to create this guide. diff --git a/website/package-lock.json b/website/package-lock.json index b4407430b6..e056e131b1 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -17,8 +17,8 @@ ], "dependencies": { "@eslint/js": "^9.39.1", - "@goauthentik/eslint-config": "^1.1.1", - "@goauthentik/prettier-config": "^3.2.1", + "@goauthentik/eslint-config": "^1.2.1", + "@goauthentik/prettier-config": "^3.4.0", "@goauthentik/tsconfig": "^1.0.5", "@types/node": "^25.0.0", "@typescript-eslint/eslint-plugin": "^8.48.0", @@ -29,8 +29,8 @@ "netlify-redirect-parser": "^14.4.0", "npm-run-all": "^4.1.5", "postman-code-generators": "2.1.0", - "prettier": "^3.7.3", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript-eslint": "^8.48.0" }, "engines": { @@ -138,7 +138,6 @@ "dependencies": { "@docusaurus/preset-classic": "^3.9.2", "@goauthentik/docusaurus-config": "^2.2.2", - "@iconify-json/logos": "^1.2.9", "@types/semver": "^7.7.1", "clsx": "^2.1.1", "fast-glob": "^3.3.3", @@ -382,7 +381,6 @@ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.46.0.tgz", "integrity": "sha512-22SHEEVNjZfFWkFks3P6HilkR3rS7a6GjnCIqR22Zz4HNxdfT0FG+RE7efTcFVfLUkTTMQQybvaUcwMrHXYa7Q==", "license": "MIT", - "peer": true, "dependencies": { "@algolia/client-common": "5.46.0", "@algolia/requester-browser-xhr": "5.46.0", @@ -538,7 +536,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2373,7 +2370,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2396,7 +2392,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -2506,7 +2501,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2928,7 +2922,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3682,7 +3675,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.9.2.tgz", "integrity": "sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/babel": "3.9.2", "@docusaurus/bundler": "3.9.2", @@ -4002,7 +3994,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/logger": "3.9.2", @@ -4271,7 +4262,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.9.2.tgz", "integrity": "sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/mdx-loader": "3.9.2", "@docusaurus/module-type-aliases": "3.9.2", @@ -4414,7 +4404,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.9.2.tgz", "integrity": "sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/logger": "3.9.2", "@docusaurus/types": "3.9.2", @@ -4460,7 +4449,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.9.2.tgz", "integrity": "sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A==", "license": "MIT", - "peer": true, "dependencies": { "@docusaurus/logger": "3.9.2", "@docusaurus/utils": "3.9.2", @@ -4801,9 +4789,9 @@ "link": true }, "node_modules/@goauthentik/eslint-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@goauthentik/eslint-config/-/eslint-config-1.1.1.tgz", - "integrity": "sha512-IOCQjBvD2FeUD0m1eAVhLTYxPM5pKA7UBEbub2QQYJAm7Ny8gNIA1jVoYRomYBRTundWJa5Y6iy1zN52r6Qofw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@goauthentik/eslint-config/-/eslint-config-1.2.1.tgz", + "integrity": "sha512-Il47UJolIPG2j671iV64QcX5DCScorm70m0rjr7wsGcSDvc/CflD04fHKwXH4Ud+Hs5khJD4LQp2usTZT/Bi/g==", "license": "MIT", "dependencies": { "eslint": "^9.39.1", @@ -4815,13 +4803,13 @@ }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0", "typescript": "^5.9.3", - "typescript-eslint": "^8.47.0" + "typescript-eslint": "^8.49.0" }, "peerDependenciesMeta": { "react": { @@ -4837,20 +4825,20 @@ "link": true }, "node_modules/@goauthentik/prettier-config": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@goauthentik/prettier-config/-/prettier-config-3.2.1.tgz", - "integrity": "sha512-Cq/z0s0LRFaDVDaNvh8cZzMJ8RHE3YG+Dwi3maLA6OJkLMg/hSQF8AXneLlwo/eF4S5TORbrd0gl7l8xiUqrcQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@goauthentik/prettier-config/-/prettier-config-3.4.0.tgz", + "integrity": "sha512-00SnyvdfHhoifuqlQlS+Beyl0aFUUBWShI4Ci+QxFS1pkiyl1HnHbr20QRSR7DPqPmRMVAYmsr1Yv6/1heNhIg==", "license": "MIT", "dependencies": { "format-imports": "^4.0.8" }, "engines": { "node": ">=24", - "npm": ">=11.6.2" + "npm": ">=11.10.1" }, "peerDependencies": { - "prettier": "^3.6.2", - "prettier-plugin-packagejson": "^2.5.19" + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0" } }, "node_modules/@goauthentik/tsconfig": { @@ -4970,15 +4958,6 @@ "@iconify/types": "*" } }, - "node_modules/@iconify-json/logos": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@iconify-json/logos/-/logos-1.2.10.tgz", - "integrity": "sha512-qxaXKJ6fu8jzTMPQdHtNxlfx6tBQ0jXRbHZIYy5Ilh8Lx9US9FsAdzZWUR8MXV8PnWTKGDFO4ZZee9VwerCyMA==", - "license": "CC0-1.0", - "dependencies": { - "@iconify/types": "*" - } - }, "node_modules/@iconify-json/mdi": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@iconify-json/mdi/-/mdi-1.2.3.tgz", @@ -5726,18 +5705,6 @@ "node": ">=0.10" } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -6038,7 +6005,6 @@ "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.7.tgz", "integrity": "sha512-tkd4nSzTf+pDa9OAE4INi/JEa93HNszjWy5C9+trf4ZCXLLHsHxHQFbzoreuz4Vv2PlCWajgvAdiPMV1vGIkuw==", "license": "MIT", - "peer": true, "dependencies": { "@module-federation/runtime-tools": "0.21.6", "@rspack/binding": "1.6.7", @@ -6283,7 +6249,6 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -6388,7 +6353,6 @@ "integrity": "sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==", "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" @@ -7361,7 +7325,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -7558,7 +7521,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.49.0.tgz", "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.49.0", "@typescript-eslint/types": "8.49.0", @@ -8038,7 +8000,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -8133,7 +8094,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -8198,7 +8158,6 @@ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.46.0.tgz", "integrity": "sha512-7ML6fa2K93FIfifG3GMWhDEwT5qQzPTmoHKCTvhzGEwdbQ4n0yYUWZlLYT75WllTGJCJtNUI0C1ybN4BCegqvg==", "license": "MIT", - "peer": true, "dependencies": { "@algolia/abtesting": "1.12.0", "@algolia/client-abtesting": "5.46.0", @@ -8899,7 +8858,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -9287,7 +9245,6 @@ "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@chevrotain/cst-dts-gen": "11.0.3", "@chevrotain/gast": "11.0.3", @@ -10121,7 +10078,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -10441,7 +10397,6 @@ "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10" } @@ -10851,7 +10806,6 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -11389,7 +11343,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -12625,7 +12578,6 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.15.4", "@types/react-redux": "^7.1.20", @@ -13298,7 +13250,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -14699,9 +14650,9 @@ } }, "node_modules/git-hooks-list": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", - "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", "license": "MIT", "funding": { "url": "https://github.com/fisker/git-hooks-list?sponsor=1" @@ -20804,7 +20755,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -21444,7 +21394,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -22348,7 +22297,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -22962,11 +22910,10 @@ } }, "node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -22978,17 +22925,15 @@ } }, "node_modules/prettier-plugin-packagejson": { - "version": "2.5.20", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.20.tgz", - "integrity": "sha512-G8cowPh+QmJJECTZlrPDKWkVVcwrFjF2rGcw546w3N8blLoc4szSs8UUPfFVxHUNLUjiru71Ah83g1lZkeK9Bw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-3.0.0.tgz", + "integrity": "sha512-z8/QmPSqx/ANvvQMWJSkSq1+ihBXeuwDEYdjX3ZjRJ5Ty1k7vGbFQfhzk2eDe0rwS/TNyRjWK/qnjJEStAOtDw==", "license": "MIT", - "peer": true, "dependencies": { - "sort-package-json": "3.5.0", - "synckit": "0.11.11" + "sort-package-json": "3.6.0" }, "peerDependencies": { - "prettier": ">= 1.16.0" + "prettier": "^3" }, "peerDependenciesMeta": { "prettier": { @@ -23274,7 +23219,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -23294,7 +23238,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -23331,7 +23274,6 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.68.0.tgz", "integrity": "sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=18.0.0" }, @@ -23392,7 +23334,6 @@ "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", "license": "MIT", - "peer": true, "dependencies": { "@types/react": "*" }, @@ -24115,7 +24056,6 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -24285,7 +24225,6 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.9.2" } @@ -25015,7 +24954,6 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.96.0.tgz", "integrity": "sha512-8u4xqqUeugGNCYwr9ARNtQKTOj4KmYiJAVKXf2CTIivTCR51j96htbMKWDru8H5SaQWpyVgTfOF8Ylyf5pun1Q==", "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -25141,7 +25079,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -25927,24 +25864,24 @@ } }, "node_modules/sort-object-keys": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.0.1.tgz", - "integrity": "sha512-R89fO+z3x7hiKPXX5P0qim+ge6Y60AjtlW+QQpRozrrNcR1lw9Pkpm5MLB56HoNvdcLHL4wbpq16OcvGpEDJIg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", "license": "MIT" }, "node_modules/sort-package-json": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.5.0.tgz", - "integrity": "sha512-moY4UtptUuP5sPuu9H9dp8xHNel7eP5/Kz/7+90jTvC0IOiPH2LigtRM/aSFSxreaWoToHUVUpEV4a2tAs2oKQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.0.tgz", + "integrity": "sha512-fyJsPLhWvY7u2KsKPZn1PixbXp+1m7V8NWqU8CvgFRbMEX41Ffw1kD8n0CfJiGoaSfoAvbrqRRl/DcHO8omQOQ==", "license": "MIT", "dependencies": { - "detect-indent": "^7.0.1", + "detect-indent": "^7.0.2", "detect-newline": "^4.0.1", - "git-hooks-list": "^4.0.0", + "git-hooks-list": "^4.1.1", "is-plain-obj": "^4.1.0", - "semver": "^7.7.1", - "sort-object-keys": "^2.0.0", - "tinyglobby": "^0.2.12" + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" }, "bin": { "sort-package-json": "cli.js" @@ -26600,21 +26537,6 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, "node_modules/tapable": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", @@ -26829,7 +26751,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -26995,8 +26916,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", @@ -27144,7 +27064,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -27158,7 +27077,6 @@ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.49.0.tgz", "integrity": "sha512-zRSVH1WXD0uXczCXw+nsdjGPUdx4dfrs5VQoHnUWmv1U3oNlAKv4FUNdLDhVUg+gYn+a5hUESqch//Rv5wVhrg==", "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/eslint-plugin": "8.49.0", "@typescript-eslint/parser": "8.49.0", @@ -27900,7 +27818,6 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -28739,7 +28656,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/website/package.json b/website/package.json index 5f95f7b0ce..089b54271e 100644 --- a/website/package.json +++ b/website/package.json @@ -10,8 +10,8 @@ "check-types": "tsc -b", "docusaurus": "docusaurus", "lint": "eslint --fix .", - "lint-check": "eslint --max-warnings 0 .", "lint:lockfile": "echo 'Skipping lockfile linting'", + "lint-check": "eslint --max-warnings 0 .", "prettier": "prettier --write .", "prettier-check": "prettier --check .", "start": "npm start -w docs", @@ -19,8 +19,8 @@ }, "dependencies": { "@eslint/js": "^9.39.1", - "@goauthentik/eslint-config": "^1.1.1", - "@goauthentik/prettier-config": "^3.2.1", + "@goauthentik/eslint-config": "^1.2.1", + "@goauthentik/prettier-config": "^3.4.0", "@goauthentik/tsconfig": "^1.0.5", "@types/node": "^25.0.0", "@typescript-eslint/eslint-plugin": "^8.48.0", @@ -31,8 +31,8 @@ "netlify-redirect-parser": "^14.4.0", "npm-run-all": "^4.1.5", "postman-code-generators": "2.1.0", - "prettier": "^3.7.3", - "prettier-plugin-packagejson": "^2.5.20", + "prettier": "^3.8.1", + "prettier-plugin-packagejson": "^3.0.0", "typescript-eslint": "^8.48.0" }, "optionalDependencies": { @@ -76,6 +76,10 @@ } } }, + "@goauthentik/prettier-config": { + "prettier": "$prettier", + "prettier-plugin-packagejson": "$prettier-plugin-packagejson" + }, "docusaurus-theme-openapi-docs": { "postman-code-generators": { ".": "^1.10.1", @@ -99,8 +103,8 @@ }, "packageManager": { "name": "npm", - "onFail": "warn", - "version": ">=11.6.2" + "version": ">=11.6.2", + "onFail": "warn" } } }