From 99fd7b0820dcce985e869101c7021c1e6868e9cd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 23 Mar 2026 03:51:41 +0000 Subject: [PATCH 01/37] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'buildbot-nix': 'github:nix-community/buildbot-nix/e9010d0937faf7a7b7e534e567cfd4ea5b209070?narHash=sha256-/cOjTl8VjPFFijyDLoWXXU%2B7lSbl8guotHOPL6OAysw%3D' (2026-02-22) → 'github:nix-community/buildbot-nix/0239dd9a76c14ed7baa2ca40ae89c498e8dac6e7?narHash=sha256-8oqnieGvMp8VbvU8QbzwvFuxHDJ9xm2kVzS6segXy10%3D' (2026-03-22) • Updated input 'buildbot-nix/flake-parts': 'github:hercules-ci/flake-parts/57928607ea566b5db3ad13af0e57e921e6b12381?narHash=sha256-AnYjnFWgS49RlqX7LrC4uA%2BsCCDBj0Ry/WOJ5XWAsa0%3D' (2026-02-02) → 'github:hercules-ci/flake-parts/f20dc5d9b8027381c474144ecabc9034d6a839a3?narHash=sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0%3D' (2026-03-01) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/d1c15b7d5806069da59e819999d70e1cec0760bf?narHash=sha256-b9uG8yN50DRQ6A7JdZBfzq718ryYrlmGgqkRm9OOwCE%3D' (2026-02-16) → 'github:NixOS/nixpkgs/9cf7092bdd603554bd8b63c216e8943cf9b12512?narHash=sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0%3D' (2026-03-18) • Updated input 'opam-repository': 'github:ocaml/opam-repository/fc740cd2f3e80210f4eceab61f5e3de6efb44787?narHash=sha256-%2BoJ0POiIxxgfhQ6ZFwVVIITu8SU%2Bsj4HfBEbMnC9XAo%3D' (2026-02-22) → 'github:ocaml/opam-repository/76bf2ed9443fdee37e6f046c6295d358be3f8598?narHash=sha256-b69SOCQ4nhstGmauGL5oNRi5rX9mNgj7jPEUbpKDxUg%3D' (2026-03-21) • Updated input 'pre-commit-hooks': 'github:cachix/pre-commit-hooks.nix/5eaaedde414f6eb1aea8b8525c466dc37bba95ae?narHash=sha256-kck%2BvIbGOaM/dHea7aTBxdFYpeUl/jHOy5W3eyRvVx8%3D' (2026-02-10) → 'github:cachix/pre-commit-hooks.nix/f799ae951fde0627157f40aec28dec27b22076d0?narHash=sha256-EAtviqz0sEAxdHS4crqu7JGR5oI3BwaqG0mw7CmXkO8%3D' (2026-03-21) • Updated input 'sops-nix': 'github:Mic92/sops-nix/d7755d820f5fa8acf7f223309c33e25d4f92e74f?narHash=sha256-MJuVJeszZEziquykEHh/hmgIHYxUcuoG/1aowpLiSeU%3D' (2026-02-22) → 'github:Mic92/sops-nix/3e0d543e6ba6c0c48117a81614e90c6d8c425170?narHash=sha256-zsTuloDSdKf%2BPrI1MsWx5z/cyGEJ8P3eERtAfdP8Bmg%3D' (2026-03-22) • Updated input 'treefmt-nix': 'github:numtide/treefmt-nix/337a4fe074be1042a35086f15481d763b8ddc0e7?narHash=sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD%2BFyxk%3D' (2026-02-04) → 'github:numtide/treefmt-nix/71b125cd05fbfd78cab3e070b73544abe24c5016?narHash=sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk%3D' (2026-03-12) --- flake.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index 9e457c250..326fa1e8e 100644 --- a/flake.lock +++ b/flake.lock @@ -12,11 +12,11 @@ ] }, "locked": { - "lastModified": 1771733760, - "narHash": "sha256-/cOjTl8VjPFFijyDLoWXXU+7lSbl8guotHOPL6OAysw=", + "lastModified": 1774153455, + "narHash": "sha256-8oqnieGvMp8VbvU8QbzwvFuxHDJ9xm2kVzS6segXy10=", "owner": "nix-community", "repo": "buildbot-nix", - "rev": "e9010d0937faf7a7b7e534e567cfd4ea5b209070", + "rev": "0239dd9a76c14ed7baa2ca40ae89c498e8dac6e7", "type": "github" }, "original": { @@ -123,11 +123,11 @@ ] }, "locked": { - "lastModified": 1769996383, - "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -252,11 +252,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1771207753, - "narHash": "sha256-b9uG8yN50DRQ6A7JdZBfzq718ryYrlmGgqkRm9OOwCE=", + "lastModified": 1773840656, + "narHash": "sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d1c15b7d5806069da59e819999d70e1cec0760bf", + "rev": "9cf7092bdd603554bd8b63c216e8943cf9b12512", "type": "github" }, "original": { @@ -320,11 +320,11 @@ "opam-repository": { "flake": false, "locked": { - "lastModified": 1771779718, - "narHash": "sha256-+oJ0POiIxxgfhQ6ZFwVVIITu8SU+sj4HfBEbMnC9XAo=", + "lastModified": 1774084616, + "narHash": "sha256-b69SOCQ4nhstGmauGL5oNRi5rX9mNgj7jPEUbpKDxUg=", "owner": "ocaml", "repo": "opam-repository", - "rev": "fc740cd2f3e80210f4eceab61f5e3de6efb44787", + "rev": "76bf2ed9443fdee37e6f046c6295d358be3f8598", "type": "github" }, "original": { @@ -364,11 +364,11 @@ ] }, "locked": { - "lastModified": 1770726378, - "narHash": "sha256-kck+vIbGOaM/dHea7aTBxdFYpeUl/jHOy5W3eyRvVx8=", + "lastModified": 1774104215, + "narHash": "sha256-EAtviqz0sEAxdHS4crqu7JGR5oI3BwaqG0mw7CmXkO8=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "5eaaedde414f6eb1aea8b8525c466dc37bba95ae", + "rev": "f799ae951fde0627157f40aec28dec27b22076d0", "type": "github" }, "original": { @@ -493,11 +493,11 @@ ] }, "locked": { - "lastModified": 1771735105, - "narHash": "sha256-MJuVJeszZEziquykEHh/hmgIHYxUcuoG/1aowpLiSeU=", + "lastModified": 1774154798, + "narHash": "sha256-zsTuloDSdKf+PrI1MsWx5z/cyGEJ8P3eERtAfdP8Bmg=", "owner": "Mic92", "repo": "sops-nix", - "rev": "d7755d820f5fa8acf7f223309c33e25d4f92e74f", + "rev": "3e0d543e6ba6c0c48117a81614e90c6d8c425170", "type": "github" }, "original": { @@ -543,11 +543,11 @@ ] }, "locked": { - "lastModified": 1770228511, - "narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=", + "lastModified": 1773297127, + "narHash": "sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "337a4fe074be1042a35086f15481d763b8ddc0e7", + "rev": "71b125cd05fbfd78cab3e070b73544abe24c5016", "type": "github" }, "original": { From 8404c65fa9c33891696dce62e4f2b6b6fa35be40 Mon Sep 17 00:00:00 2001 From: eljamm Date: Mon, 9 Mar 2026 08:06:40 +0100 Subject: [PATCH 02/37] Projects(Reaction): fix tests' attr paths; add plugins test --- projects/Reaction/default.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/projects/Reaction/default.nix b/projects/Reaction/default.nix index fdc881552..2d4ab2b99 100644 --- a/projects/Reaction/default.nix +++ b/projects/Reaction/default.nix @@ -40,7 +40,8 @@ - to be allowed to read ssh journal logs (adding reaction user to systemd-journal group) - and allow changing firewall rules (adding CAP_NET_ADMIN previlige to reaciton systemd service) ''; - tests.non-root.module = pkgs.nixosTests.reaction; + tests.non-root.module = pkgs.nixosTests.reaction.basic; + tests.plugins.module = pkgs.nixosTests.reaction.plugins; }; examples.root = { module = ./services/reaction/examples/root.nix; @@ -49,7 +50,7 @@ Prefer the non-root configuration and give the service and the reaction user fine-grained access based on your usecase for reaction. ''; - tests.root.module = pkgs.nixosTests.reaction-firewall; + tests.root.module = pkgs.nixosTests.reaction.firewall; }; }; }; @@ -99,6 +100,6 @@ ''; } ]; - tests.demo.module = pkgs.nixosTests.reaction-firewall; + tests.demo.module = pkgs.nixosTests.reaction.firewall; }; } From 464912bde22582330d9bdd3c06c060a5b0fac089 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 02:46:32 +0530 Subject: [PATCH 03/37] Projects(Icosa-Gallery): fix build by vendoring django-silk Signed-off-by: phanirithvij --- pkgs/by-name/icosa-gallery/django-silk.nix | 94 ++++++++++++++++++++++ pkgs/by-name/icosa-gallery/package.nix | 1 + 2 files changed, 95 insertions(+) create mode 100644 pkgs/by-name/icosa-gallery/django-silk.nix diff --git a/pkgs/by-name/icosa-gallery/django-silk.nix b/pkgs/by-name/icosa-gallery/django-silk.nix new file mode 100644 index 000000000..70e32af48 --- /dev/null +++ b/pkgs/by-name/icosa-gallery/django-silk.nix @@ -0,0 +1,94 @@ +{ + lib, + autopep8, + buildPythonPackage, + django, + factory-boy, + fetchFromGitHub, + freezegun, + gprof2dot, + jinja2, + mock, + networkx, + pillow, + pydot, + pygments, + python, + python-dateutil, + pytz, + requests, + setuptools-scm, + simplejson, + sqlparse, +}: + +# django-silk 5.3.2 is the last version to support django_5 +# see https://github.com/jazzband/django-silk/blob/5.4.3/CHANGELOG.md#540-2025-05-03 + +buildPythonPackage rec { + pname = "django-silk"; + version = "5.3.2"; + format = "setuptools"; + + src = fetchFromGitHub { + owner = "jazzband"; + repo = "django-silk"; + tag = version; + hash = "sha256-+JOUpjKR0rx+4+hU/5gSov5nW2aj7HR+HYr5FPbUkSA="; + }; + + # "test_time_taken" tests aren't suitable for reproducible execution, but Django's + # test runner doesn't have an easy way to ignore tests - so instead prevent it from picking + # them up as tests + postPatch = '' + substituteInPlace project/tests/test_silky_profiler.py \ + --replace "def test_time_taken" "def _test_time_taken" + substituteInPlace setup.py \ + --replace 'use_scm_version=True' 'version="${version}"' + ''; + + nativeBuildInputs = [ setuptools-scm ]; + + buildInputs = [ mock ]; + + propagatedBuildInputs = [ + autopep8 + django + gprof2dot + jinja2 + pillow + pygments + python-dateutil + pytz + requests + simplejson + sqlparse + ]; + + nativeCheckInputs = [ + freezegun + networkx + pydot + factory-boy + ]; + + pythonImportsCheck = [ "silk" ]; + + checkPhase = '' + runHook preCheck + + pushd project + DB_ENGINE=sqlite3 DB_NAME=':memory:' ${python.interpreter} manage.py test + popd # project + + runHook postCheck + ''; + + meta = { + description = "Silky smooth profiling for the Django Framework"; + homepage = "https://github.com/jazzband/django-silk"; + changelog = "https://github.com/jazzband/django-silk/blob/${version}/CHANGELOG.md"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ ris ]; + }; +} diff --git a/pkgs/by-name/icosa-gallery/package.nix b/pkgs/by-name/icosa-gallery/package.nix index 41ca5d677..1a1529307 100644 --- a/pkgs/by-name/icosa-gallery/package.nix +++ b/pkgs/by-name/icosa-gallery/package.nix @@ -11,6 +11,7 @@ let django-admin-tools = final.callPackage ./django-admin-tools.nix { }; django-constance = final.callPackage ./django-constance.nix { }; django-honeypot = final.callPackage ./django-honeypot.nix { }; + django-silk = final.callPackage ./django-silk.nix { }; django-simple-math-captcha = final.callPackage ./django-simple-math-captcha.nix { }; ixxy-email-logger = final.callPackage ./ixxy-email-logger.nix { }; }; From e31d16d6f7ab0447a762e42458f8c8cf7d359db8 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 03:36:46 +0530 Subject: [PATCH 04/37] icosa-gallery: patch usage of django-ninja breaking change Signed-off-by: phanirithvij --- ...0001-Fix-django-ninja-removed-Config.patch | 56 +++++++++++++++++++ pkgs/by-name/icosa-gallery/package.nix | 10 +++- 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 pkgs/by-name/icosa-gallery/0001-Fix-django-ninja-removed-Config.patch diff --git a/pkgs/by-name/icosa-gallery/0001-Fix-django-ninja-removed-Config.patch b/pkgs/by-name/icosa-gallery/0001-Fix-django-ninja-removed-Config.patch new file mode 100644 index 000000000..7c6014e67 --- /dev/null +++ b/pkgs/by-name/icosa-gallery/0001-Fix-django-ninja-removed-Config.patch @@ -0,0 +1,56 @@ +From 73dd959b5ef31b0077b7c4029a0fae8ee8afd8ac Mon Sep 17 00:00:00 2001 +From: phanirithvij +Date: Tue, 24 Mar 2026 03:25:06 +0530 +Subject: [PATCH] Fix django-ninja removed Config + +Removed in django-ninja 1.5.0 +https://github.com/vitalik/django-ninja/pull/1528 + +Signed-off-by: phanirithvij +--- + icosa/api/schema.py | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/icosa/api/schema.py b/icosa/api/schema.py +index 850f7462..b6bbd3c0 100644 +--- a/icosa/api/schema.py ++++ b/icosa/api/schema.py +@@ -140,9 +140,9 @@ class AssetSchema(ModelSchema): + presentationParams: Optional[dict] = Field(None, alias=("presentation_params")) + formats: List[AssetFormat] + +- class Config(Schema.Config): ++ class Meta: + model = Asset +- model_fields = ["url", "license"] ++ fields = ["url", "license"] + + @staticmethod + def resolve_name(obj, context): +@@ -229,9 +229,9 @@ class AssetSchemaPrivate(AssetSchema): + + + class AssetStateSchema(ModelSchema): +- class Config(Schema.Config): ++ class Meta: + model = Asset +- model_fields = ["state"] ++ fields = ["state"] + + + class AssetPatchData(Schema): +@@ -318,9 +318,9 @@ class AssetCollectionSchema(ModelSchema): + root_url = request.build_absolute_uri("/").rstrip("/") + return f"{root_url}{reverse_lazy('icosa:api:asset_collection_list')}/{obj.url}" + +- class Config(Schema.Config): ++ class Meta: + model = AssetCollection +- model_fields = [ ++ fields = [ + "url", + "name", + "description", +-- +2.53.0 + diff --git a/pkgs/by-name/icosa-gallery/package.nix b/pkgs/by-name/icosa-gallery/package.nix index 1a1529307..fec13bede 100644 --- a/pkgs/by-name/icosa-gallery/package.nix +++ b/pkgs/by-name/icosa-gallery/package.nix @@ -20,20 +20,24 @@ let in python3Packages.buildPythonApplication (finalAttrs: { pname = "icosa-gallery"; - version = "0-unstable-2026-01-15"; + version = "0-unstable-2026-03-11"; pyproject = false; src = fetchFromGitHub { owner = "icosa-foundation"; repo = "icosa-gallery"; - rev = "2fc0fe9505f682b8c11f1b282355790c7eb78e0c"; - hash = "sha256-w/PF/65eIkg9OgIzWw8VEGKVuepEf8C/xXjeyiLzH+I="; + rev = "12a10b77ac9b924c6832d39875577119427d3d11"; + hash = "sha256-o9PyvC23I3n4YY6PEA03zt/aL7O25ck/O9BKQxy68Os="; }; sourceRoot = "${finalAttrs.src.name}/django"; patches = [ ./BASE_DIR.patch + + # sourceRoot prevents usage of fetchpatch2 + # upstream PR is https://github.com/icosa-foundation/icosa-gallery/pull/200 + ./0001-Fix-django-ninja-removed-Config.patch ]; dependencies = From 030c2ad9728390b3ff4e78d0ffdd88838827ccbf Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 18:22:35 +0530 Subject: [PATCH 05/37] pkgs/py3dtiles: remove, upstreamed to nixpkgs Signed-off-by: phanirithvij --- pkgs/by-name/py3dtiles/package.nix | 106 ----------------------------- 1 file changed, 106 deletions(-) delete mode 100644 pkgs/by-name/py3dtiles/package.nix diff --git a/pkgs/by-name/py3dtiles/package.nix b/pkgs/by-name/py3dtiles/package.nix deleted file mode 100644 index 605642bae..000000000 --- a/pkgs/by-name/py3dtiles/package.nix +++ /dev/null @@ -1,106 +0,0 @@ -{ - lib, - python3, - fetchFromGitLab, - addBinToPathHook, - writeText, -}: - -python3.pkgs.buildPythonPackage (finalAttrs: { - pname = "py3dtiles"; - version = "12.1.0"; - pyproject = true; - - src = fetchFromGitLab { - owner = "py3dtiles"; - repo = "py3dtiles"; - tag = "v${finalAttrs.version}"; - hash = "sha256-qzTbpUkfrETAcCUk6mqJexA+6oIQrZjUIZJOubaHxCg="; - }; - - build-system = with python3.pkgs; [ - setuptools - setuptools-scm - ]; - - dependencies = with python3.pkgs; [ - lz4 - mapbox-earcut - numba - numpy - psutil - pygltflib - pyproj - pyzmq - ]; - - optional-dependencies = with python3.pkgs; { - ifc = [ - ifcopenshell - lark - ]; - las = [ - laspy - ]; - ply = [ - plyfile - ]; - postgres = [ - psycopg2-binary - ]; - }; - - nativeCheckInputs = - with python3.pkgs; - [ - pytestCheckHook - pytest-benchmark - pytest-cov-stub - ] - ++ (with finalAttrs.passthru.optional-dependencies; ply ++ las ++ ifc); - - nativeInstallCheckInputs = [ - addBinToPathHook - ]; - - # from .gitlab-ci.yml - # note: nativeCheckInputs are also available for installCheck - installCheckPhase = - let - testScript = writeText "test.py" /* py */ '' - from py3dtiles.tileset.utils import number_of_points_in_tileset - from pathlib import Path - exit(number_of_points_in_tileset(Path("3dtiles/tileset.json")) != 22300) - ''; - in - '' - runHook preInstallCheck - py3dtiles --help - py3dtiles info tests/fixtures/pointCloudRGB.pnts - py3dtiles convert --out test1 ./tests/fixtures/simple.xyz - py3dtiles convert --out test2 ./tests/fixtures/with_srs_3857.las - py3dtiles convert tests/fixtures/simple.ply - runHook postInstallCheck - ''; - - pythonRelaxDeps = [ - "numba" - "numpy" - "pyzmq" - ]; - - pythonImportsCheck = [ - "py3dtiles" - ]; - - meta = { - changelog = "https://py3dtiles.org/main/changelog.html"; - description = "Python module to manage 3DTiles format"; - downloadPage = "https://gitlab.com/py3dtiles/py3dtiles"; - homepage = "https://py3dtiles.org"; - license = lib.licenses.asl20; - mainProgram = "py3dtiles"; - maintainers = with lib.maintainers; [ phanirithvij ]; - teams = with lib.teams; [ ngi ]; - }; -}) From e554283f3f9676da6d977ad09539b1e486ce44ce Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 19:10:00 +0530 Subject: [PATCH 06/37] pkgs/vula: fix build Signed-off-by: phanirithvij --- pkgs/by-name/vula/package.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/vula/package.nix b/pkgs/by-name/vula/package.nix index e74ad4689..6d7d1d77f 100644 --- a/pkgs/by-name/vula/package.nix +++ b/pkgs/by-name/vula/package.nix @@ -34,7 +34,9 @@ python3.pkgs.buildPythonApplication { postPatch = '' rm pyproject.toml substituteInPlace vula/frontend/constants.py \ - --replace "IMAGE_BASE_PATH = '/usr/share/icons/vula/'" "IMAGE_BASE_PATH = '$out/share/icons/vula/'" + --replace-fail "IMAGE_BASE_PATH = '/usr/share/icons/vula/'" "IMAGE_BASE_PATH = '$out/share/icons/vula/'" + substituteInPlace setup.cfg \ + --replace-fail "[pytest]" "[tool:pytest]" ''; build-system = with python3.pkgs; [ From af6494393bc2fe2db51a8b2bbafad869d004e6f3 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 10:19:42 +0530 Subject: [PATCH 07/37] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/9cf7092bdd603554bd8b63c216e8943cf9b12512?narHash=sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0%3D' (2026-03-18) → 'github:NixOS/nixpkgs/fdc7b8f7b30fdbedec91b71ed82f36e1637483ed?narHash=sha256-a%2B%2BtZ1RQsDb1I0NHrFwdGuRlR5TORvCEUksM459wKUA%3D' (2026-03-23) • Updated input 'opam-repository': 'github:ocaml/opam-repository/76bf2ed9443fdee37e6f046c6295d358be3f8598?narHash=sha256-b69SOCQ4nhstGmauGL5oNRi5rX9mNgj7jPEUbpKDxUg%3D' (2026-03-21) → 'github:ocaml/opam-repository/b2a1270dba57f3ceb38426939f9780c38c181b3c?narHash=sha256-DEPWH5A/yTeTdCedo%2BGHMZpfDp7d6RsKv0itK11AOQs%3D' (2026-03-23) • Updated input 'sops-nix': 'github:Mic92/sops-nix/3e0d543e6ba6c0c48117a81614e90c6d8c425170?narHash=sha256-zsTuloDSdKf%2BPrI1MsWx5z/cyGEJ8P3eERtAfdP8Bmg%3D' (2026-03-22) → 'github:Mic92/sops-nix/614e256310e0a4f8a9ccae3fa80c11844fba7042?narHash=sha256-fhG4JAcLgjKwt%2BXHbjs8brpWnyKUfU4LikLm3s0Q/ic%3D' (2026-03-23) --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 326fa1e8e..20b10316d 100644 --- a/flake.lock +++ b/flake.lock @@ -252,11 +252,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773840656, - "narHash": "sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0=", + "lastModified": 1774273680, + "narHash": "sha256-a++tZ1RQsDb1I0NHrFwdGuRlR5TORvCEUksM459wKUA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9cf7092bdd603554bd8b63c216e8943cf9b12512", + "rev": "fdc7b8f7b30fdbedec91b71ed82f36e1637483ed", "type": "github" }, "original": { @@ -320,11 +320,11 @@ "opam-repository": { "flake": false, "locked": { - "lastModified": 1774084616, - "narHash": "sha256-b69SOCQ4nhstGmauGL5oNRi5rX9mNgj7jPEUbpKDxUg=", + "lastModified": 1774273360, + "narHash": "sha256-DEPWH5A/yTeTdCedo+GHMZpfDp7d6RsKv0itK11AOQs=", "owner": "ocaml", "repo": "opam-repository", - "rev": "76bf2ed9443fdee37e6f046c6295d358be3f8598", + "rev": "b2a1270dba57f3ceb38426939f9780c38c181b3c", "type": "github" }, "original": { @@ -493,11 +493,11 @@ ] }, "locked": { - "lastModified": 1774154798, - "narHash": "sha256-zsTuloDSdKf+PrI1MsWx5z/cyGEJ8P3eERtAfdP8Bmg=", + "lastModified": 1774303811, + "narHash": "sha256-fhG4JAcLgjKwt+XHbjs8brpWnyKUfU4LikLm3s0Q/ic=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3e0d543e6ba6c0c48117a81614e90c6d8c425170", + "rev": "614e256310e0a4f8a9ccae3fa80c11844fba7042", "type": "github" }, "original": { From a6d80602d4e0787da8f744f5934a79590714d03c Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 10:48:29 +0530 Subject: [PATCH 08/37] tests: services.kmscon.autologinUser removed Signed-off-by: phanirithvij --- projects/tests.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/tests.nix b/projects/tests.nix index 9c778e46e..c76bbe831 100644 --- a/projects/tests.nix +++ b/projects/tests.nix @@ -24,7 +24,6 @@ let # kmscon allows zooming with [Ctrl] + [+] and [Ctrl] + [-] services.kmscon = { enable = true; - autologinUser = "root"; fonts = [ { name = "Hack"; @@ -32,6 +31,7 @@ let } ]; }; + services.getty.autologinUser = "root"; }; debugging.interactive.nodes = lib.mapAttrs (_: _: tools) test.nodes; args = { From 7b38b99be2acf9a1db490a694cbc59833ffae7d1 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 23:50:49 +0530 Subject: [PATCH 09/37] project(Repath-Studio): re-use from nixpkgs Fix repath sudio test, nixpkgs pr 503262 Signed-off-by: phanirithvij --- .../repath-studio/hardcode-git-paths.patch | 18 -- pkgs/by-name/repath-studio/package.nix | 205 ------------------ .../programs/repath-studio/tests/basic.nix | 57 +++-- 3 files changed, 35 insertions(+), 245 deletions(-) delete mode 100644 pkgs/by-name/repath-studio/hardcode-git-paths.patch delete mode 100644 pkgs/by-name/repath-studio/package.nix diff --git a/pkgs/by-name/repath-studio/hardcode-git-paths.patch b/pkgs/by-name/repath-studio/hardcode-git-paths.patch deleted file mode 100644 index 98a1496a9..000000000 --- a/pkgs/by-name/repath-studio/hardcode-git-paths.patch +++ /dev/null @@ -1,18 +0,0 @@ - deps.edn | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/deps.edn b/deps.edn -index d3aa811f..5419be40 100644 ---- a/deps.edn -+++ b/deps.edn -@@ -1,8 +1,7 @@ - {:paths ["src"] - :deps {binaryage/devtools {:mvn/version "1.0.7"} - camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.3"} -- clj-kdtree/clj-kdtree {:git/url "https://github.com/abscondment/clj-kdtree.git" -- :sha "5ec321c5e8006db00fa8b45a8ed9eb0b8f3dd56d" -+ clj-kdtree/clj-kdtree {:local/root "@clj-kdtree_src@" - :deps/manifest :deps} - com.taoensso/tempura {:mvn/version "1.5.4"} - day8.re-frame/test {:mvn/version "0.1.7"} - diff --git a/pkgs/by-name/repath-studio/package.nix b/pkgs/by-name/repath-studio/package.nix deleted file mode 100644 index b7e06febd..000000000 --- a/pkgs/by-name/repath-studio/package.nix +++ /dev/null @@ -1,205 +0,0 @@ -{ - lib, - stdenv, - - buildNpmPackage, - fetchFromGitHub, - pkg-config, - electron, - chromium, - clojure, - vips, - - writeShellScriptBin, - copyDesktopItems, - makeDesktopItem, - makeWrapper, - replaceVars, - nix-update-script, - - vulkan-loader, -}: -buildNpmPackage (finalAttrs: { - pname = "repath-studio"; - version = "0.4.12"; - - src = fetchFromGitHub { - owner = "repath-studio"; - repo = "repath-studio"; - tag = "v${finalAttrs.version}"; - hash = "sha256-sdM3owUYI0P12+R4YyYtF/20Zl0EpJY6t4Z1q/K5EqM="; - }; - - patches = [ - (replaceVars ./hardcode-git-paths.patch { - clj-kdtree_src = fetchFromGitHub { - owner = "abscondment"; - repo = "clj-kdtree"; - rev = "5ec321c5e8006db00fa8b45a8ed9eb0b8f3dd56d"; - hash = "sha256-ZOv+9TxBsOnSSbfM7kJLP3cQH9FpgA15aETszg7YSes="; - }; - }) - ]; - - makeCacheWritable = true; - - npmDepsHash = "sha256-Zihy5VYlkeQtmZUS25kgu3aYGPfQdUxjNSK33WHOEeQ="; - - nativeBuildInputs = [ - finalAttrs.passthru.clojureWithCache - makeWrapper - copyDesktopItems - pkg-config # sharp - ]; - - # For 'sharp' dependency, otherwise it will try to build it - buildInputs = [ vips ]; - - env = { - ELECTRON_SKIP_BINARY_DOWNLOAD = true; - PUPPETEER_SKIP_DOWNLOAD = true; - }; - - postPatch = '' - substituteInPlace shadow-cljs.edn \ - --replace-fail ":shadow-git-inject/version" '"v${finalAttrs.version}"' - ''; - - passthru = { - # this was taken and adapted from "logseq" package's nixpkgs derivation - mavenRepo = stdenv.mkDerivation { - name = "repath-studio-${finalAttrs.version}-maven-deps"; - inherit (finalAttrs) src patches; - - nativeBuildInputs = [ clojure ]; - - buildPhase = '' - runHook preBuild - - export HOME="$(mktemp -d)" - mkdir -p "$out" - - # -P -> resolve all normal deps - # -M:alias -> resolve extra-deps of the listed aliases - clj -Sdeps "{:mvn/local-repo \"$out\"}" -P -M:dev:cljs - - runHook postBuild - ''; - - # copied from buildMavenPackage - # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside - installPhase = '' - runHook preInstall - - find $out -type f \( \ - -name \*.lastUpdated \ - -o -name resolver-status.properties \ - -o -name _remote.repositories \) \ - -delete - - runHook postInstall - ''; - - dontFixup = true; - - # FIX: this isn't 100% reproducible since it changes each time `clojure` is updated - # https://github.com/ngi-nix/ngipkgs/pull/1727#discussion_r2470180998 - outputHash = "sha256-ytS7JiQUC7U0vxuQddxQfDnm0Pt4stkRBfiIlbOpeTk="; - outputHashMode = "recursive"; - outputHashAlgo = "sha256"; - }; - - clojureWithCache = writeShellScriptBin "clojure" '' - exec ${lib.getExe' clojure "clojure"} -Sdeps '{:mvn/local-repo "${finalAttrs.passthru.mavenRepo}"}' "$@" - ''; - }; - - buildPhase = '' - runHook preBuild - - # electronDist needs to be modifiable on Darwin - cp -r ${electron.dist} electron-dist - chmod -R u+w electron-dist - '' - # Electron builder complains about symlink in electron-dist - + lib.optionalString stdenv.hostPlatform.isLinux '' - rm electron-dist/libvulkan.so.1 - cp ${lib.getLib vulkan-loader}/lib/libvulkan.so.1 electron-dist - '' - + '' - npm run build - npm exec electron-builder -- --dir \ - -c.electronDist=electron-dist \ - -c.electronVersion=${electron.version} - - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - - ${ - if stdenv.hostPlatform.isDarwin then - # bash - '' - mkdir -p $out/Applications - cp -r "dist/mac"*"/Repath Studio.app" "$out/Applications" - makeWrapper "$out/Applications/Repath Studio.app/Contents/MacOS/Repath Studio" "$out/bin/repath-studio" - '' - else - # bash - '' - mkdir -p $out/share/{repath-studio,icons/hicolor/scalable/apps} - cp -r dist/*-unpacked/resources/app.asar $out/share/repath-studio - cp resources/public/img/icon.svg $out/share/icons/hicolor/scalable/apps/repath-studio.svg - - makeWrapper '${lib.getExe electron}' "$out/bin/repath-studio" \ - --add-flags "$out/share/repath-studio/app.asar" \ - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \ - --set-default ELECTRON_FORCE_IS_PACKAGED 1 \ - --inherit-argv0 - '' - } - - runHook postInstall - ''; - - # chromium package not available for darwin - doCheck = stdenv.hostPlatform.isLinux; - checkPhase = '' - runHook preCheck - export ELECTRON_OVERRIDE_DIST_PATH=electron-dist/ - export PUPPETEER_EXECUTABLE_PATH=${chromium}/bin/chromium - export CHROME_BIN=${chromium}/bin/chromium - npm run test - unset ELECTRON_OVERRIDE_DIST_PATH - runHook postCheck - ''; - - desktopItems = [ - (makeDesktopItem { - name = "Repath Studio"; - desktopName = "Repath Studio"; - exec = "repath-studio %U"; - type = "Application"; - terminal = false; - icon = "repath-studio"; - comment = "Vector graphics editor, that combines procedural tooling with traditional design workflows"; - categories = [ "Graphics" ]; - }) - ]; - - passthru.updateScript = nix-update-script { }; - - meta = { - changelog = "https://github.com/repath-studio/repath-studio/blob/v${finalAttrs.version}/CHANGELOG.md"; - description = "Cross-platform vector graphics editor, that combines procedural tooling with traditional design workflows"; - homepage = "https://repath.studio"; - downloadPage = "https://github.com/repath-studio/repath-studio"; - license = lib.licenses.agpl3Only; - mainProgram = "repath-studio"; - maintainers = with lib.maintainers; [ phanirithvij ]; - teams = with lib.teams; [ ngi ]; - platforms = electron.meta.platforms; - }; -}) diff --git a/projects/Repath-Studio/programs/repath-studio/tests/basic.nix b/projects/Repath-Studio/programs/repath-studio/tests/basic.nix index f00597bc1..47202b1b5 100644 --- a/projects/Repath-Studio/programs/repath-studio/tests/basic.nix +++ b/projects/Repath-Studio/programs/repath-studio/tests/basic.nix @@ -1,6 +1,7 @@ { - sources, + lib, pkgs, + sources, ... }: @@ -26,38 +27,50 @@ environment.systemPackages = with pkgs; [ xdotool + repath-studio ]; - # electron application, give more memory + # electron application, give more memory and cpu virtualisation.memorySize = 4096; + virtualisation.cores = 4; + virtualisation.qemu.options = [ + # Force qemu at 1020x768 resolution for the Save button click + "-vga none -device virtio-gpu-pci,xres=1020,yres=768" + ]; }; }; enableOCR = true; - interactive.sshBackdoor.enable = true; # ssh -o User=root vsock/3 + # Debug interactively with: + # - nix run .#nixosTests.repath-studio.driverInteractive -L + # - start_all()/run_tests() + # ssh -o User=root vsock%3 (can also do vsock/3, but % works with scp etc.) + interactive.sshBackdoor.enable = true; + + testScript = /* python */ '' + start_all() - testScript = - { nodes, ... }: - # python - '' - start_all() + machine.wait_for_x() + machine.succeed("env DISPLAY=:0 sudo -u alice repath-studio &> /tmp/repath.log &") + machine.wait_for_text(r"(Welcome|Repath|Studio)") # initial telemetry prompt - machine.wait_for_x() - machine.succeed("env DISPLAY=:0 sudo -u alice repath-studio &> /tmp/repath.log &") - machine.wait_for_text(r"(Welcome|Repath|Studio)") # initial telemetry prompt + machine.screenshot("Repath-Studio-GUI-Welcome") + machine.send_key("kp_enter") # OK - machine.screenshot("Repath-Studio-GUI-Welcome") - machine.send_key("kp_enter") # OK + # sleep is required it needs time to dismiss the dialog + machine.sleep(2) + machine.send_key("ctrl-shift-s") + machine.sleep(2) + machine.send_chars("/tmp/saved.rps") + machine.sleep(2) + machine.succeed("su - alice -c 'DISPLAY=:0 xdotool mousemove --sync 975 745 click 1'") # Save file dialog + machine.sleep(2) + print(machine.succeed("cat /tmp/saved.rps")) + assert "${pkgs.repath-studio.version}" in machine.succeed("cat /tmp/saved.rps") - machine.sleep(2) - machine.send_key("ctrl-shift-s") - machine.sleep(2) - machine.send_chars("/tmp/saved.rps\n") - machine.sleep(2) - print(machine.succeed("cat /tmp/saved.rps")) - assert "${pkgs.repath-studio.version}" in machine.succeed("cat /tmp/saved.rps") + machine.screenshot("Repath-Studio-GUI") + ''; - machine.screenshot("Repath-Studio-GUI") - ''; + meta.maintainers = lib.teams.ngi.members; } From ffddc3e2652401ef8d76ad7a4ce34bb2ddc2094e Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Wed, 25 Mar 2026 00:59:01 +0530 Subject: [PATCH 10/37] pkgs/wax-server: fix build Signed-off-by: phanirithvij --- pkgs/by-name/wax-server/package.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/by-name/wax-server/package.nix b/pkgs/by-name/wax-server/package.nix index 95b6a694f..855a0cba9 100644 --- a/pkgs/by-name/wax-server/package.nix +++ b/pkgs/by-name/wax-server/package.nix @@ -15,6 +15,8 @@ imagemagick, potrace, yarn, + pkg-config, + nodePackages, node-pre-gyp, nix-update-script, }: @@ -47,6 +49,8 @@ stdenv.mkDerivation (finalAttrs: { python3 gnumake gcc + nodePackages.node-gyp + pkg-config node-pre-gyp ]; From 419442cb303d49a55f685e4eeb7b823d4ed231cd Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Wed, 25 Mar 2026 01:14:30 +0530 Subject: [PATCH 11/37] projects(Verso): drop project Project is discontinued, see https://github.com/ngi-nix/ngipkgs/issues/869#issuecomment-3884409706 Signed-off-by: phanirithvij --- pkgs/by-name/verso/package.nix | 155 ------------------ projects/verso/default.nix | 35 ---- .../verso/programs/verso/examples/basic.nix | 5 - projects/verso/programs/verso/module.nix | 21 --- 4 files changed, 216 deletions(-) delete mode 100644 pkgs/by-name/verso/package.nix delete mode 100644 projects/verso/default.nix delete mode 100644 projects/verso/programs/verso/examples/basic.nix delete mode 100644 projects/verso/programs/verso/module.nix diff --git a/pkgs/by-name/verso/package.nix b/pkgs/by-name/verso/package.nix deleted file mode 100644 index acb5ef792..000000000 --- a/pkgs/by-name/verso/package.nix +++ /dev/null @@ -1,155 +0,0 @@ -{ - lib, - stdenv, - rustPlatform, - fetchFromGitLab, - unstableGitUpdater, - - llvmPackages, - m4, - pkg-config, - python3, - wrapGAppsHook3, - writableTmpDirAsHomeHook, - - apple-sdk_14, - fontconfig, - gst_all_1, - libGL, - libunwind, - libxkbcommon, - openssl, - wayland, -}: - -rustPlatform.buildRustPackage (finalAttrs: { - pname = "verso"; - version = "0-unstable-2025-06-17"; - - src = fetchFromGitLab { - owner = "verso-browser"; - repo = "verso"; - rev = "3aa9750eefaa35b1aed752c01162c353ed6be371"; - hash = "sha256-Ik7ZoUnqnHwWkp2nhKXRwjqcbabUdxEHz5mdsQuF+AI="; - }; - - depsExtraArgs = { - # The vendoring process copies subdirectories, but there are some files that - # try to read files from their parent directories during build time - # We avoid this issue by placing the used file into the subdirectory - postBuild = '' - pushd $out/git/*/components/net - cp ../../resources/rippy.png ./rippy.png - substituteInPlace image_cache.rs \ - --replace-fail '../../resources/rippy.png' './rippy.png' - popd - ''; - }; - - cargoHash = "sha256-dYsqr9c5n2lDt1K9EpAzkJXwmr2eJ+ExT53dlTEYraY="; - - postPatch = '' - # The original script assumes things about the directory layout of the build - substituteInPlace "$cargoDepsCopy"/script_bindings-*/codegen/run.py --replace-fail \ - "SERVO_ROOT =" \ - "SERVO_ROOT = '$(pwd)' #" - - # Set a better default resource directory search path - substituteInPlace src/config.rs --replace-fail \ - "let root_dir = std::env::current_dir()" \ - "let root_dir = { use std::str::FromStr; std::path::PathBuf::from_str(\"$out/share/verso\") }" - - # This is not actually needed since we have the "versoview" binary placed - # right next to verso, but it's better to be safe - substituteInPlace verso/src/main.rs --replace-fail \ - "let versoview_path = current_exe().unwrap().parent().unwrap().join(\"versoview\");" \ - "let versoview_path = std::path::Path::new(\"$out/bin/versoview\");" - ''; - - # Fix invalid option errors during linking - # https://github.com/mozilla/nixpkgs-mozilla/commit/c72ff151a3e25f14182569679ed4cd22ef352328 - preConfigure = '' - unset AS - ''; - - env.RUSTC_BOOTSTRAP = 1; - - cargoBuildFlags = [ - "-p=versoview" - "-p=verso" - # build times out without extra verbosity - "-v" - ]; - - nativeBuildInputs = [ - llvmPackages.llvm - m4 - python3 - rustPlatform.bindgenHook - writableTmpDirAsHomeHook - ] - ++ lib.optionals stdenv.hostPlatform.isLinux [ - pkg-config - wrapGAppsHook3 - ]; - - buildInputs = - lib.optionals stdenv.hostPlatform.isLinux [ - fontconfig - gst_all_1.gstreamer - gst_all_1.gst-plugins-base - gst_all_1.gst-plugins-good - gst_all_1.gst-plugins-bad - gst_all_1.gst-plugins-ugly - libunwind - openssl - ] - ++ lib.optionals stdenv.hostPlatform.isDarwin [ - apple-sdk_14 - ]; - - # Note: it might be better to disable automatic wrapping and only wrap versoview - # Note: using patchelf --add-rpath in postFixup could be better than setting LD_LIBRARY_PATH - preFixup = lib.optionalString stdenv.hostPlatform.isLinux '' - gappsWrapperArgs+=( - --prefix LD_LIBRARY_PATH : ${ - lib.makeLibraryPath [ - libGL - libxkbcommon - wayland - ] - } - ) - ''; - - postInstall = '' - install -Dm644 org.versotile.verso.desktop $out/share/applications/org.versotile.verso.desktop - install -Dm644 icons/icon256x256.png $out/share/icons/hicolor/256x256/apps/org.versotile.verso.png - - # Install the resource directory into our patched default location - mkdir -p "$out/share/verso" - cp -r ./resources "$out/share/verso/resources" - ''; - - # tests fail to compile in Nix sandbox, unfortunately - # probably due to the same vendoring issue above - doCheck = false; - - passthru.updateScript = unstableGitUpdater { }; - - meta = { - description = "Web browser built on top of the Servo web engine"; - homepage = "https://gitlab.com/verso-browser/verso"; - downloadPage = "https://gitlab.com/verso-browser/verso"; - license = with lib.licenses; [ - asl20 - mit - ]; - maintainers = with lib.maintainers; [ - ethancedwards8 - tomasajt - ]; - teams = [ lib.teams.ngi ]; - platforms = lib.platforms.linux ++ lib.platforms.darwin; - }; -}) diff --git a/projects/verso/default.nix b/projects/verso/default.nix deleted file mode 100644 index 57d2812ab..000000000 --- a/projects/verso/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - lib, - pkgs, - sources, - ... -}@args: - -{ - metadata = { - summary = "Verso is a new browser initiative that is based on the Servo browser engine"; - subgrants = { - Core = [ - "Verso-Views" - "Verso-WebView" - ]; - Review = [ - "Verso" - "Verso-Profile" - ]; - }; - }; - - nixos.modules.programs = { - verso = { - name = "verso"; - module = ./programs/verso/module.nix; - examples."Enable verso" = { - module = ./programs/verso/examples/basic.nix; - description = ""; - # TODO: can't figure out a way to specify a website for verso to open. - tests.basic.module = null; - }; - }; - }; -} diff --git a/projects/verso/programs/verso/examples/basic.nix b/projects/verso/programs/verso/examples/basic.nix deleted file mode 100644 index 1b47d4390..000000000 --- a/projects/verso/programs/verso/examples/basic.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ ... }: - -{ - programs.verso.enable = true; -} diff --git a/projects/verso/programs/verso/module.nix b/projects/verso/programs/verso/module.nix deleted file mode 100644 index 126d9168e..000000000 --- a/projects/verso/programs/verso/module.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.programs.verso; -in -{ - options.programs.verso = { - enable = lib.mkEnableOption "verso"; - package = lib.mkPackageOption pkgs "verso" { }; - }; - - config = lib.mkIf cfg.enable { - environment.systemPackages = with pkgs; [ - cfg.package - ]; - }; -} From 7746bbb96a438e2ff43d3aa64eff643e46675f04 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 02:13:17 +0530 Subject: [PATCH 12/37] liberaforms: migrate to buildPythonPackage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From nixpkgs pr https://github.com/NixOS/nixpkgs/pull/502754 Signed-off-by: phanirithvij flake.lock: Update Flake lock file updates: • Removed input 'dream2nix' • Removed input 'dream2nix/nixpkgs' • Removed input 'dream2nix/purescript-overlay' • Removed input 'dream2nix/purescript-overlay/flake-compat' • Removed input 'dream2nix/purescript-overlay/nixpkgs' • Removed input 'dream2nix/purescript-overlay/slimlock' • Removed input 'dream2nix/purescript-overlay/slimlock/nixpkgs' • Removed input 'dream2nix/pyproject-nix' • Removed input 'dream2nix/pyproject-nix/nixpkgs' --- flake.lock | 111 +-- flake.nix | 2 - .../commands/maintainance/update-all.nix | 2 - pkgs/by-name/default.nix | 6 +- pkgs/by-name/liberaforms/dream2.nix | 163 ---- pkgs/by-name/liberaforms/libmagic-path.patch | 28 - pkgs/by-name/liberaforms/lock.json | 787 ------------------ pkgs/by-name/liberaforms/package.nix | 268 ++++++ 8 files changed, 272 insertions(+), 1095 deletions(-) delete mode 100644 pkgs/by-name/liberaforms/dream2.nix delete mode 100644 pkgs/by-name/liberaforms/libmagic-path.patch delete mode 100644 pkgs/by-name/liberaforms/lock.json create mode 100644 pkgs/by-name/liberaforms/package.nix diff --git a/flake.lock b/flake.lock index 20b10316d..0d2a49fcd 100644 --- a/flake.lock +++ b/flake.lock @@ -45,45 +45,7 @@ "type": "github" } }, - "dream2nix": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ], - "purescript-overlay": "purescript-overlay", - "pyproject-nix": "pyproject-nix" - }, - "locked": { - "lastModified": 1765953015, - "narHash": "sha256-5FBZbbWR1Csp3Y2icfRkxMJw/a/5FGg8hCXej2//bbI=", - "owner": "nix-community", - "repo": "dream2nix", - "rev": "69eb01fa0995e1e90add49d8ca5bcba213b0416f", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "dream2nix", - "type": "github" - } - }, "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_2": { "flake": false, "locked": { "lastModified": 1747046372, @@ -99,7 +61,7 @@ "type": "github" } }, - "flake-compat_3": { + "flake-compat_2": { "flake": false, "locked": { "lastModified": 1767039857, @@ -268,7 +230,7 @@ }, "opam-nix": { "inputs": { - "flake-compat": "flake-compat_2", + "flake-compat": "flake-compat", "flake-utils": [ "flake-utils" ], @@ -357,7 +319,7 @@ }, "pre-commit-hooks": { "inputs": { - "flake-compat": "flake-compat_3", + "flake-compat": "flake-compat_2", "gitignore": "gitignore", "nixpkgs": [ "nixpkgs" @@ -377,55 +339,10 @@ "type": "github" } }, - "purescript-overlay": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": [ - "dream2nix", - "nixpkgs" - ], - "slimlock": "slimlock" - }, - "locked": { - "lastModified": 1728546539, - "narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=", - "owner": "thomashoneyman", - "repo": "purescript-overlay", - "rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4", - "type": "github" - }, - "original": { - "owner": "thomashoneyman", - "repo": "purescript-overlay", - "type": "github" - } - }, - "pyproject-nix": { - "inputs": { - "nixpkgs": [ - "dream2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1763017646, - "narHash": "sha256-Z+R2lveIp6Skn1VPH3taQIuMhABg1IizJd8oVdmdHsQ=", - "owner": "pyproject-nix", - "repo": "pyproject.nix", - "rev": "47bd6f296502842643078d66128f7b5e5370790c", - "type": "github" - }, - "original": { - "owner": "pyproject-nix", - "repo": "pyproject.nix", - "type": "github" - } - }, "root": { "inputs": { "buildbot-nix": "buildbot-nix", "devshell": "devshell", - "dream2nix": "dream2nix", "flake-utils": "flake-utils", "mirage-opam-overlays": "mirage-opam-overlays", "nix-filter": "nix-filter", @@ -464,28 +381,6 @@ "type": "github" } }, - "slimlock": { - "inputs": { - "nixpkgs": [ - "dream2nix", - "purescript-overlay", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1688756706, - "narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=", - "owner": "thomashoneyman", - "repo": "slimlock", - "rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c", - "type": "github" - }, - "original": { - "owner": "thomashoneyman", - "repo": "slimlock", - "type": "github" - } - }, "sops-nix": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index c2198f4f3..e41907b72 100644 --- a/flake.nix +++ b/flake.nix @@ -1,8 +1,6 @@ { description = "NGIpkgs"; - inputs.dream2nix.inputs.nixpkgs.follows = "nixpkgs"; - inputs.dream2nix.url = "github:nix-community/dream2nix"; inputs.flake-utils.inputs.systems.follows = "systems"; inputs.flake-utils.url = "github:numtide/flake-utils"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; diff --git a/maintainers/shells/commands/maintainance/update-all.nix b/maintainers/shells/commands/maintainance/update-all.nix index 4a982d40b..fa0eef1c2 100644 --- a/maintainers/shells/commands/maintainance/update-all.nix +++ b/maintainers/shells/commands/maintainance/update-all.nix @@ -25,8 +25,6 @@ "funkwhale" "marginalia-search" "peertube-plugins.livechat" - # FIX: dream2nix - "liberaforms" # FIX: don't update `sparql-queries` if there is no version change "inventaire-client" # fetcher not supported diff --git a/pkgs/by-name/default.nix b/pkgs/by-name/default.nix index a23bfc03e..755acbba5 100644 --- a/pkgs/by-name/default.nix +++ b/pkgs/by-name/default.nix @@ -1,7 +1,6 @@ { lib, pkgs, - dream2nix, sources, system, }: @@ -41,7 +40,6 @@ let let evaluated = lib.evalModules { specialArgs = { - inherit dream2nix; packageSets.nixpkgs = pkgs; }; modules = [ @@ -83,14 +81,12 @@ let _: directory: if pathExists (directory + "/package.nix") then callPackage (directory + "/package.nix") { } - else if pathExists (directory + "/dream2.nix") then - callModule (directory + "/dream2.nix") else if pathExists (directory + "/sbt-derivation.nix") then callPackage (directory + "/sbt-derivation.nix") { inherit mkSbtDerivation; } else - throw "No package.nix, dream2.nix or sbt-derivation.nix found in ${directory}" + throw "No package.nix, or sbt-derivation.nix found in ${directory}" ) packageDirectories; in self diff --git a/pkgs/by-name/liberaforms/dream2.nix b/pkgs/by-name/liberaforms/dream2.nix deleted file mode 100644 index 674ee920e..000000000 --- a/pkgs/by-name/liberaforms/dream2.nix +++ /dev/null @@ -1,163 +0,0 @@ -{ - lib, - config, - dream2nix, - ... -}: -# TODO: migrate away from dream2nix -# https://github.com/ngi-nix/ngipkgs/issues/1125 -let - version = "3.1.1"; - src = config.deps.fetchFromGitLab { - owner = "liberaforms"; - repo = "liberaforms"; - rev = "v${version}"; - hash = "sha256-RpEaO/3jje/ABdIGrnBo1sYPHpuUuDfe4uuJON9RiqY="; - }; - - # Python dependencies need an explicit format - # https://github.com/NixOS/nixpkgs/pull/421660 - pyprojectOverrides = - lib.genAttrs - [ - "markupsafe" - "feedgen" - "pyqrcode" - "sqlalchemy-json" - "unicodecsv" - ] - (name: { - buildPythonPackage.pyproject = true; - }); -in -{ - imports = [ dream2nix.modules.dream2nix.pip ]; - - deps = - { nixpkgs, ... }: - { - inherit (nixpkgs) - fetchFromGitLab - file - libxml2 - libxslt - postgresql - postgresqlTestHook - runCommand - replaceVars - ; - python = nixpkgs.python311; - }; - - name = "liberaforms"; - inherit version; - - buildPythonPackage.format = "other"; - - mkDerivation = { - inherit src; - dontConfigure = true; - dontBuild = true; - - installPhase = '' - runHook preInstall - - cp -R ${src}/. $out - - runHook postInstall - ''; - - doCheck = true; - - nativeCheckInputs = [ - config.deps.postgresql - config.deps.postgresqlTestHook - config.public.env - ]; - - preCheck = '' - export LANG=C.UTF-8 - export PGUSER=db_user - export postgresqlEnableTCP=1 - ''; - - checkPhase = '' - runHook preCheck - - # Run pytest on the installed version. A running postgres database server is needed. - (cd tests && cp test.ini.example test.ini && pytest -k "not test_save_smtp_config") #TODO why does this break? - - runHook postCheck - ''; - - # avoid writing in the migration process - postFixup = '' - cp $out/assets/brand/logo-default.png $out/assets/brand/logo.png - cp $out/assets/brand/favicon-default.ico $out/assets/brand/favicon.ico - sed -i "/shutil.copyfile/d" $out/liberaforms/models/site.py - sed -i "/brand_dir/d" $out/migrations/versions/6f0e2b9e9db3_.py - ''; - }; - - public = { - env = config.public.pyEnv; - meta = { - description = "Free form software"; - homepage = "https://gitlab.com/liberaforms/liberaforms"; - license = lib.licenses.agpl3Plus; - platforms = lib.platforms.all; - }; - }; - - pip = { - requirementsFiles = [ "${src}/requirements.txt" ]; - requirementsList = [ - "factory-boy" - "faker" - "polib" - "pytest-dotenv" - ]; - nativeBuildInputs = [ - config.deps.postgresql - config.deps.libxml2.dev - config.deps.libxslt.dev - ]; - pipFlags = [ - "--no-binary" - "python-magic" - ]; - overrides = { - lxml = { - mkDerivation = { - nativeBuildInputs = [ - config.deps.libxml2.dev - config.deps.libxslt.dev - ]; - }; - }; - python-magic = { - buildPythonPackage.pyproject = true; - mkDerivation = { - patches = [ - (config.deps.replaceVars ./libmagic-path.patch { - libmagic = "${config.deps.file}/lib/libmagic.so"; - }) - ]; - }; - }; - flask-session2 = { - mkDerivation = { - dontBuild = true; - }; - }; - typed-ast = { - buildPythonPackage.pyproject = true; - mkDerivation.preBuild = "export CFLAGS=\"-std=c99 $CFLAGS\""; - }; - } - // pyprojectOverrides; - flattenDependencies = true; - }; - - paths.lockFile = lib.mkForce "../lock.json"; -} diff --git a/pkgs/by-name/liberaforms/libmagic-path.patch b/pkgs/by-name/liberaforms/libmagic-path.patch deleted file mode 100644 index e9530d6dd..000000000 --- a/pkgs/by-name/liberaforms/libmagic-path.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git i/magic/loader.py w/magic/loader.py -index 931f161..b8096d1 100644 ---- i/magic/loader.py -+++ w/magic/loader.py -@@ -35,16 +35,12 @@ def _lib_candidates(): - - - def load_lib(): -+ lib = '@libmagic@' - -- for lib in _lib_candidates(): -- # find_library returns None when lib not found -- if lib is None: -- continue -- try: -- return ctypes.CDLL(lib) -- except OSError: -- pass -- else: -- # It is better to raise an ImportError since we are importing magic module -- raise ImportError('failed to find libmagic. Check your installation') -+ try: -+ return ctypes.CDLL(lib) -+ except OSError: -+ pass - -+ # It is better to raise an ImportError since we are importing magic module -+ raise ImportError('failed to find libmagic. Check your installation') diff --git a/pkgs/by-name/liberaforms/lock.json b/pkgs/by-name/liberaforms/lock.json deleted file mode 100644 index b5d80338b..000000000 --- a/pkgs/by-name/liberaforms/lock.json +++ /dev/null @@ -1,787 +0,0 @@ -{ - "fetchPipMetadata": { - "sources": { - "aiosmtpd": { - "is_direct": false, - "sha256": "f821fe424b703b2ea391dc2df11d89d2afd728af27393e13cf1a3530f19fdc5e", - "type": "url", - "url": "https://files.pythonhosted.org/packages/ef/b3/f4cce9da53b02aa7d4c0662ca344421023feefc5c8f815b90d1c7514702e/aiosmtpd-1.4.4.post2-py3-none-any.whl", - "version": "1.4.4.post2" - }, - "alembic": { - "is_direct": false, - "sha256": "0a024d7f2de88d738d7395ff866997314c837be6104e90c5724350313dee4da4", - "type": "url", - "url": "https://files.pythonhosted.org/packages/b3/c8/69600a8138a56794713ecdb8b75b14fbe32a410bc444683f27dbab93c0ca/alembic-1.8.1-py3-none-any.whl", - "version": "1.8.1" - }, - "atpublic": { - "is_direct": false, - "sha256": "80057c55641253b86dcb68b524f82328172371b6547d4c7462a9127fbfbbabfc", - "type": "url", - "url": "https://files.pythonhosted.org/packages/42/d5/f3c7110d3763af646150203b8bfe6932ab05a9b3e228c27d138babeb92ae/atpublic-4.0-py3-none-any.whl", - "version": "4.0" - }, - "attrs": { - "is_direct": false, - "sha256": "86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c", - "type": "url", - "url": "https://files.pythonhosted.org/packages/f2/bc/d817287d1aa01878af07c19505fafd1165cd6a119e9d0821ca1d1c20312d/attrs-22.1.0-py2.py3-none-any.whl", - "version": "22.1.0" - }, - "babel": { - "is_direct": false, - "sha256": "ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb", - "type": "url", - "url": "https://files.pythonhosted.org/packages/2e/57/a4177e24f8ed700c037e1eca7620097fdfbb1c9b358601e40169adf6d364/Babel-2.10.3-py3-none-any.whl", - "version": "2.10.3" - }, - "beautifulsoup4": { - "is_direct": false, - "sha256": "58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30", - "type": "url", - "url": "https://files.pythonhosted.org/packages/9c/d8/909c4089dbe4ade9f9705f143c9f13f065049a9d5e7d34c828aefdd0a97c/beautifulsoup4-4.11.1-py3-none-any.whl", - "version": "4.11.1" - }, - "bleach": { - "is_direct": false, - "sha256": "085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a", - "type": "url", - "url": "https://files.pythonhosted.org/packages/d4/87/508104336a2bc0c4cfdbdceedc0f44dc72da3abc0460c57e323ddd1b3257/bleach-5.0.1-py3-none-any.whl", - "version": "5.0.1" - }, - "cachelib": { - "is_direct": false, - "sha256": "811ceeb1209d2fe51cd2b62810bd1eccf70feba5c52641532498be5c675493b3", - "type": "url", - "url": "https://files.pythonhosted.org/packages/93/70/58e525451478055b0fd2859b22226888a6985d404fe65e014fc4893d3b75/cachelib-0.9.0-py3-none-any.whl", - "version": "0.9.0" - }, - "certifi": { - "is_direct": false, - "sha256": "90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382", - "type": "url", - "url": "https://files.pythonhosted.org/packages/1d/38/fa96a426e0c0e68aabc68e896584b83ad1eec779265a028e156ce509630e/certifi-2022.9.24-py3-none-any.whl", - "version": "2022.9.24" - }, - "cffi": { - "is_direct": false, - "sha256": "94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", - "type": "url", - "url": "https://files.pythonhosted.org/packages/37/5a/c37631a86be838bdd84cc0259130942bf7e6e32f70f4cab95f479847fb91/cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "version": "1.15.1" - }, - "charset-normalizer": { - "is_direct": false, - "sha256": "83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f", - "type": "url", - "url": "https://files.pythonhosted.org/packages/db/51/a507c856293ab05cdc1db77ff4bc1268ddd39f29e7dc4919aa497f0adbec/charset_normalizer-2.1.1-py3-none-any.whl", - "version": "2.1.1" - }, - "click": { - "is_direct": false, - "sha256": "bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48", - "type": "url", - "url": "https://files.pythonhosted.org/packages/c2/f1/df59e28c642d583f7dacffb1e0965d0e00b218e0186d7858ac5233dce840/click-8.1.3-py3-none-any.whl", - "version": "8.1.3" - }, - "cryptography": { - "is_direct": false, - "sha256": "3261725c0ef84e7592597606f6583385fed2a5ec3909f43bc475ade9729a41d6", - "type": "url", - "url": "https://files.pythonhosted.org/packages/d2/42/2b5be637a08a0d83057bbce4c2cd904271a6b2fb46b6cd4abcb6f2df222c/cryptography-38.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", - "version": "38.0.1" - }, - "dnspython": { - "is_direct": false, - "sha256": "a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f", - "type": "url", - "url": "https://files.pythonhosted.org/packages/9b/ed/28fb14146c7033ba0e89decd92a4fa16b0b69b84471e2deab3cc4337cc35/dnspython-2.2.1-py3-none-any.whl", - "version": "2.2.1" - }, - "email-validator": { - "is_direct": false, - "sha256": "816073f2a7cffef786b29928f58ec16cdac42710a53bb18aa94317e3e145ec5c", - "type": "url", - "url": "https://files.pythonhosted.org/packages/e7/d3/88997ca4903c70fb6eec2e29501a35f84aaf34790f207febdf188e374377/email_validator-1.3.0-py2.py3-none-any.whl", - "version": "1.3.0" - }, - "factory-boy": { - "is_direct": false, - "sha256": "a2cdbdb63228177aa4f1c52f4b6d83fab2b8623bf602c7dedd7eb83c0f69c04c", - "type": "url", - "url": "https://files.pythonhosted.org/packages/7d/37/69bc18ffa39ae7723b61ca0dde30130ea45f9127c129f084f5c6ca5d5dae/factory_boy-3.3.0-py2.py3-none-any.whl", - "version": "3.3.0" - }, - "faker": { - "is_direct": false, - "sha256": "e8c5ef795223e945d9166aea3c0ecaf85ac54b4ade2af068d8e3c6524c2c0aa7", - "type": "url", - "url": "https://files.pythonhosted.org/packages/b3/ec/7f13c0c786e340a0e6790acacc6d05cc2360d8acbf104c3cc3cfc09f63c1/Faker-26.1.0-py3-none-any.whl", - "version": "26.1.0" - }, - "feedgen": { - "is_direct": false, - "sha256": "8e811bdbbed6570034950db23a4388453628a70e689a6e8303ccec430f5a804a", - "type": "url", - "url": "https://files.pythonhosted.org/packages/0b/60/7714c7f1339e063ad2e0964870797610c23191c180fc2713be100cc82d1a/feedgen-0.9.0.tar.gz", - "version": "0.9.0" - }, - "flask": { - "is_direct": false, - "sha256": "b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526", - "type": "url", - "url": "https://files.pythonhosted.org/packages/0f/43/15f4f9ab225b0b25352412e8daa3d0e3d135fcf5e127070c74c3632c8b4c/Flask-2.2.2-py3-none-any.whl", - "version": "2.2.2" - }, - "flask-babel": { - "is_direct": false, - "sha256": "e6820a052a8d344e178cdd36dd4bb8aea09b4bda3d5f9fa9f008df2c7f2f5468", - "type": "url", - "url": "https://files.pythonhosted.org/packages/ab/3e/02331179ffab8b79e0383606a028b6a60fb1b4419b84935edd43223406a0/Flask_Babel-2.0.0-py3-none-any.whl", - "version": "2.0.0" - }, - "flask-login": { - "is_direct": false, - "sha256": "1ef79843f5eddd0f143c2cd994c1b05ac83c0401dc6234c143495af9a939613f", - "type": "url", - "url": "https://files.pythonhosted.org/packages/a6/94/01b658bef1863a07f4738a322cce87d97be4362645255dc1182f7f5c075a/Flask_Login-0.6.2-py3-none-any.whl", - "version": "0.6.2" - }, - "flask-marshmallow": { - "is_direct": false, - "sha256": "ce08a153f74da6ebfffd8065d1687508b0179df37fff7fc0c8f28ccfb64f1b56", - "type": "url", - "url": "https://files.pythonhosted.org/packages/1f/2a/eeb3db46209410d4add2c369ad73e3340c314196b08d1895ac972eb38bd7/flask_marshmallow-0.15.0-py2.py3-none-any.whl", - "version": "0.15.0" - }, - "flask-migrate": { - "is_direct": false, - "sha256": "a6498706241aba6be7a251078de9cf166d74307bca41a4ca3e403c9d39e2f897", - "type": "url", - "url": "https://files.pythonhosted.org/packages/a8/48/b64a6a2fee01b03f3318cba3aea1c0055ab5f4a933b2d4f5a2d75140c229/Flask_Migrate-3.1.0-py3-none-any.whl", - "version": "3.1.0" - }, - "flask-session2": { - "is_direct": false, - "sha256": "6d1615dfc4b247759f31f89bf16aba96fa1294077e700771875abe952f291959", - "type": "url", - "url": "https://files.pythonhosted.org/packages/12/c6/f8324625dc2a0ea895623673116c9bb9cb14a63a7786cb4153bcc0a21c64/Flask_Session2-1.3.1-py3-none-any.whl", - "version": "1.3.1" - }, - "flask-sqlalchemy": { - "is_direct": false, - "sha256": "7d0cd9cf73e64a996bb881a1ebd01633fc5a6d11c36ea27f7b5e251dc45476e7", - "type": "url", - "url": "https://files.pythonhosted.org/packages/1b/9c/2b3ce12b3f7eca00d1f54a6eb84e6cb57b628aa2891a81bb12dfd8b6d604/Flask_SQLAlchemy-3.0.2-py3-none-any.whl", - "version": "3.0.2" - }, - "flask-wtf": { - "is_direct": false, - "sha256": "9d733658c80be551ce7d5bc13c7a7ac0d80df509be1e23827c847d9520f4359a", - "type": "url", - "url": "https://files.pythonhosted.org/packages/3a/26/3803ee692eb9a8d21bf7ba1cecd649ce3a55899c65467bdfc1bad13ec50f/Flask_WTF-1.0.1-py3-none-any.whl", - "version": "1.0.1" - }, - "greenlet": { - "is_direct": false, - "sha256": "c0643250dd0756f4960633f5359884f609a234d4066686754e834073d84e9b51", - "type": "url", - "url": "https://files.pythonhosted.org/packages/2e/0d/3402b278a122d30128d51941b10bb41395aec5a56e7cf744401c804c0d31/greenlet-1.1.3.post0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "version": "1.1.3.post0" - }, - "gunicorn": { - "is_direct": false, - "sha256": "3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0", - "type": "url", - "url": "https://files.pythonhosted.org/packages/0e/2a/c3a878eccb100ccddf45c50b6b8db8cf3301a6adede6e31d48e8531cab13/gunicorn-21.2.0-py3-none-any.whl", - "version": "21.2.0" - }, - "idna": { - "is_direct": false, - "sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2", - "type": "url", - "url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", - "version": "3.4" - }, - "importlib-metadata": { - "is_direct": false, - "sha256": "ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43", - "type": "url", - "url": "https://files.pythonhosted.org/packages/b5/64/ef29a63cf08f047bb7fb22ab0f1f774b87eed0bb46d067a5a524798a4af8/importlib_metadata-5.0.0-py3-none-any.whl", - "version": "5.0.0" - }, - "importlib-resources": { - "is_direct": false, - "sha256": "ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437", - "type": "url", - "url": "https://files.pythonhosted.org/packages/c8/47/6bfe2147eae436391916b3741a2cd9a76763e9671703a0d1d8e83142816e/importlib_resources-5.10.0-py3-none-any.whl", - "version": "5.10.0" - }, - "iniconfig": { - "is_direct": false, - "sha256": "011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", - "type": "url", - "url": "https://files.pythonhosted.org/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl", - "version": "1.1.1" - }, - "itsdangerous": { - "is_direct": false, - "sha256": "2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", - "type": "url", - "url": "https://files.pythonhosted.org/packages/68/5f/447e04e828f47465eeab35b5d408b7ebaaaee207f48b7136c5a7267a30ae/itsdangerous-2.1.2-py3-none-any.whl", - "version": "2.1.2" - }, - "jinja2": { - "is_direct": false, - "sha256": "6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61", - "type": "url", - "url": "https://files.pythonhosted.org/packages/bc/c3/f068337a370801f372f2f8f6bad74a5c140f6fda3d9de154052708dd3c65/Jinja2-3.1.2-py3-none-any.whl", - "version": "3.1.2" - }, - "ldap3": { - "is_direct": false, - "sha256": "5869596fc4948797020d3f03b7939da938778a0f9e2009f7a072ccf92b8e8d70", - "type": "url", - "url": "https://files.pythonhosted.org/packages/4e/f6/71d6ec9f18da0b2201287ce9db6afb1a1f637dedb3f0703409558981c723/ldap3-2.9.1-py2.py3-none-any.whl", - "version": "2.9.1" - }, - "lxml": { - "is_direct": false, - "sha256": "f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3", - "type": "url", - "url": "https://files.pythonhosted.org/packages/d1/71/c865c165583aff2d2806e2bce886d580aa513bb0e5d5d3a5aec7fc57d40c/lxml-4.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", - "version": "4.9.1" - }, - "mako": { - "is_direct": false, - "sha256": "c413a086e38cd885088d5e165305ee8eed04e8b3f8f62df343480da0a385735f", - "type": "url", - "url": "https://files.pythonhosted.org/packages/e8/4c/7471dca7f17a805245a7fcdf22eefcd961e9dbd620d5399e3dfbaac9a60a/Mako-1.2.3-py3-none-any.whl", - "version": "1.2.3" - }, - "markdown": { - "is_direct": false, - "sha256": "08fb8465cffd03d10b9dd34a5c3fea908e20391a2a90b88d66362cb05beed186", - "type": "url", - "url": "https://files.pythonhosted.org/packages/86/be/ad281f7a3686b38dd8a307fa33210cdf2130404dfef668a37a4166d737ca/Markdown-3.4.1-py3-none-any.whl", - "version": "3.4.1" - }, - "markupsafe": { - "is_direct": false, - "sha256": "7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", - "type": "url", - "url": "https://files.pythonhosted.org/packages/1d/97/2288fe498044284f39ab8950703e88abbac2abbdf65524d576157af70556/MarkupSafe-2.1.1.tar.gz", - "version": "2.1.1" - }, - "marshmallow": { - "is_direct": false, - "sha256": "35e02a3a06899c9119b785c12a22f4cda361745d66a71ab691fd7610202ae104", - "type": "url", - "url": "https://files.pythonhosted.org/packages/c3/06/e0300cb5f9b5ff9b6d0accdd3536c01bd2300f8154781455914752ab8903/marshmallow-3.18.0-py3-none-any.whl", - "version": "3.18.0" - }, - "marshmallow-sqlalchemy": { - "is_direct": false, - "sha256": "dbb061c19375eca3a7d18358d2ca8bbaee825fc3000a3f114e2698282362b536", - "type": "url", - "url": "https://files.pythonhosted.org/packages/be/f8/b7ec99c9c2d5c42779d311010c024ff1224eb53b4ebfcc1de593a6f01390/marshmallow_sqlalchemy-0.28.1-py2.py3-none-any.whl", - "version": "0.28.1" - }, - "minio": { - "is_direct": false, - "sha256": "51318733496f37617bebfefe116453406a0d5afc6add8c421df07f32e0843c2b", - "type": "url", - "url": "https://files.pythonhosted.org/packages/78/16/a252d8cb3c3178480820a005426b67cb7a94efbdb18962b7af1e4c67ee6d/minio-7.1.2-py3-none-any.whl", - "version": "7.1.2" - }, - "packaging": { - "is_direct": false, - "sha256": "ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522", - "type": "url", - "url": "https://files.pythonhosted.org/packages/05/8e/8de486cbd03baba4deef4142bd643a3e7bbe954a784dc1bb17142572d127/packaging-21.3-py3-none-any.whl", - "version": "21.3" - }, - "passlib": { - "is_direct": false, - "sha256": "aa6bca462b8d8bda89c70b382f0c298a20b5560af6cbfa2dce410c0a2fb669f1", - "type": "url", - "url": "https://files.pythonhosted.org/packages/3b/a4/ab6b7589382ca3df236e03faa71deac88cae040af60c071a78d254a62172/passlib-1.7.4-py2.py3-none-any.whl", - "version": "1.7.4" - }, - "password-strength": { - "is_direct": false, - "sha256": "6739357c2863d707b7c7f247ff7c6882a70904a18d12c9aaf98f8b95da176fb9", - "type": "url", - "url": "https://files.pythonhosted.org/packages/1c/d6/08fd888c980589e4e27c2a4177e972481e8881600138e63afb785fe52630/password_strength-0.0.3.post2-py2.py3-none-any.whl", - "version": "0.0.3.post2" - }, - "pillow": { - "is_direct": false, - "sha256": "bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a", - "type": "url", - "url": "https://files.pythonhosted.org/packages/f4/2c/aa1eefda3538b661c1fd2310f19e82b7ee09c5362ab1f8f03b6e69ef5bfb/Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", - "version": "9.2.0" - }, - "platformdirs": { - "is_direct": false, - "sha256": "027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", - "type": "url", - "url": "https://files.pythonhosted.org/packages/ed/22/967181c94c3a4063fe64e15331b4cb366bdd7dfbf46fcb8ad89650026fec/platformdirs-2.5.2-py3-none-any.whl", - "version": "2.5.2" - }, - "pluggy": { - "is_direct": false, - "sha256": "74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3", - "type": "url", - "url": "https://files.pythonhosted.org/packages/9e/01/f38e2ff29715251cf25532b9082a1589ab7e4f571ced434f98d0139336dc/pluggy-1.0.0-py2.py3-none-any.whl", - "version": "1.0.0" - }, - "polib": { - "is_direct": false, - "sha256": "1c77ee1b81feb31df9bca258cbc58db1bbb32d10214b173882452c73af06d62d", - "type": "url", - "url": "https://files.pythonhosted.org/packages/6b/99/45bb1f9926efe370c6dbe324741c749658e44cb060124f28dad201202274/polib-1.2.0-py2.py3-none-any.whl", - "version": "1.2.0" - }, - "portpicker": { - "is_direct": false, - "sha256": "01113f51c3cc63290a44dd7ae6e3eb9f8fe1b8a1f9d7988a897944230c39cd52", - "type": "url", - "url": "https://files.pythonhosted.org/packages/53/47/085215ca086b0e456421158a912d573f162644d6ef7a96de60fbc6dc99b2/portpicker-1.5.2-py3-none-any.whl", - "version": "1.5.2" - }, - "prometheus-client": { - "is_direct": false, - "sha256": "db7c05cbd13a0f79975592d112320f2605a325969b270a94b71dcabc47b931d2", - "type": "url", - "url": "https://files.pythonhosted.org/packages/2e/5e/4225463cdac1098aac718b1d8adf8f9dc3d6aaea55f4f85a2f7d572b4f7c/prometheus_client-0.15.0-py3-none-any.whl", - "version": "0.15.0" - }, - "psutil": { - "is_direct": false, - "sha256": "89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4", - "type": "url", - "url": "https://files.pythonhosted.org/packages/af/4d/389441079ecef400e2551a3933224885a7bde6b8a4810091d628cdd75afe/psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "version": "5.9.5" - }, - "psycopg2": { - "is_direct": false, - "sha256": "d529926254e093a1b669f692a3aa50069bc71faf5b0ecd91686a78f62767d52f", - "type": "url", - "url": "https://files.pythonhosted.org/packages/8d/d7/277e23b708a0429b6b3d50e86e52b791156dfbfa81917d34ef6d7b435b84/psycopg2-2.9.4.tar.gz", - "version": "2.9.4" - }, - "py": { - "is_direct": false, - "sha256": "607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378", - "type": "url", - "url": "https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl", - "version": "1.11.0" - }, - "pyasn1": { - "is_direct": false, - "sha256": "39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", - "type": "url", - "url": "https://files.pythonhosted.org/packages/62/1e/a94a8d635fa3ce4cfc7f506003548d0a2447ae76fd5ca53932970fe3053f/pyasn1-0.4.8-py2.py3-none-any.whl", - "version": "0.4.8" - }, - "pycodestyle": { - "is_direct": false, - "sha256": "8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610", - "type": "url", - "url": "https://files.pythonhosted.org/packages/a2/54/001fdc0d69e8d0bb86c3423a6fa6dfada8cc26317c2635ab543e9ac411bd/pycodestyle-2.10.0-py2.py3-none-any.whl", - "version": "2.10.0" - }, - "pycparser": { - "is_direct": false, - "sha256": "8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "type": "url", - "url": "https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl", - "version": "2.21" - }, - "pyjwt": { - "is_direct": false, - "sha256": "ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1", - "type": "url", - "url": "https://files.pythonhosted.org/packages/c7/e8/01b2e35d81e618a8212e651e10c91660bdfda49c1d15ce66f4ca1ff43649/PyJWT-2.7.0-py3-none-any.whl", - "version": "2.7.0" - }, - "pyparsing": { - "is_direct": false, - "sha256": "5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc", - "type": "url", - "url": "https://files.pythonhosted.org/packages/6c/10/a7d0fa5baea8fe7b50f448ab742f26f52b80bfca85ac2be9d35cdd9a3246/pyparsing-3.0.9-py3-none-any.whl", - "version": "3.0.9" - }, - "pypng": { - "is_direct": false, - "sha256": "4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c", - "type": "url", - "url": "https://files.pythonhosted.org/packages/3e/b9/3766cc361d93edb2ce81e2e1f87dd98f314d7d513877a342d31b30741680/pypng-0.20220715.0-py3-none-any.whl", - "version": "0.20220715.0" - }, - "pyqrcode": { - "is_direct": false, - "sha256": "1b2812775fa6ff5c527977c4cd2ccb07051ca7d0bc0aecf937a43864abe5eff6", - "type": "url", - "url": "https://files.pythonhosted.org/packages/06/76/1aa11ac094c65005b5d8a042b8bd96d73d4e2c32d9a63a68b21278e4b7d2/PyQRCode-1.2.1.zip", - "version": "1.2.1" - }, - "pytest": { - "is_direct": false, - "sha256": "b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8", - "type": "url", - "url": "https://files.pythonhosted.org/packages/51/ff/f6e8b8f39e08547faece4bd80f89d5a8de68a38b2d179cc1c4490ffa3286/pytest-7.4.4-py3-none-any.whl", - "version": "7.4.4" - }, - "pytest-dotenv": { - "is_direct": false, - "sha256": "40a2cece120a213898afaa5407673f6bd924b1fa7eafce6bda0e8abffe2f710f", - "type": "url", - "url": "https://files.pythonhosted.org/packages/d0/da/9da67c67b3d0963160e3d2cbc7c38b6fae342670cc8e6d5936644b2cf944/pytest_dotenv-0.5.2-py3-none-any.whl", - "version": "0.5.2" - }, - "python-dateutil": { - "is_direct": false, - "sha256": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9", - "type": "url", - "url": "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl", - "version": "2.8.2" - }, - "python-dotenv": { - "is_direct": false, - "sha256": "1684eb44636dd462b66c3ee016599815514527ad99965de77f43e0944634a7e5", - "type": "url", - "url": "https://files.pythonhosted.org/packages/2d/10/ff4f2f5b2a420fd09e1331d63cc87cf4367c5745c0a4ce99cea92b1cbacb/python_dotenv-0.21.0-py3-none-any.whl", - "version": "0.21.0" - }, - "python-magic": { - "is_direct": false, - "sha256": "c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b", - "type": "url", - "url": "https://files.pythonhosted.org/packages/da/db/0b3e28ac047452d079d375ec6798bf76a036a08182dbb39ed38116a49130/python-magic-0.4.27.tar.gz", - "version": "0.4.27" - }, - "pytz": { - "is_direct": false, - "sha256": "335ab46900b1465e714b4fda4963d87363264eb662aab5e65da039c25f1f5b22", - "type": "url", - "url": "https://files.pythonhosted.org/packages/b5/d7/91fd8911d22e7fac794803095dd192bf1ebd70c7603272085230d915e738/pytz-2022.5-py2.py3-none-any.whl", - "version": "2022.5" - }, - "requests": { - "is_direct": false, - "sha256": "8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349", - "type": "url", - "url": "https://files.pythonhosted.org/packages/ca/91/6d9b8ccacd0412c08820f72cebaa4f0c0441b5cda699c90f618b6f8a1b42/requests-2.28.1-py3-none-any.whl", - "version": "2.28.1" - }, - "six": { - "is_direct": false, - "sha256": "8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", - "type": "url", - "url": "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", - "version": "1.16.0" - }, - "smtpdfix": { - "is_direct": false, - "sha256": "fab6c8f9060d1dca4ac6f338dae00f487e59de69a2133e58f03f0fe7ff295f52", - "type": "url", - "url": "https://files.pythonhosted.org/packages/97/d3/fa54ea5d3739ed282770e2601d47837164d26d244990135ebdc6b517b378/smtpdfix-0.5.1-py3-none-any.whl", - "version": "0.5.1" - }, - "snowballstemmer": { - "is_direct": false, - "sha256": "c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a", - "type": "url", - "url": "https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl", - "version": "2.2.0" - }, - "soupsieve": { - "is_direct": false, - "sha256": "3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759", - "type": "url", - "url": "https://files.pythonhosted.org/packages/16/e3/4ad79882b92617e3a4a0df1960d6bce08edfb637737ac5c3f3ba29022e25/soupsieve-2.3.2.post1-py3-none-any.whl", - "version": "2.3.2.post1" - }, - "sqlalchemy": { - "is_direct": false, - "sha256": "11b2ec26c5d2eefbc3e6dca4ec3d3d95028be62320b96d687b6e740424f83b7d", - "type": "url", - "url": "https://files.pythonhosted.org/packages/bb/99/61d04da449e6a26c0d09e44b4d4aa36b64f095ec824d001ff8b69fd46f56/SQLAlchemy-1.4.42-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "version": "1.4.42" - }, - "sqlalchemy-json": { - "is_direct": false, - "sha256": "89f82420dbb6ace0228535506686536f646ee17e2f35a1a810cefbce6d75a649", - "type": "url", - "url": "https://files.pythonhosted.org/packages/8e/cc/9fcde4f5739de1499179dde18d1734f42d1bb5bc9c7188e582d96b53ebeb/sqlalchemy-json-0.5.0.tar.gz", - "version": "0.5.0" - }, - "toml": { - "is_direct": false, - "sha256": "806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", - "type": "url", - "url": "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", - "version": "0.10.2" - }, - "typed-ast": { - "is_direct": false, - "sha256": "39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2", - "type": "url", - "url": "https://files.pythonhosted.org/packages/07/d2/d55702e8deba2c80282fea0df53130790d8f398648be589750954c2dcce4/typed_ast-1.5.4.tar.gz", - "version": "1.5.4" - }, - "unicodecsv": { - "is_direct": false, - "sha256": "018c08037d48649a0412063ff4eda26eaa81eff1546dbffa51fa5293276ff7fc", - "type": "url", - "url": "https://files.pythonhosted.org/packages/6f/a4/691ab63b17505a26096608cc309960b5a6bdf39e4ba1a793d5f9b1a53270/unicodecsv-0.14.1.tar.gz", - "version": "0.14.1" - }, - "unidecode": { - "is_direct": false, - "sha256": "547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be", - "type": "url", - "url": "https://files.pythonhosted.org/packages/be/ea/90e14e807da5a39e5b16789acacd48d63ca3e4f23dfa964a840eeadebb13/Unidecode-1.3.6-py3-none-any.whl", - "version": "1.3.6" - }, - "urllib3": { - "is_direct": false, - "sha256": "b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997", - "type": "url", - "url": "https://files.pythonhosted.org/packages/6f/de/5be2e3eed8426f871b170663333a0f627fc2924cc386cd41be065e7ea870/urllib3-1.26.12-py2.py3-none-any.whl", - "version": "1.26.12" - }, - "webencodings": { - "is_direct": false, - "sha256": "a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", - "type": "url", - "url": "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", - "version": "0.5.1" - }, - "werkzeug": { - "is_direct": false, - "sha256": "f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5", - "type": "url", - "url": "https://files.pythonhosted.org/packages/c8/27/be6ddbcf60115305205de79c29004a0c6bc53cec814f733467b1bb89386d/Werkzeug-2.2.2-py3-none-any.whl", - "version": "2.2.2" - }, - "wtforms": { - "is_direct": false, - "sha256": "837f2f0e0ca79481b92884962b914eba4e72b7a2daaf1f939c890ed0124b834b", - "type": "url", - "url": "https://files.pythonhosted.org/packages/eb/2e/199a0edf6577af771a68fbd950d98f0c1a16bb5fa956e45772005318c702/WTForms-3.0.1-py3-none-any.whl", - "version": "3.0.1" - }, - "zipp": { - "is_direct": false, - "sha256": "4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1", - "type": "url", - "url": "https://files.pythonhosted.org/packages/40/8a/d63273ed0fa4a3d06f77e7b043f6577d8894e95515b0c187c52e2c0efabb/zipp-3.10.0-py3-none-any.whl", - "version": "3.10.0" - } - }, - "targets": { - "default": { - "aiosmtpd": [ - "atpublic", - "attrs" - ], - "alembic": [ - "mako", - "sqlalchemy" - ], - "atpublic": [], - "attrs": [], - "babel": [ - "pytz" - ], - "beautifulsoup4": [ - "soupsieve" - ], - "bleach": [ - "six", - "webencodings" - ], - "cachelib": [], - "certifi": [], - "cffi": [ - "pycparser" - ], - "charset-normalizer": [], - "click": [], - "cryptography": [ - "cffi" - ], - "dnspython": [], - "email-validator": [ - "dnspython", - "idna" - ], - "factory-boy": [ - "faker" - ], - "faker": [ - "python-dateutil" - ], - "feedgen": [ - "lxml", - "python-dateutil" - ], - "flask": [ - "click", - "itsdangerous", - "jinja2", - "werkzeug" - ], - "flask-babel": [ - "babel", - "flask", - "jinja2", - "pytz" - ], - "flask-login": [ - "flask", - "werkzeug" - ], - "flask-marshmallow": [ - "flask", - "marshmallow", - "packaging" - ], - "flask-migrate": [ - "alembic", - "flask", - "flask-sqlalchemy" - ], - "flask-session2": [ - "cachelib", - "flask", - "pytz" - ], - "flask-sqlalchemy": [ - "flask", - "sqlalchemy" - ], - "flask-wtf": [ - "flask", - "itsdangerous", - "wtforms" - ], - "greenlet": [], - "gunicorn": [ - "packaging" - ], - "idna": [], - "importlib-metadata": [ - "zipp" - ], - "importlib-resources": [], - "iniconfig": [], - "itsdangerous": [], - "jinja2": [ - "markupsafe" - ], - "ldap3": [ - "pyasn1" - ], - "lxml": [], - "mako": [ - "markupsafe" - ], - "markdown": [], - "markupsafe": [], - "marshmallow": [ - "packaging" - ], - "marshmallow-sqlalchemy": [ - "marshmallow", - "packaging", - "sqlalchemy" - ], - "minio": [ - "certifi", - "urllib3" - ], - "packaging": [ - "pyparsing" - ], - "passlib": [], - "password-strength": [ - "six" - ], - "pillow": [], - "platformdirs": [], - "pluggy": [], - "polib": [], - "portpicker": [ - "psutil" - ], - "prometheus-client": [], - "psutil": [], - "psycopg2": [], - "py": [], - "pyasn1": [], - "pycodestyle": [], - "pycparser": [], - "pyjwt": [], - "pyparsing": [], - "pypng": [], - "pyqrcode": [], - "pytest": [ - "iniconfig", - "packaging", - "pluggy" - ], - "pytest-dotenv": [ - "pytest", - "python-dotenv" - ], - "python-dateutil": [ - "six" - ], - "python-dotenv": [], - "python-magic": [], - "pytz": [], - "requests": [ - "certifi", - "charset-normalizer", - "idna", - "urllib3" - ], - "six": [], - "smtpdfix": [ - "aiosmtpd", - "cryptography", - "portpicker", - "pytest" - ], - "snowballstemmer": [], - "soupsieve": [], - "sqlalchemy": [ - "greenlet" - ], - "sqlalchemy-json": [ - "six", - "sqlalchemy" - ], - "toml": [], - "typed-ast": [], - "unicodecsv": [], - "unidecode": [], - "urllib3": [], - "webencodings": [], - "werkzeug": [ - "markupsafe" - ], - "wtforms": [ - "markupsafe" - ], - "zipp": [] - } - } - }, - "invalidationHash": "bfd78b44c4cb83b35cf704f0bae7f24014c277d472c8c429a4d6f7771d4fa2c8" -} \ No newline at end of file diff --git a/pkgs/by-name/liberaforms/package.nix b/pkgs/by-name/liberaforms/package.nix new file mode 100644 index 000000000..4e0f3b59d --- /dev/null +++ b/pkgs/by-name/liberaforms/package.nix @@ -0,0 +1,268 @@ +{ + lib, + python3, + fetchFromGitea, + fetchFromGitHub, + fetchPypi, + + moreutils, + dart-sass, + postgresql, + libxml2, + libxslt, + + # tests + postgresqlTestHook, +}: + +let + python = python3.override { + packageOverrides = self: super: { + # required 1.8.1 (tests fail otherwise) + alembic = super.alembic.overridePythonAttrs rec { + pname = "alembic"; + version = "1.8.1"; + src = fetchPypi { + inherit pname version; + sha256 = "sha256-zQteRbFLcGQmuDPwY2m5ptXuA/gm7DI4cjzoyq9uX/o="; + }; + doCheck = false; + }; + # required 3.1.0 (requirements and 3.1.0 works with alembic 1.8.1) + flask-migrate = super.flask-migrate.overridePythonAttrs (old: rec { + version = "3.1.0"; + src = fetchFromGitHub { + owner = "miguelgrinberg"; + repo = "Flask-Migrate"; + tag = "v${version}"; + hash = "sha256-2P9UfR/1Vv9FSmpSZn0gV4/uuSNdl6sdgRnSbefFR34="; + }; + dependencies = [ + self.alembic + super.flask + self.flask-sqlalchemy + ]; + nativeCheckInputs = [ ]; + }); + # required downgrade to 3.0.2 (from requirements.txt as well as sqlalchemy downgrade) + flask-sqlalchemy = super.flask-sqlalchemy.overridePythonAttrs (old: rec { + version = "3.0.2"; + src = fetchPypi { + pname = "Flask-SQLAlchemy"; + inherit version; + hash = "sha256-FhmfWz3ftp4N8vUq5Mdq7b/sgjRiNJ2rshobLgorZek="; + }; + dependencies = [ + super.flask + self.sqlalchemy + super.pdm-pep517 + ]; + }); + # required 1.4.42 (from requirements) + sqlalchemy = super.sqlalchemy_1_4.overridePythonAttrs rec { + version = "1.4.42"; + src = fetchFromGitHub { + owner = "sqlalchemy"; + repo = "sqlalchemy"; + rev = "rel_${lib.replaceStrings [ "." ] [ "_" ] version}"; + hash = "sha256-RVpreszvd5hn9BLzvnfKT4nibUuybtZwBRloe5NaP/E="; + }; + env.NIX_CFLAGS_COMPILE = "-Wno-error=implicit-function-declaration"; + disabledTestPaths = [ + # typing correctness, not interesting + "test/ext/mypy" + # slow and high memory usage, not interesting + "test/aaa_profiling" + # fetching and key slice failures, probably network related + "test/base/test_result.py" + "test/dialect/test_sqlite.py" + "test/ext/test_baked.py" + "test/ext/test_horizontal_shard.py" + "test/ext/test_hybrid.py" + "test/orm/" + "test/sql/test_resultset.py" + ]; + }; + + }; + }; + python3Packages = python.pkgs; +in + +python3Packages.buildPythonPackage (finalAttrs: { + pname = "liberaforms"; + version = "4.8.0"; + format = "other"; + + src = fetchFromGitea { + domain = "codeberg.org"; + owner = "LiberaForms"; + repo = "server"; + tag = "v${finalAttrs.version}"; + hash = "sha256-F8vs62CiOC5e8rCxoFLfQfPGH6f/sfUFyyXCmkO6hsU="; + }; + + postPatch = '' + echo "Compiling sass files" + pushd liberaforms/static + chronic sass sass:css --style=compressed --no-source-map + popd + ''; + + build-system = with python3Packages; [ + setuptools + setuptools-scm + ]; + + dependencies = with python3Packages; [ + aiosmtpd + alembic + atpublic + attrs + babel + beautifulsoup4 + bleach + cairosvg + cachelib + certifi + cffi + charset-normalizer + click + cryptography + deepdiff + dnspython + email-validator + feedgen + flask + flask-assets + flask-babel + flask-login + flask-marshmallow + flask-migrate + flask-session + flask-sqlalchemy + flask-wtf + greenlet + gunicorn + idna + importlib-metadata + importlib-resources + iniconfig + itsdangerous + jinja2 + ldap3 + lxml + mako + markdown + markupsafe + marshmallow + marshmallow-sqlalchemy + minio + packaging + passlib + password-entropy + pillow + platformdirs + pluggy + portpicker + prometheus-client + psutil + psycopg2 + py + pyasn1 + pycodestyle + pycparser + pygments + pyjwt + pyparsing + pypng + pyqrcode + python-dateutil + python-dotenv + python-magic + pytz + requests + six + smtpdfix + snowballstemmer + soupsieve + sqlalchemy + sqlalchemy-json + toml + unicodecsv + unidecode + urllib3 + webencodings + werkzeug + wtforms + zipp + ]; + + nativeBuildInputs = [ + dart-sass + moreutils # chronic + postgresql + libxml2 + libxslt + ]; + + dontConfigure = true; + dontBuild = true; + + installPhase = '' + runHook preInstall + + cp -R . $out + + runHook postInstall + ''; + + doCheck = true; + + nativeCheckInputs = [ + postgresql + postgresqlTestHook + ] + ++ (with python3Packages; [ + faker + pytestCheckHook + pytest-dotenv + factory-boy + polib + ]); + + preCheck = '' + export LANG=C.UTF-8 + export PGUSER=db_user + export postgresqlEnableTCP=1 + ''; + + checkPhase = '' + runHook preCheck + + # Run pytest on the installed version. A running postgres database server is needed. + pushd tests + cp test.ini.example test.ini + pytest -k "not test_save_smtp_config\ + and not test/ext/test_horizontal_shard.py\ + and not TestE2EEDisabledFeatures" + + runHook postCheck + ''; + + # avoid writing in the migration process + postFixup = '' + cp $out/assets/brand/logo-default.png $out/assets/brand/logo.png + cp $out/assets/brand/favicon-default.ico $out/assets/brand/favicon.ico + sed -i "/shutil.copyfile/d" $out/liberaforms/models/site.py + sed -i "/brand_dir/d" $out/migrations/versions/6f0e2b9e9db3_.py + ''; + + meta = { + description = "Ethical form software"; + homepage = "https://liberaforms.org"; + downloadPage = "https://codeberg.org/LiberaForms/server"; + license = lib.licenses.agpl3Plus; + platforms = lib.platforms.all; + }; +}) From 5ee7f60addcf44c5dffc9a21dba59d58e0fcf0e3 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 02:27:17 +0530 Subject: [PATCH 13/37] projects(Liberaforms): fix the nixos test Signed-off-by: phanirithvij --- pkgs/by-name/liberaforms/package.nix | 3 +-- projects/Liberaforms/service.nix | 31 +++++++++++++------------ projects/Liberaforms/test.nix | 34 ++++++++++++++++++++++++++-- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/pkgs/by-name/liberaforms/package.nix b/pkgs/by-name/liberaforms/package.nix index 4e0f3b59d..48ec0d3d1 100644 --- a/pkgs/by-name/liberaforms/package.nix +++ b/pkgs/by-name/liberaforms/package.nix @@ -67,7 +67,6 @@ let rev = "rel_${lib.replaceStrings [ "." ] [ "_" ] version}"; hash = "sha256-RVpreszvd5hn9BLzvnfKT4nibUuybtZwBRloe5NaP/E="; }; - env.NIX_CFLAGS_COMPILE = "-Wno-error=implicit-function-declaration"; disabledTestPaths = [ # typing correctness, not interesting "test/ext/mypy" @@ -139,7 +138,7 @@ python3Packages.buildPythonPackage (finalAttrs: { flask-login flask-marshmallow flask-migrate - flask-session + flask-session2 flask-sqlalchemy flask-wtf greenlet diff --git a/projects/Liberaforms/service.nix b/projects/Liberaforms/service.nix index 654fd5ea0..8bbabab4f 100644 --- a/projects/Liberaforms/service.nix +++ b/projects/Liberaforms/service.nix @@ -6,11 +6,11 @@ }: let inherit (lib) - literalExpression mkEnableOption mkForce mkIf mkOption + mkPackageOption types ; @@ -19,6 +19,7 @@ let group = "liberaforms"; default_home = "/var/lib/liberaforms"; default_logs = "/var/log/liberaforms"; + pythonEnv = cfg.package.pythonModule.withPackages (ps: [ cfg.package ]); in { options.services.liberaforms = { @@ -32,15 +33,7 @@ in enableDatabaseBackup = mkEnableOption "Cron job for pg_dump"; - package = mkOption { - type = types.package; - default = pkgs.liberaforms; - defaultText = literalExpression ".packages..default"; - example = literalExpression "pkgs.liberaforms"; - description = '' - LiberaForms package to use. - ''; - }; + package = mkPackageOption pkgs "liberaforms" { }; domain = mkOption { type = types.str; @@ -195,14 +188,14 @@ in restartIfChanged = true; path = with pkgs; [ postgresql_14 - liberaforms.env + pythonEnv openssl ]; serviceConfig = { Type = "simple"; PrivateTmp = true; - ExecStartPre = pkgs.writeScript "liberaforms-init" '' + ExecStartPre = pkgs.writeScript "liberaforms-init" /* bash */ '' #!/bin/sh #set -x @@ -289,7 +282,7 @@ in # Do not edit this file, it is automatically generated by liberaforms.service. from dotenv import load_dotenv load_dotenv(dotenv_path="/var/lib/liberaforms/.env") - command = '${pkgs.liberaforms.env}/bin/gunicorn' + command = '${pythonEnv}/bin/gunicorn' bind = '${cfg.bind}' workers = ${toString cfg.workers} user = '${user}' @@ -300,15 +293,25 @@ in ############################################ cd ${cfg.workDir} ln -sf ${cfg.package}/* . + # wsgi.py cannot be a symlink because its location determines working dir of gunicorn/flask. rm ./wsgi.py cp ${cfg.package}/wsgi.py ./wsgi.py + + # allow writing to liberaforms, flask-webassets tries to write to liberaforms/static/.webassets-cache + if [[ -L "./liberaforms" ]]; then + rm ./liberaforms + cp -rL ${cfg.package}/liberaforms . + chmod -R u+w ./liberaforms + fi + # After instance creation, ./uploads must remain stateful because it contains uploaded user data. if [[ -L "./uploads" ]]; then rm -r ./uploads cp -rL ${cfg.package}/uploads . chmod -R +w uploads fi + # After instance creation, ./logs should also remain stateful if [[ -L "./logs" ]]; then rm -r ./logs @@ -341,7 +344,7 @@ in psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE liberaforms TO liberaforms" flask db upgrade ''; - ExecStart = "${pkgs.liberaforms.env}/bin/gunicorn -c ${cfg.workDir}/gunicorn.py 'wsgi:create_app()'"; + ExecStart = "${pythonEnv}/bin/gunicorn --preload --log-level debug -c ${cfg.workDir}/gunicorn.py 'wsgi:create_app()'"; ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; User = "${user}"; Group = "${group}"; diff --git a/projects/Liberaforms/test.nix b/projects/Liberaforms/test.nix index 37f3672d1..8300cd4fc 100644 --- a/projects/Liberaforms/test.nix +++ b/projects/Liberaforms/test.nix @@ -26,8 +26,8 @@ with subtest("liberaforms"): server.wait_for_unit("liberaforms.service") - res = server.wait_until_succeeds("curl --fail http://localhost", timeout=10) - assert("Ethical forms with LiberaForms" in res) + res = server.wait_until_succeeds("curl --fail http://localhost", timeout=80) + assert("ethical form software" in res) res = server.succeed("curl http://localhost/site/recover-password -c cookies.txt -b cookies.txt") assert("Recover password" in res) @@ -46,4 +46,34 @@ res = server.succeed("curl http://localhost/user/login") assert("Login to your account" in res) ''; + + # Debug interactively with: + # - nix build -f . projects.Liberaforms.tests.liberaforms.driverInteractive + # - ./result/bin/nixos-test-driver + # - run_tests() + # ssh -o User=root vsock%3 (can also do vsock/3, but % works with scp etc.) + interactive.sshBackdoor.enable = true; + + interactive.nodes.server = + { config, ... }: + let + port = 5000; + in + { + virtualisation.forwardPorts = [ + { + from = "host"; + host.port = port; + guest.port = port; + } + { + from = "host"; + host.port = 3939; + guest.port = 80; + } + ]; + + # forwarded ports need to be accessible + networking.firewall.allowedTCPPorts = [ port ]; + }; } From 7203edb7c18270b17ba978a54e9970c944d46733 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Tue, 24 Mar 2026 16:20:44 +0530 Subject: [PATCH 14/37] projects(Liberaforms): add smoke test Signed-off-by: phanirithvij projects(Liberaforms): test email setup works Signed-off-by: phanirithvij --- projects/Liberaforms/default.nix | 3 +- projects/Liberaforms/service.nix | 91 ++++++++++- .../Liberaforms/{test.nix => tests/basic.nix} | 10 +- .../tests/basic_interaction_test.py | 135 ++++++++++++++++ projects/Liberaforms/tests/smoke-test.nix | 153 ++++++++++++++++++ 5 files changed, 377 insertions(+), 15 deletions(-) rename projects/Liberaforms/{test.nix => tests/basic.nix} (91%) create mode 100644 projects/Liberaforms/tests/basic_interaction_test.py create mode 100644 projects/Liberaforms/tests/smoke-test.nix diff --git a/projects/Liberaforms/default.nix b/projects/Liberaforms/default.nix index 8d399ac05..bb1326af9 100644 --- a/projects/Liberaforms/default.nix +++ b/projects/Liberaforms/default.nix @@ -24,7 +24,8 @@ examples.basic = { module = ./example.nix; description = ""; - tests.liberaforms.module = ./test.nix; + tests.basic.module = ./tests/basic.nix; + tests.smoke-test.module = ./tests/smoke-test.nix; }; }; } diff --git a/projects/Liberaforms/service.nix b/projects/Liberaforms/service.nix index 8bbabab4f..97226893c 100644 --- a/projects/Liberaforms/service.nix +++ b/projects/Liberaforms/service.nix @@ -19,7 +19,6 @@ let group = "liberaforms"; default_home = "/var/lib/liberaforms"; default_logs = "/var/log/liberaforms"; - pythonEnv = cfg.package.pythonModule.withPackages (ps: [ cfg.package ]); in { options.services.liberaforms = { @@ -151,6 +150,16 @@ in default = "production"; }; + pythonEnv = mkOption { + type = types.package; + description = '' + Final pythonEnv which is created from the `package` + ''; + defaultText = "cfg.package.pythonModule.withPackages (_: [ cfg.package ]);"; + default = cfg.package.pythonModule.withPackages (_: [ cfg.package ]); + readOnly = true; + }; + workDir = mkOption { type = types.str; description = '' @@ -167,6 +176,50 @@ in The number of gunicorn worker processes for handling requests. ''; }; + + smtp = { + enable = mkEnableOption "SMTP email configuration"; + + host = mkOption { + type = types.str; + default = "127.0.0.1"; + description = "SMTP provider FQDN or IP address."; + }; + + port = mkOption { + type = types.int; + default = 25; + description = "SMTP port number."; + }; + + user = mkOption { + type = types.str; + default = ""; + description = "SMTP username."; + }; + + passwordFile = mkOption { + type = types.nullOr types.path; + default = null; + description = "Path to a file containing the SMTP password. Recommended over storing secrets in plaintext."; + }; + + encryption = mkOption { + type = types.enum [ + "" + "SSL" + "STARTTLS" + ]; + default = ""; + description = "SMTP encryption method."; + }; + + noreply = mkOption { + type = types.str; + default = "noreply@${cfg.domain}"; + description = "Email address used as the sender for outgoing automated emails."; + }; + }; }; config = mkIf cfg.enable { @@ -188,13 +241,14 @@ in restartIfChanged = true; path = with pkgs; [ postgresql_14 - pythonEnv + cfg.pythonEnv openssl ]; serviceConfig = { Type = "simple"; PrivateTmp = true; + Environment = [ "PYTHONUNBUFFERED=1" ]; ExecStartPre = pkgs.writeScript "liberaforms-init" /* bash */ '' #!/bin/sh #set -x @@ -217,7 +271,7 @@ in SECRET_KEY="$(cat ${cfg.secretKeyFile})" - BASE_URL = 'https://${cfg.domain}' + BASE_URL = 'http://${cfg.domain}' ROOT_USER = '${cfg.rootEmail}' DEFAULT_LANGUAGE = '${cfg.defaultLang}' TMP_DIR = '/tmp' @@ -282,10 +336,15 @@ in # Do not edit this file, it is automatically generated by liberaforms.service. from dotenv import load_dotenv load_dotenv(dotenv_path="/var/lib/liberaforms/.env") - command = '${pythonEnv}/bin/gunicorn' + command = '${cfg.pythonEnv}/bin/gunicorn' bind = '${cfg.bind}' workers = ${toString cfg.workers} user = '${user}' + # logging + accesslog = '-' + errorlog = '-' + capture_output = True + loglevel = 'info' EOF ############################################ @@ -343,8 +402,30 @@ in fi psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE liberaforms TO liberaforms" flask db upgrade + + ${lib.optionalString cfg.smtp.enable '' + SMTP_ARGS=( + -host "${cfg.smtp.host}" + -port "${toString cfg.smtp.port}" + -noreply "${cfg.smtp.noreply}" + ) + + ${lib.optionalString (cfg.smtp.user != "") '' + SMTP_ARGS+=(-user "${cfg.smtp.user}") + ''} + + ${lib.optionalString (cfg.smtp.encryption != "") '' + SMTP_ARGS+=(-encryption "${cfg.smtp.encryption}") + ''} + + ${lib.optionalString (cfg.smtp.passwordFile != null) '' + SMTP_ARGS+=(-password "$(cat ${cfg.smtp.passwordFile})") + ''} + + flask smtp set "''${SMTP_ARGS[@]}" + ''} ''; - ExecStart = "${pythonEnv}/bin/gunicorn --preload --log-level debug -c ${cfg.workDir}/gunicorn.py 'wsgi:create_app()'"; + ExecStart = "${cfg.pythonEnv}/bin/gunicorn --preload --log-level debug -c ${cfg.workDir}/gunicorn.py 'wsgi:create_app()'"; ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; User = "${user}"; Group = "${group}"; diff --git a/projects/Liberaforms/test.nix b/projects/Liberaforms/tests/basic.nix similarity index 91% rename from projects/Liberaforms/test.nix rename to projects/Liberaforms/tests/basic.nix index 8300cd4fc..adbbfdd29 100644 --- a/projects/Liberaforms/test.nix +++ b/projects/Liberaforms/tests/basic.nix @@ -56,16 +56,8 @@ interactive.nodes.server = { config, ... }: - let - port = 5000; - in { virtualisation.forwardPorts = [ - { - from = "host"; - host.port = port; - guest.port = port; - } { from = "host"; host.port = 3939; @@ -74,6 +66,6 @@ ]; # forwarded ports need to be accessible - networking.firewall.allowedTCPPorts = [ port ]; + networking.firewall.allowedTCPPorts = [ 80 ]; }; } diff --git a/projects/Liberaforms/tests/basic_interaction_test.py b/projects/Liberaforms/tests/basic_interaction_test.py new file mode 100644 index 000000000..7238ec219 --- /dev/null +++ b/projects/Liberaforms/tests/basic_interaction_test.py @@ -0,0 +1,135 @@ +import os +import requests +from playwright.sync_api import sync_playwright, expect + +BASE_URL = os.getenv("BASE_URL", "http://localhost") +ADMIN_EMAIL = "admin@example.org" +SUPER_PASSWD = "car-shop-in-the-mall" + + +def run_test(): + is_headful = os.getenv("HEADFUL") == "1" + + with sync_playwright() as p: + browser = p.chromium.launch(headless=not is_headful) + context = browser.new_context( + accept_downloads=True, record_video_dir="/tmp/videos/" + ) + + # Extended timeout for slow nixos test vms + context.set_default_timeout(90 * 1000) + + # 1. Recovery & Registration + print("Starting recovery and registration flow...") + auth_page = context.new_page() + auth_page.goto(f"{BASE_URL}/site/recover-password") + + auth_page.locator("input[name='email']").fill(ADMIN_EMAIL) + auth_page.locator("button[type='submit']").click() + auth_page.wait_for_url("**/user/new/*") + + auth_page.locator("input[name='username']").fill("superuser") + # Grab both password inputs to cover the confirmation field + auth_page.locator("input[type='password']").nth(0).fill(SUPER_PASSWD) + auth_page.locator("input[type='password']").nth(1).fill(SUPER_PASSWD) + auth_page.locator("button[type='submit']").click() + + auth_page.wait_for_url("**/user/superuser*") + + # 2. Create & Configure Form + print("Creating and publishing form...") + admin_page = context.new_page() + admin_page.goto(f"{BASE_URL}/form/new/template/8") + + admin_page.locator("input#name").fill("sample") + admin_page.locator("#commit_name").click() + admin_page.locator("#submit_button").click() + + # Make the form public + admin_page.locator("text=Options").click() + admin_page.locator("#toggle_public_true").click() + + # 3. Fill the Form (New Tab) + print("Filling out the published form...") + form_page = context.new_page() + form_page.goto(f"{BASE_URL}/sample") + + # Wait a bit; the 10s countdown sometimes prevents posting to answers + form_page.wait_for_timeout(3000) + + # Click the first input strictly to ensure focus before tabbing + form_page.locator("input").nth(1).fill("foo") + form_page.locator("input").nth(2).fill("foo@bar.baz") + form_page.locator("textarea").fill("foo") + form_page.locator("button[name='submit']").click() + + expect(form_page.locator("#thankyou-page>.ds-marked-up")).to_have_text( + "Thank you!", timeout=25000 + ) + form_page.close() + + # 4. Export and Verify CSV + print("Exporting answers to CSV...") + admin_page.bring_to_front() + admin_page.locator("a", has_text="Answers").click() + + with admin_page.expect_download() as download_info: + # Matches button containing "CSV" (handles the SVG icon implicitly) + admin_page.locator("button", has_text="CSV").click() + + save_path = "/tmp/answers.csv" + download_info.value.save_as(save_path) + + with open(save_path, "r") as f: + csv_content = f.read() + assert "foo" in csv_content, "Expected 'foo' to be in the exported CSV!" + assert ( + "foo@bar.baz" in csv_content + ), "Expected 'foo@bar.baz' to be in the exported CSV!" + + # 5. Test SMTP Configuration + print("Testing SMTP configuration...") + smtp_page = context.new_page() + smtp_page.goto(f"{BASE_URL}/site/email/config") + + smtp_page.locator("input#email-recipient").fill("example@example.org") + smtp_page.get_by_role("button", name="Send").click() + + try: + smtp_page.locator( + "#flash_container", has_text="SMTP config works!" + ).wait_for(state="visible", timeout=10000) + except Exception as e: + print("FAILED: Did not see 'SMTP config works!' message.") + raise e + + # wait a bit so mailpit has processed the mails + smtp_page.wait_for_timeout(3000) + smtp_page.close() + + # 6. Verify Mailpit Delivery + print("Checking Mailpit API for delivered email...") + + response = requests.get("http://localhost:8025/api/v1/messages") + response.raise_for_status() + mail_data = response.json() + + assert ( + mail_data.get("total", 0) > 0 + ), "No emails found in Mailpit! Delivery failed." + + # Scan for the specific test email address + found_email = any( + to_addr.get("Address") == "example@example.org" + for msg in mail_data.get("messages", []) + for to_addr in msg.get("To", []) + ) + + assert ( + found_email + ), "Test email to example@example.org was not found in Mailpit!" + print("Test suite completed and passed successfully!") + + +if __name__ == "__main__": + run_test() diff --git a/projects/Liberaforms/tests/smoke-test.nix b/projects/Liberaforms/tests/smoke-test.nix new file mode 100644 index 000000000..41025f574 --- /dev/null +++ b/projects/Liberaforms/tests/smoke-test.nix @@ -0,0 +1,153 @@ +{ + lib, + hostPkgs ? pkgs, + pkgs, + sources, + ... +}: +let + python = hostPkgs.python3.withPackages ( + ps: with ps; [ + requests + playwright + ] + ); + + runScript = "${lib.getExe python} ${./basic_interaction_test.py}"; + + run-liberaforms-test = hostPkgs.writeShellScriptBin "run-liberaforms-test" '' + set -euo pipefail + + export PLAYWRIGHT_BROWSERS_PATH=${hostPkgs.playwright-driver.browsers} + export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 + + # check if in a interactive terminal session + if [ -t 1 ]; then + export HEADFUL=''${HEADFUL:-1} + export PWDEBUG=''${PWDEBUG:-0} + export DISPLAY=''${DISPLAY:-:0} + if [ "$(id -u)" = "0" ] && [ -d "/home/alice" ]; then + runuser -u alice \ + -w DISPLAY,HEADFUL,PWDEBUG,PLAYWRIGHT_BROWSERS_PATH,PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD \ + -- ${runScript} + else + export BASE_URL="http://127.0.0.1:3939" + ${runScript} + fi + else + cat <<'EOF' | tee >(systemd-cat -t liberaforms-smoke-test) + ================================================================================ + NOTE: The liberaforms smoke-test can be run interactively either inside the vm or on the host + - First, run `nix-build -A projects.Liberaforms.tests.smoke-test.driverInteractive` and `./result/bin/nixos-test-driver` + - Run `start_all()` inside the repl + - Then in a new terminal run `nix-build -A projects.Liberaforms.tests.smoke-test.driverInteractive.interactive-script` + and `./result/bin/run-liberaforms-test` to run the full test interactively + - Or prepend to the above command `env PWDEBUG=1` to show the playwright inspector to debug + ================================================================================ + EOF + + echo "Starting smoke test..." | systemd-cat -t liberaforms-smoke-test + ${runScript} 2>&1 | tee >(systemd-cat -t liberaforms-smoke-test) + fi + ''; +in +{ + name = "liberaforms"; + + passthru.interactive-script = run-liberaforms-test; + + nodes.machine = + { + lib, + pkgs, + config, + ... + }: + { + imports = [ + sources.modules.ngipkgs + sources.modules.services.liberaforms + sources.examples.Liberaforms.basic + ]; + + services.mailpit.instances.default = { + listen = "0.0.0.0:8025"; + smtp = "0.0.0.0:1025"; + }; + + services.liberaforms = { + rootEmail = "admin@example.org"; + smtp = { + enable = true; + host = "127.0.0.1"; + port = 1025; + noreply = "noreply@localhost"; + }; + }; + + networking = { + firewall.allowedTCPPorts = [ config.services.nginx.defaultHTTPListenPort ]; + hostName = "liberaforms"; + domain = "local"; + }; + + environment.systemPackages = [ + python + run-liberaforms-test + ]; + + virtualisation.memorySize = lib.mkForce 4096; + virtualisation.cores = 4; + }; + + testScript = + { nodes, ... }: + '' + import os + start_all() + + machine.wait_for_unit("liberaforms.service") + machine.wait_for_open_port(80) + machine.wait_for_open_port(5000) + + machine.succeed("curl -q --fail http://localhost") + + machine.succeed("run-liberaforms-test") + + out_dir = os.environ.get("out", os.getcwd()) + machine.copy_from_vm("/tmp/videos", out_dir) + ''; + + interactive.sshBackdoor.enable = true; + interactive.nodes.machine = + { config, ... }: + let + guestPorts = [ + 80 + 1025 + 8025 + ]; + hostPorts = [ + 3939 + 1025 + 8025 + ]; + in + { + imports = [ + (hostPkgs.path + "/nixos/tests/common/x11.nix") + (hostPkgs.path + "/nixos/tests/common/user-account.nix") + ]; + services.xserver.enable = true; + test-support.displayManager.auto.user = "alice"; + + virtualisation.forwardPorts = lib.zipListsWith (h: g: { + from = "host"; + host.port = h; + guest.port = g; + }) hostPorts guestPorts; + + networking.firewall.allowedTCPPorts = guestPorts; + networking.firewall.allowedUDPPorts = guestPorts; + }; +} From 2f86b2a708a30c9adf886091f02d8495dcedd84d Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Wed, 25 Mar 2026 18:07:03 +0530 Subject: [PATCH 15/37] funkwhale: 2.0.0-alpha.2 -> 2.0.0 - vendor typsense 2.0.0 - fix patches Signed-off-by: phanirithvij --- .../typesense/0001-linux-only-metrics.patch | 43 +++++ .../typesense/0002-generated-temp-path.patch | 31 ++++ .../0003-tests-fix-endpoint-path.patch | 170 ++++++++++++++++++ .../typesense/0004-tests-fix-rule_id.patch | 26 +++ .../0005-tests-fix-removed-fields.patch | 163 +++++++++++++++++ .../funkwhale/deps/typesense/default.nix | 91 ++++++++++ .../fix-allauth-internal-function-use.patch | 23 --- pkgs/by-name/funkwhale/fix-oob-schemes.patch | 34 ---- pkgs/by-name/funkwhale/missing-hashes.json | 128 +++++++++++++ pkgs/by-name/funkwhale/package.nix | 56 ++++-- .../funkwhale/replace-unicode-slugify.patch | 24 +-- 11 files changed, 703 insertions(+), 86 deletions(-) create mode 100644 pkgs/by-name/funkwhale/deps/typesense/0001-linux-only-metrics.patch create mode 100644 pkgs/by-name/funkwhale/deps/typesense/0002-generated-temp-path.patch create mode 100644 pkgs/by-name/funkwhale/deps/typesense/0003-tests-fix-endpoint-path.patch create mode 100644 pkgs/by-name/funkwhale/deps/typesense/0004-tests-fix-rule_id.patch create mode 100644 pkgs/by-name/funkwhale/deps/typesense/0005-tests-fix-removed-fields.patch create mode 100644 pkgs/by-name/funkwhale/deps/typesense/default.nix delete mode 100644 pkgs/by-name/funkwhale/fix-allauth-internal-function-use.patch delete mode 100644 pkgs/by-name/funkwhale/fix-oob-schemes.patch create mode 100644 pkgs/by-name/funkwhale/missing-hashes.json diff --git a/pkgs/by-name/funkwhale/deps/typesense/0001-linux-only-metrics.patch b/pkgs/by-name/funkwhale/deps/typesense/0001-linux-only-metrics.patch new file mode 100644 index 000000000..4be1b04c7 --- /dev/null +++ b/pkgs/by-name/funkwhale/deps/typesense/0001-linux-only-metrics.patch @@ -0,0 +1,43 @@ +From b898f9af88a0e07d189de7430c0bc2b477cd98a8 Mon Sep 17 00:00:00 2001 +From: phanirithvij +Date: Wed, 25 Mar 2026 18:30:32 +0530 +Subject: [PATCH 1/5] linux only metrics + +Signed-off-by: phanirithvij +--- + tests/metrics_test.py | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/tests/metrics_test.py b/tests/metrics_test.py +index 12fc300..3c5e5c0 100644 +--- a/tests/metrics_test.py ++++ b/tests/metrics_test.py +@@ -42,18 +42,22 @@ def test_init_async(fake_async_api_call: AsyncApiCall) -> None: + ) + assert metrics.resource_path == "/metrics.json" # noqa: WPS437 + ++import platform ++ + + def test_actual_retrieve(actual_metrics: Metrics) -> None: + """Test that the Metrics object can retrieve metrics on Typesense server and verify response structure.""" + response = actual_metrics.retrieve() + +- assert "system_cpu_active_percentage" in response ++ if platform.system() == "Linux": ++ assert "system_cpu_active_percentage" in response ++ assert "system_network_received_bytes" in response ++ assert "system_network_sent_bytes" in response ++ + assert "system_disk_total_bytes" in response + assert "system_disk_used_bytes" in response + assert "system_memory_total_bytes" in response + assert "system_memory_used_bytes" in response +- assert "system_network_received_bytes" in response +- assert "system_network_sent_bytes" in response + assert "typesense_memory_active_bytes" in response + assert "typesense_memory_allocated_bytes" in response + assert "typesense_memory_fragmentation_ratio" in response +-- +2.53.0 + diff --git a/pkgs/by-name/funkwhale/deps/typesense/0002-generated-temp-path.patch b/pkgs/by-name/funkwhale/deps/typesense/0002-generated-temp-path.patch new file mode 100644 index 000000000..fbea9f423 --- /dev/null +++ b/pkgs/by-name/funkwhale/deps/typesense/0002-generated-temp-path.patch @@ -0,0 +1,31 @@ +From 00466aff0a712ae75df85d818f5a86f5de8bef2d Mon Sep 17 00:00:00 2001 +From: phanirithvij +Date: Wed, 25 Mar 2026 19:05:02 +0530 +Subject: [PATCH 2/5] generated temp path + +Signed-off-by: phanirithvij +--- + tests/operations_test.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/operations_test.py b/tests/operations_test.py +index b48b946..71c134e 100644 +--- a/tests/operations_test.py ++++ b/tests/operations_test.py +@@ -69,11 +69,11 @@ def test_cache_clear(actual_operations: Operations) -> None: + assert response["success"] + + +-def test_snapshot(actual_operations: Operations) -> None: ++def test_snapshot(actual_operations: Operations, tmp_path) -> None: + """Test that the Operations object can perform the snapshot operation.""" + response = actual_operations.perform( + "snapshot", +- {"snapshot_path": "/tmp"}, # noqa: S108 ++ {"snapshot_path": str(tmp_path)}, # noqa: S108 + ) + + assert response["success"] +-- +2.53.0 + diff --git a/pkgs/by-name/funkwhale/deps/typesense/0003-tests-fix-endpoint-path.patch b/pkgs/by-name/funkwhale/deps/typesense/0003-tests-fix-endpoint-path.patch new file mode 100644 index 000000000..04ca03dff --- /dev/null +++ b/pkgs/by-name/funkwhale/deps/typesense/0003-tests-fix-endpoint-path.patch @@ -0,0 +1,170 @@ +From 4bd4350d6978fe7846b3af827c2a02de416b052f Mon Sep 17 00:00:00 2001 +From: phanirithvij +Date: Wed, 25 Mar 2026 19:02:46 +0530 +Subject: [PATCH 3/5] tests fix endpoint path + +Signed-off-by: phanirithvij +--- + tests/override_test.py | 17 ++++++++++++----- + tests/overrides_test.py | 8 ++++---- + tests/synonym_test.py | 4 ++-- + tests/synonyms_test.py | 8 ++++---- + 4 files changed, 22 insertions(+), 15 deletions(-) + +diff --git a/tests/override_test.py b/tests/override_test.py +index 89526c7..5135d3e 100644 +--- a/tests/override_test.py ++++ b/tests/override_test.py +@@ -1,6 +1,5 @@ + """Tests for the Override class.""" + +- + import pytest + + from tests.utils.object_assertions import ( +@@ -47,7 +46,7 @@ def test_init(fake_api_call: ApiCall) -> None: + fake_api_call.config.nearest_node, + ) + assert ( +- override._endpoint_path() # noqa: WPS437 ++ override._endpoint_path # noqa: WPS437 + == "/collections/companies/overrides/company_override" + ) + +@@ -104,7 +103,7 @@ def test_init_async(fake_async_api_call: AsyncApiCall) -> None: + fake_async_api_call.config.nearest_node, + ) + assert ( +- override._endpoint_path() # noqa: WPS437 ++ override._endpoint_path # noqa: WPS437 + == "/collections/companies/overrides/company_override" + ) + +@@ -115,7 +114,11 @@ async def test_actual_retrieve_async( + create_override: None, + ) -> None: + """Test that the AsyncOverride object can retrieve an override from Typesense Server.""" +- response = await actual_async_collections["companies"].overrides["company_override"].retrieve() ++ response = ( ++ await actual_async_collections["companies"] ++ .overrides["company_override"] ++ .retrieve() ++ ) + + assert response["rule"] == { + "match": "exact", +@@ -140,6 +143,10 @@ async def test_actual_delete_async( + create_override: None, + ) -> None: + """Test that the AsyncOverride object can delete an override from Typesense Server.""" +- response = await actual_async_collections["companies"].overrides["company_override"].delete() ++ response = ( ++ await actual_async_collections["companies"] ++ .overrides["company_override"] ++ .delete() ++ ) + + assert response == {"id": "company_override"} +diff --git a/tests/overrides_test.py b/tests/overrides_test.py +index a9376b5..c7ecee1 100644 +--- a/tests/overrides_test.py ++++ b/tests/overrides_test.py +@@ -1,6 +1,5 @@ + """Tests for the Overrides class.""" + +- + import pytest + + from tests.utils.object_assertions import ( +@@ -61,7 +60,7 @@ def test_get_missing_override(fake_overrides: Overrides) -> None: + ) + assert override.collection_name == "companies" + assert ( +- override._endpoint_path() # noqa: WPS437 ++ override._endpoint_path # noqa: WPS437 + == "/collections/companies/overrides/company_override" + ) + +@@ -178,7 +177,8 @@ def test_get_missing_override_async(fake_async_overrides) -> None: + assert override.override_id == "company_override" + assert_match_object(override.api_call, fake_async_overrides.api_call) + assert_object_lists_match( +- override.api_call.node_manager.nodes, fake_async_overrides.api_call.node_manager.nodes ++ override.api_call.node_manager.nodes, ++ fake_async_overrides.api_call.node_manager.nodes, + ) + assert_match_object( + override.api_call.config.nearest_node, +@@ -186,7 +186,7 @@ def test_get_missing_override_async(fake_async_overrides) -> None: + ) + assert override.collection_name == "companies" + assert ( +- override._endpoint_path() # noqa: WPS437 ++ override._endpoint_path # noqa: WPS437 + == "/collections/companies/overrides/company_override" + ) + +diff --git a/tests/synonym_test.py b/tests/synonym_test.py +index cfe6e51..d9affd9 100644 +--- a/tests/synonym_test.py ++++ b/tests/synonym_test.py +@@ -45,7 +45,7 @@ def test_init(fake_api_call: ApiCall) -> None: + fake_api_call.config.nearest_node, + ) + assert ( +- synonym._endpoint_path() # noqa: WPS437 ++ synonym._endpoint_path # noqa: WPS437 + == "/collections/companies/synonyms/company_synonym" + ) + +@@ -99,7 +99,7 @@ def test_init_async(fake_async_api_call: AsyncApiCall) -> None: + fake_async_api_call.config.nearest_node, + ) + assert ( +- synonym._endpoint_path() # noqa: WPS437 ++ synonym._endpoint_path # noqa: WPS437 + == "/collections/companies/synonyms/company_synonym" + ) + +diff --git a/tests/synonyms_test.py b/tests/synonyms_test.py +index 3402493..4fbc283 100644 +--- a/tests/synonyms_test.py ++++ b/tests/synonyms_test.py +@@ -1,6 +1,5 @@ + """Tests for the Synonyms class.""" + +- + import pytest + + from tests.utils.object_assertions import ( +@@ -62,7 +61,7 @@ def test_get_missing_synonym(fake_synonyms: Synonyms) -> None: + ) + assert synonym.collection_name == "companies" + assert ( +- synonym._endpoint_path() # noqa: WPS437 ++ synonym._endpoint_path # noqa: WPS437 + == "/collections/companies/synonyms/company_synonym" + ) + +@@ -166,7 +165,8 @@ def test_get_missing_synonym_async(fake_async_synonyms) -> None: + assert synonym.synonym_id == "company_synonym" + assert_match_object(synonym.api_call, fake_async_synonyms.api_call) + assert_object_lists_match( +- synonym.api_call.node_manager.nodes, fake_async_synonyms.api_call.node_manager.nodes ++ synonym.api_call.node_manager.nodes, ++ fake_async_synonyms.api_call.node_manager.nodes, + ) + assert_match_object( + synonym.api_call.config.nearest_node, +@@ -174,7 +174,7 @@ def test_get_missing_synonym_async(fake_async_synonyms) -> None: + ) + assert synonym.collection_name == "companies" + assert ( +- synonym._endpoint_path() # noqa: WPS437 ++ synonym._endpoint_path # noqa: WPS437 + == "/collections/companies/synonyms/company_synonym" + ) + +-- +2.53.0 + diff --git a/pkgs/by-name/funkwhale/deps/typesense/0004-tests-fix-rule_id.patch b/pkgs/by-name/funkwhale/deps/typesense/0004-tests-fix-rule_id.patch new file mode 100644 index 000000000..c22f711d0 --- /dev/null +++ b/pkgs/by-name/funkwhale/deps/typesense/0004-tests-fix-rule_id.patch @@ -0,0 +1,26 @@ +From 3ef2f752e7201af2a4f606276f7ec162ddf900c7 Mon Sep 17 00:00:00 2001 +From: phanirithvij +Date: Wed, 25 Mar 2026 19:35:38 +0530 +Subject: [PATCH 4/5] tests fix rule_id + +Signed-off-by: phanirithvij +--- + tests/analytics_rules_v1_test.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/analytics_rules_v1_test.py b/tests/analytics_rules_v1_test.py +index d222d99..d1021d8 100644 +--- a/tests/analytics_rules_v1_test.py ++++ b/tests/analytics_rules_v1_test.py +@@ -45,7 +45,7 @@ def test_get_missing_analytics_rule(fake_analytics_rules: AnalyticsRulesV1) -> N + """Test that the AnalyticsRulesV1 object can get a missing analytics_rule.""" + analytics_rule = fake_analytics_rules["company_analytics_rule"] + +- assert analytics_rule.rule_id == "company_analytics_rule" ++ assert analytics_rule.rule_name == "company_analytics_rule" + assert_match_object(analytics_rule.api_call, fake_analytics_rules.api_call) + assert_object_lists_match( + analytics_rule.api_call.node_manager.nodes, +-- +2.53.0 + diff --git a/pkgs/by-name/funkwhale/deps/typesense/0005-tests-fix-removed-fields.patch b/pkgs/by-name/funkwhale/deps/typesense/0005-tests-fix-removed-fields.patch new file mode 100644 index 000000000..13285a280 --- /dev/null +++ b/pkgs/by-name/funkwhale/deps/typesense/0005-tests-fix-removed-fields.patch @@ -0,0 +1,163 @@ +From 78bef516f93ca3b0bf016e5a7bfb9aba539f99db Mon Sep 17 00:00:00 2001 +From: phanirithvij +Date: Wed, 25 Mar 2026 19:48:57 +0530 +Subject: [PATCH 5/5] tests fix removed fields + +Signed-off-by: phanirithvij +--- + tests/collection_test.py | 6 +----- + tests/collections_test.py | 17 ----------------- + 2 files changed, 1 insertion(+), 22 deletions(-) + +diff --git a/tests/collection_test.py b/tests/collection_test.py +index 7eb29fa..ddf4acb 100644 +--- a/tests/collection_test.py ++++ b/tests/collection_test.py +@@ -52,7 +52,6 @@ def test_actual_retrieve( + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + { +@@ -66,7 +65,6 @@ def test_actual_retrieve( + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + ], +@@ -74,8 +72,6 @@ def test_actual_retrieve( + "num_documents": 0, + "symbols_to_index": [], + "token_separators": [], +- "synonym_sets": [], +- "curation_sets": [], + } + + response.pop("created_at") +@@ -95,7 +91,7 @@ def test_actual_update( + + expected: CollectionSchema = { + "fields": [ +- {"name": "num_locations", "truncate_len": 100, "type": "int32"}, ++ {"name": "num_locations", "type": "int32"}, + ], + } + +diff --git a/tests/collections_test.py b/tests/collections_test.py +index 788e3dc..bcee5ba 100644 +--- a/tests/collections_test.py ++++ b/tests/collections_test.py +@@ -1,6 +1,5 @@ + """Tests for the Collections class.""" + +- + import sys + + from typesense.async_.api_call import AsyncApiCall +@@ -113,7 +112,6 @@ def test_actual_create(actual_collections: Collections, delete_all: None) -> Non + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + { +@@ -127,7 +125,6 @@ def test_actual_create(actual_collections: Collections, delete_all: None) -> Non + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + ], +@@ -135,8 +132,6 @@ def test_actual_create(actual_collections: Collections, delete_all: None) -> Non + "num_documents": 0, + "symbols_to_index": [], + "token_separators": [], +- "synonym_sets": [], +- "curation_sets": [], + } + + response = actual_collections.create( +@@ -185,7 +180,6 @@ def test_actual_retrieve( + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + { +@@ -199,7 +193,6 @@ def test_actual_retrieve( + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + ], +@@ -207,8 +200,6 @@ def test_actual_retrieve( + "num_documents": 0, + "symbols_to_index": [], + "token_separators": [], +- "synonym_sets": [], +- "curation_sets": [], + }, + ] + +@@ -250,7 +241,6 @@ async def test_actual_create_async( + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + { +@@ -264,7 +254,6 @@ async def test_actual_create_async( + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + ], +@@ -272,8 +261,6 @@ async def test_actual_create_async( + "num_documents": 0, + "symbols_to_index": [], + "token_separators": [], +- "synonym_sets": [], +- "curation_sets": [], + } + + response = await actual_async_collections.create( +@@ -322,7 +309,6 @@ async def test_actual_retrieve_async( + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + { +@@ -336,7 +322,6 @@ async def test_actual_retrieve_async( + "infix": False, + "stem": False, + "stem_dictionary": "", +- "truncate_len": 100, + "store": True, + }, + ], +@@ -344,8 +329,6 @@ async def test_actual_retrieve_async( + "num_documents": 0, + "symbols_to_index": [], + "token_separators": [], +- "synonym_sets": [], +- "curation_sets": [], + }, + ] + +-- +2.53.0 + diff --git a/pkgs/by-name/funkwhale/deps/typesense/default.nix b/pkgs/by-name/funkwhale/deps/typesense/default.nix new file mode 100644 index 000000000..2f82f973d --- /dev/null +++ b/pkgs/by-name/funkwhale/deps/typesense/default.nix @@ -0,0 +1,91 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, + requests, + pytestCheckHook, + typesense, + curl, + faker, + httpx, + isort, + pytest-asyncio, + pytest-httpx, + pytest-mock, + python-dotenv, + requests-mock, + respx, +}: + +buildPythonPackage (finalAttrs: { + pname = "typesense"; + version = "2.0.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "typesense"; + repo = "typesense-python"; + tag = "v${finalAttrs.version}"; + hash = "sha256-GzapEl26FS6yMGeLC54y9ysl0mt9l6ceYHr84E6BqBo="; + }; + + patches = [ + # See . + ./0001-linux-only-metrics.patch + ./0002-generated-temp-path.patch + ./0003-tests-fix-endpoint-path.patch + ./0004-tests-fix-rule_id.patch + ./0005-tests-fix-removed-fields.patch + ]; + + build-system = [ setuptools ]; + + dependencies = [ requests ]; + + nativeCheckInputs = [ + pytestCheckHook + typesense + curl + faker + httpx + isort + pytest-asyncio + pytest-httpx + pytest-mock + python-dotenv + requests-mock + respx + ]; + disabledTestMarks = [ "open_ai" ]; + disabledTests = [ "import_typing_extensions" ]; + + __darwinAllowLocalNetworking = true; + + pytestFlags = [ "-vv" ]; + + preCheck = '' + TYPESENSE_API_KEY="xyz" \ + TYPESENSE_DATA_DIR="$(mktemp -d)" \ + typesense-server & + + typesense_pid=$! + + # Wait for typesense to finish starting. + timeout 20 bash -c ' + while ! curl -s --fail localhost:8108/health; do sleep 1; done + ' || false + ''; + postCheck = '' + kill $typesense_pid + ''; + + pythonImportsCheck = [ "typesense" ]; + + meta = { + description = "Python client for Typesense, an open source and typo tolerant search engine"; + homepage = "https://github.com/typesense/typesense-python"; + license = lib.licenses.asl20; + teams = [ lib.teams.ngi ]; + }; +}) diff --git a/pkgs/by-name/funkwhale/fix-allauth-internal-function-use.patch b/pkgs/by-name/funkwhale/fix-allauth-internal-function-use.patch deleted file mode 100644 index a2847d183..000000000 --- a/pkgs/by-name/funkwhale/fix-allauth-internal-function-use.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/funkwhale_api/users/views.py b/funkwhale_api/users/views.py -index 329f9e8d3..51ac0a5fc 100644 ---- a/funkwhale_api/users/views.py -+++ b/funkwhale_api/users/views.py -@@ -1,7 +1,7 @@ - import json - - from allauth.account.adapter import get_adapter --from allauth.account.utils import send_email_confirmation -+from allauth.account.models import EmailAddress - from dj_rest_auth import views as rest_auth_views - from dj_rest_auth.registration import views as registration_views - from django import http -@@ -39,7 +39,8 @@ class RegisterView(registration_views.RegisterView): - user = super().perform_create(serializer) - if not user.is_active: - # manual approval, we need to send the confirmation e-mail by hand -- send_email_confirmation(self.request, user) -+ email = EmailAddress.objects.get(user=user) -+ email.send_confirmation(request=self.request) - if user.invitation: - user.invitation.set_invited_user(user) - diff --git a/pkgs/by-name/funkwhale/fix-oob-schemes.patch b/pkgs/by-name/funkwhale/fix-oob-schemes.patch deleted file mode 100644 index f623e7ff6..000000000 --- a/pkgs/by-name/funkwhale/fix-oob-schemes.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git a/funkwhale_api/users/models.py b/funkwhale_api/users/models.py -index bb9348f8b..59734501f 100644 ---- a/funkwhale_api/users/models.py -+++ b/funkwhale_api/users/models.py -@@ -7,6 +7,7 @@ import uuid - from django.conf import settings - from django.contrib.auth.models import AbstractUser - from django.contrib.auth.models import UserManager as BaseUserManager -+from django.core.exceptions import ValidationError - from django.db import models, transaction - from django.db.models import JSONField - from django.dispatch import receiver -@@ -387,9 +388,20 @@ OOB_SCHEMES = ["urn:ietf:wg:oauth:2.0:oob", "urn:ietf:wg:oauth:2.0:oob:auto"] - - class CustomRedirectURIValidator(oauth2_validators.AllowedURIValidator): - def __call__(self, value): -+ if not value.startswith("urn:ietf:wg:oauth:2.0"): -+ return super().__call__(value) -+ - if value in OOB_SCHEMES: - return value -- return super().__call__(value) -+ -+ try: -+ oauth2_validators.URIValidator.__call__(self, value) -+ except ValidationError as e: -+ raise ValidationError( -+ "%(name)s URI validation error. %(cause)s: %(value)s", -+ params={"name": self.name, "value": value, "cause": e}, -+ ) -+ - - - oauth2_models.AllowedURIValidator = CustomRedirectURIValidator diff --git a/pkgs/by-name/funkwhale/missing-hashes.json b/pkgs/by-name/funkwhale/missing-hashes.json new file mode 100644 index 000000000..6f398b623 --- /dev/null +++ b/pkgs/by-name/funkwhale/missing-hashes.json @@ -0,0 +1,128 @@ +{ + "@esbuild/aix-ppc64@npm:0.25.11": "46c2697b0e5bf6a1d1d57e80358ee04fcb0d59a1c6648759ec94e12a83af50d35ecf2469cf7c5643f85a9b2c5b2f91173bc6485ebec9bb9add4a6b30b5dab95c", + "@esbuild/android-arm64@npm:0.25.11": "cc45d931e813767a15ad6e7fd6071c97865a2e9aaa0d3a78374da452d303dbea71a4f13c63426b01f71ce3c10dd208f9382e6387505111adaf631e39749aa404", + "@esbuild/android-arm@npm:0.25.11": "b8ee90079d3d6c02b732529b04d2e6c017d12b2c401f2f8d6e60ec5fb1060d819edde5429acfbc7471b2224b4457de8cb99b97bea4164e94a3da2cbf121e60a4", + "@esbuild/android-x64@npm:0.25.11": "c03182ed17c50ab29973b19814cbdee85ff67ba00e13f001fafabcf7538d061fd737a783fc4131f96e22b2e7bed26936e5e730b717bb88ffb0b8c429fadd6536", + "@esbuild/darwin-arm64@npm:0.25.11": "67114421780e01c947d3a646d9737d5965e2bf39ea75a2440d614971b7b2565a8cc91c39780f5b86adc25cdc466bbf1ade79a05cef71827e3f3a2be00435d868", + "@esbuild/darwin-x64@npm:0.25.11": "da5612584d5fc2e714efc0876826fa45a48fa3b881be4a728516f2394c6aeb72f6ca8ce08272106c24ea6a9b040513afd847b4ea9bfcc5a6637e427a1634acd7", + "@esbuild/freebsd-arm64@npm:0.25.11": "8ad357e0b7605a320d428b10ab704a2f34383786bb43e663ebb62ded22297343c72149ab126257629308195cd18b4828f9b90579b224c26d2ca56f416dcb3e48", + "@esbuild/freebsd-x64@npm:0.25.11": "a42ea4c6801eb2ff09b0f1e67a04b2d4a00da9dc08233a8dc227b25468efa954ea13478bd2f2dad46bf78e8d1ec3cf11b1edbc1b50af7e61da05e715f0ea0fc7", + "@esbuild/linux-arm64@npm:0.25.11": "c8f87df1d15ff5c835d782e26213bb28653eed9388351e42c073431ffa8e3606fa8e0670ccb0df325f56a9695782b34c98af2fe30756953a883f9da63d1eb42a", + "@esbuild/linux-arm@npm:0.25.11": "122d069ed8332d3eb6e3f0d99c7f25d8920d6aff3655013d6bc2f3666fcba85ae074402b54f3a2ca9a3a3a9cd54350fac1f56252d84d466daefca7a8dc82975b", + "@esbuild/linux-ia32@npm:0.25.11": "dbd90c3efbbb33b920abb3f3def4a61fcff258b8a60289c61c0ba6d5210fae8fd569af991ff9aaebe03b3c24a0c67a5fd74d8e32e8fd7c5a0dbf1898aeeb2bf3", + "@esbuild/linux-loong64@npm:0.25.11": "c58d14d84cf4f024f5cc585efd759b161ec4122767d94500578cf32f9649542ab7e7b5e2b88389d774d4544d50a39ba1e0d791793170643645ec6a2eb8836ffe", + "@esbuild/linux-mips64el@npm:0.25.11": "5a3f4ccefe0d8ed30806a6984b7b6cee17e2f2a14d3f6d64c37f05f78f6dddd04821fd5ff4d61044ce23c0206a8fd4f1535a90d534e26cb5e90c8c04d1203a0a", + "@esbuild/linux-ppc64@npm:0.25.11": "e35d0a4e54f7d48aa931abe6211b7fc374291b26cd59849fff938499114b5b34e3da15b71e67b76f83c1d712d6f78a50255d8b96bacaad8df233771126544ebe", + "@esbuild/linux-riscv64@npm:0.25.11": "4e932cf5950d97aec76aa5c52d7d15e7135f2b865414c97cd4410adc3f8b26e1588cda7a09222b92f54fff8c888180219e822b9a633c833098bb876b1e66ac02", + "@esbuild/linux-s390x@npm:0.25.11": "af2b8a5c0a6147985b1d194a7c1323b4693b72ad5884de1292f045882b41436cf4e64828c18cdbf7b85763060404279cc070fbf74c00f9f82d8f35469b8c0073", + "@esbuild/linux-x64@npm:0.25.11": "1e1fe2d9c8ae8ed76f3090ff2e4d3d084d581cc9298e349daf8addd398ae9b466a1817d9640202956d72479a82e602979ca364035d10e8cb6e2c2baf6e850081", + "@esbuild/netbsd-arm64@npm:0.25.11": "03e86862f25a9d3ed05383031ab3430ba73b80e5a1617cf0b9f91ce2a4d5700125398722a4a6145299d6f3626caca556d30604bd24f88af1a289794822322814", + "@esbuild/netbsd-x64@npm:0.25.11": "af848a8e720c5ba4fb63a748c657e366770e4f00a249dd4a0eb996bdafa0fcad7f04c88df3ed29cb1b488f76c4f7c3355e192ff71392c81d641dd52bc453355c", + "@esbuild/openbsd-arm64@npm:0.25.11": "40d46a15da7643aa57ba7a61aa8174cc7ead37f67b3438eaeb407f6527712b848327a025484a57ce936debced507a2d405614e790491aa181f8178c09b8f2ad2", + "@esbuild/openbsd-x64@npm:0.25.11": "8ee73b8cfe0b5d24433400bddcb20c3ceb2cab3d11112ba01c5ee799e3629d24267f6dcfcb2f3aef89726ddc5d10592e35ec46b9725cc9e297af3d8d35a3122b", + "@esbuild/openharmony-arm64@npm:0.25.11": "bf2fa9985a1aaba0a4376657e72e73c7d5368d0a1972e12788ec276384e6a20637904c5d07b52a9f10306735898730dbebd55a6234cc0cd30962ee130c7b9a8b", + "@esbuild/sunos-x64@npm:0.25.11": "7ac357650fadc4ad44a0615a184920734ab5f4432ddd913bef2cf4e4ef7855f7ffd1995cfabb323c10cb9b876f252cf3f7938b4450cfa9ce3b1488e47d91b6cf", + "@esbuild/win32-arm64@npm:0.25.11": "01a7db317fecb784cd273ddfb0f3eb35871709904cc879adfbeca139cb33fbe8db6d33ee53ae4eb3b4185ef9fb6d6f140d9ac0fcbbe61518cf546487d7430dcb", + "@esbuild/win32-ia32@npm:0.25.11": "cdb90fcd780022685374b762b2f6fdd19501ff43c4b4b63b9b875cdb56d4c79b4747f36f4893ce57d3f0c520aaf30b0f31309e606bae14738300b22bbb30b1df", + "@esbuild/win32-x64@npm:0.25.11": "a7b6080abc4d575c0572e880cefcb24faf89f7e48057652d6ab11e2e5b3fbd4555d27246ee281d5a1ac1f744a29ff90573e7075310e171ade9e2838665caefce", + "@oxc-resolver/binding-darwin-arm64@npm:4.2.0": "fc9857144a9bf00fb3cac55c9bad278e833be224edf714525928c69447ec4f55d1648d0cc5b000aa695910a2f6f4520dccdc21f79ca878bcb555b7ab515a57d4", + "@oxc-resolver/binding-darwin-x64@npm:4.2.0": "944b3f8951d8e08ebc889daf1e0fa44755f6543964f83f439897b1b9ed1948afda1c2e26184cf8118c71cf384a6a6b0e621d709bd6ca36497816746127282dcb", + "@oxc-resolver/binding-freebsd-x64@npm:4.2.0": "525cbf569ea8df05b184154184fd036036a7255e0ef54292882563a76ce4f1fc1fa43c996f2152197be808fd384bd8b4f31e76f874dcabf4425981fe7add2be8", + "@oxc-resolver/binding-linux-arm-gnueabihf@npm:4.2.0": "3b0a9b7b7b0915cced4afba75365d56bfdb3af8cbf7c4a1eb088ec7f03b3d4c3fae870feed3a267b51980ccaef56afb2c2d478382a0545537da0efa63d3fe328", + "@oxc-resolver/binding-linux-arm64-gnu@npm:4.2.0": "9e45430eb0d46aa3c6a9adb52b75d399f778d01b473508f33e492479abc504bf72f1344404d4bbfb29997bec5bbcdb781a5193d718ca7d4b12a5fee27ab0b9fe", + "@oxc-resolver/binding-linux-arm64-musl@npm:4.2.0": "b15d1c736ace3cc125e5f9ac299fdcbb8f9ea26907fa2ce1e7d5cdbdd9831c8b4dcdfe2317e6d274b09a50537ede41b7a4d92f5eb210c979a0b705f00bf9163f", + "@oxc-resolver/binding-linux-x64-gnu@npm:4.2.0": "0ac0a302db0970e4f7672df22a4ce037ec68f45abce5bcac274258a27cd01f477094fb29a6882df9462ac4b769832a3c55c78239538c78e0e38d2ad2a79282ac", + "@oxc-resolver/binding-linux-x64-musl@npm:4.2.0": "d183d4c96a0fe86e1860ad4354a8c6c76da0f2210a07bfc89d46565e9ce28dcdb765f818fe524da35aa9ba126891c3632194d76adf5a2cdf8a8acd5dc2d8f1d1", + "@oxc-resolver/binding-wasm32-wasi@npm:4.2.0": "83320ee5da700c985171a3bd394439631b383162e97d03e8ae04601692b6ed07a92e5557c846e9982a593b1fccd1a70bad0256e84a2c2584460b0ea6ce361b72", + "@oxc-resolver/binding-win32-arm64-msvc@npm:4.2.0": "474aeee4f2e0afc206e1e61e006874708878af38f88ee1bb4cdf3f81ce06f52c06c38bb5e5dc09a10dccdc6c3f4e9807453a14e37b780b9722bc14ef65975e1e", + "@oxc-resolver/binding-win32-x64-msvc@npm:4.2.0": "3b6901b32fb43a6e02ce1afc5dc4c3855fb63a1161bbda3c40ad33621b511d23e359587921d2d0851d7269e98de5f0052cb3b12634c240e2ebc80aff12106368", + "@parcel/watcher-android-arm64@npm:2.5.1": "f99d569e4f6cf78a1b0097fb9d4682cb201a74370ae440c531da4e1d5021e46141bfcdf8ef708b51a5b9cb1c30f78eea933ce75216d5eeb7b969a2ad27c68e4a", + "@parcel/watcher-darwin-arm64@npm:2.5.1": "973c7ef3c94608da9cd1b20b18b9a7de2fb46fe44553731fe372b640de524491976150d0845f3d5953b74ed8ea469cb8d18a48651d0e5fb82f549a6b46b54f79", + "@parcel/watcher-darwin-x64@npm:2.5.1": "848c5516aed9c36e14751200dbbf57e83c0bd46cdab0932df33db120e66b9596de18eeb98980e319efde84014f67d9e7924d7555383d8ffcefe35c501166b84b", + "@parcel/watcher-freebsd-x64@npm:2.5.1": "cbd2b7884bc92422edabc0c74c3fbc06512bb7300fc137aaff2e96f46f61e5272265a0b5d230acc82a0e777b0c11661f0b8b7f89a9342c0920b752436dd2c750", + "@parcel/watcher-linux-arm-glibc@npm:2.5.1": "f2e1ec14dbb0f85a84a75f55fd7721598694976ba3ad439832b57e558b0d9240cc80ff83053fb8cf7caffb0592d51bb39d325112763ec1734924b49d4ba9c144", + "@parcel/watcher-linux-arm-musl@npm:2.5.1": "83344c7ecda2e79db59d711bcee0c3fa26922989139c031bd762cf3d5bfb191797e22e9ed6072690b822dfd62629623ba4e7eedb3c41930a987fc3d4106000e1", + "@parcel/watcher-linux-arm64-glibc@npm:2.5.1": "562231feb159a294752378bebecc69a2d33366a9d877835844578799f8536398006e0e570849f9e2db04085a3ea82131459cd10fd6b42dea10cd73bd0c9ca13e", + "@parcel/watcher-linux-arm64-musl@npm:2.5.1": "f62db52a90ebbaa29ca9900e6b9bd3fc6e5c650741bbde9a2742cbc332c678b753fc6a596d67659394fd9262aa826463ea667d18cc554bcaaac9e8da1a2a29d0", + "@parcel/watcher-linux-x64-glibc@npm:2.5.1": "425e557991fde5092d6a9e20be71810600415e5fa157dca0b39bd8db86653d3ee7b037305261c8782d1a065f2a64d235e17b57876b26f5bb0dd7a9bdbe364690", + "@parcel/watcher-linux-x64-musl@npm:2.5.1": "4dbb066ba9478c8b8de39e3c1083cbb74f86f03eaf4445603e69909d6c072134644316faa20a2445419b9fe1a8063ade7b5331a5766d807ee0b15b8a70c59a2d", + "@parcel/watcher-win32-arm64@npm:2.5.1": "e015314d6b9b727cbe25eedf963ca8b23bf6d4e78d3c28008bd0d2657940ad54a271330486df3a93a5f1a30f2b8d052d14415b85cc7e7b747c6c73b5dc055628", + "@parcel/watcher-win32-ia32@npm:2.5.1": "920b6ad6a2095aeb9c2d329c5118472a3c14669fa93eaa99aa8050c76c5c2d3d76d92677167ed748c2ac5487c568d5df16d5d94f4bc7c354094fccd8e0d6350c", + "@parcel/watcher-win32-x64@npm:2.5.1": "8f1c8e41ec9f86e4dcd0d4db0a077742d5dcc853f15ea888387183e34e2efcff09fd1cc9ec46fc1121b9ad4ddc0e221283f2ffb23cfd7dbcbb8b03060b461963", + "@rolldown/binding-android-arm64@npm:1.0.0-beta.43": "568548358ad3e55e7a5de1a0fbd07164288a362097d41a0dd08d662ffb9243120516d1972dcfabd510f7436a270afa5163cc0e2feb0877e2c45f7b934a5b0972", + "@rolldown/binding-darwin-arm64@npm:1.0.0-beta.43": "b0dd869770a55597fdfcf8b06bae41d5d1be41e2c6d8df8c6d48bf57c54084af0713398f31dbef711c6489c1ecf40777b2a301d0320af9ad7fea05e61299d4c8", + "@rolldown/binding-darwin-x64@npm:1.0.0-beta.43": "ef0ec9868c8c03c526fa4a593a312bea31f5ecb899912fb10a025aba4ffe3b5416912f9286bb2d7ae96683e73779fce4f5e4eb5ccc6869759c97f05cfcb37775", + "@rolldown/binding-freebsd-x64@npm:1.0.0-beta.43": "8b7bf0ef55e7f6c9c0177c3e300c48f76a13b9f9bada74a8d6e1d57f2659d401d6b226a9c8dd5cf6aaca9b5a32e680cc1e738040a4c12dc324ae46722b1ca1d4", + "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.43": "4c6fb444cc9723b3210154cdb31cbe122859ef032c301699ae62cbdb7c426aa236effd931056f09ac439d560751526fac976decbc5adc8258c9ff9ed7db517ff", + "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.43": "58cadbcb7a26f9d4af68025d49156bc28058742d6fe0264ffc61eb7f9ae3d07bbad225f78f59924e396c8172a223bdf6db2b112fd50ab20946f4bc9070eda37b", + "@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.43": "2ff14364914fa7996797a755d14dc61ee944f66bf54e59ee0d88cd68e71671f94d0ae1e0e0308d3dd38390e8b00f989a53dcfc42a074ba97721670c897813e17", + "@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.43": "f8d8010fd7427120b42b32bce1b8d4f2d63fe0a38c28ec24abbe1c11d7400c80f116569e18c3d186bab10d2c3a90df591742e050d93a0551aaec566da99ff14b", + "@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.43": "3cfb9c0f5dd6c1d2f8c60e46cf48a67eed1299dce4fb7e13547f89adb7266557014c0376aeb282e0969f6109733925345cda4ef8d27eda161da5d7365390710a", + "@rolldown/binding-openharmony-arm64@npm:1.0.0-beta.43": "4c8a36968600f6962fe149b3c4faba4466eb499ebfb7941dace01ce80616745660af084ec4aa997c7dbf1ead1558eeca355e1e33f0aaa4b96e588b26c3816ac0", + "@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.43": "25d79c08fcd18b7269a6dd1073a2bb358fbd816880909bcf6599c4de7e7e0bb72236f59efc9ef62db6a508e650fc338986bc0960fb8c752aad121af322469386", + "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.43": "d829b0d94d301c5f51466ecf85656d24cd2f5f71a532972e2c3bec7f72e5a58b557e0ce49081159a969047ebac056230ac41cc91f61874ee248bf3611ccdfdb7", + "@rolldown/binding-win32-ia32-msvc@npm:1.0.0-beta.43": "5ce15eb693a2243d47a844fe442e71919050146c86655ebf80524b3de5850669915e14cf1d74310e8f41fc0252a97af0c49862126c90f06fddf590ec5b230a8f", + "@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.43": "09b130cfacc3d60dee4525622c0e933630aeebbca25d0f778802d20667635510c505f410b7f85bec2921eb21f141a1ff234aaea9c79eaf30ee3dc0b3d9b8ec59", + "@rollup/rollup-android-arm-eabi@npm:4.52.5": "62451748fde2f4a8e8423b2e7f83fd0342e57433fa0f71d378ea38ed3f85dc6a0706ef9feae21d79428f4e274da45c07bc49eb1b3a82c08f6b98d8cf20de83f7", + "@rollup/rollup-android-arm64@npm:4.52.5": "d050880ec4e14c0d1ab7e32e6a843c3f39b4161ddd574532482807e6e559e34dee8bfe3862bf06a62e79e46a410afaa3dafedc5e0db41db5cf39c10bbcf32330", + "@rollup/rollup-darwin-arm64@npm:4.52.5": "4c7a2994ec5bb915b5b455a507b296c892c914ed0c0c3e8e1958d7e021dc47627a27c756f1628aca2e2ace8487dc93dd801483f0ec40f92603b6a788322e66ed", + "@rollup/rollup-darwin-x64@npm:4.52.5": "fcdc3b7954afea6dc191a6244e793a32e8373e1798020d1cfcaf5da48bd23c533b661763d2dbfb87412bf5b1a59377ec06560f64da869126ab8c995391de9047", + "@rollup/rollup-freebsd-arm64@npm:4.52.5": "f52788b616f5bc4c5edbc41ca2ac4fde7fbed678a0d2c3249111f4322a76550e682037563d07a0f07eb21f82289e9c5616c41797f3d9caa6d5b4261b8e1ce642", + "@rollup/rollup-freebsd-x64@npm:4.52.5": "8fcb45fd9b7ec02848230cefac866bca73f38071e2e85e1217627007df211e814743e3e2525b236dc410acea7f7c4484050e2338391bda509bac34e7e0bc9ca4", + "@rollup/rollup-linux-arm-gnueabihf@npm:4.52.5": "ff055f9efd2f8d1e1ced74a0defa0d089b54789f2b3d3d8f9261180059d6cd45fb895399c938c87467419ce1b37f7c50eaec333d5f140e7d8b53874cfba7bad9", + "@rollup/rollup-linux-arm-musleabihf@npm:4.52.5": "2932799d8e79831d1f79032d2bced666503466a5d3b87e98a12f577400bad80dfb5ce2883318059c038d061319ed51ed58213bc9b253b3c60a1ac5ca3807ba46", + "@rollup/rollup-linux-arm64-gnu@npm:4.52.5": "f2bf47b114856efd75e23baa3c3954fc2a8b864d678610fec5c2ecdab5736d1068fe3c813d29592a9de3f54c0de4055190670ef842333f5bc9e34e1221fb403e", + "@rollup/rollup-linux-arm64-musl@npm:4.52.5": "26c8ded405da1a31c414677de84c261d1139cd7bf568e979036d39c613a2783bff559ba9cd4ebeda06c517d709050fea97ed65ca482316322984a1bad51ccc05", + "@rollup/rollup-linux-loong64-gnu@npm:4.52.5": "3fec9dbb69d304495c40c26d49e736ae98ac173368ed0f0115fdf90b464e8bdd716b5a10f0458438a8ee31d5b13cb219ceff2ea0773537a87b597a3aaf6c0fbd", + "@rollup/rollup-linux-ppc64-gnu@npm:4.52.5": "542b1171f910f3298a1f326ca6dfb41463ac8a9291f21502830a75217d91c38a0701517c4424c1d114b7fcba06b5fdc1ac95b9814ff542fc1c5741c965a12fc0", + "@rollup/rollup-linux-riscv64-gnu@npm:4.52.5": "3f8a728b372d5cd2964281bdfe6184cd6dcff579681ea3a9bcb240d2fdaa0181a763f6f34930eae206d00c687cbecfa3d3b18b49bfdef0b772809fac80e007d8", + "@rollup/rollup-linux-riscv64-musl@npm:4.52.5": "26b5a6d0983aeea544421d697787a540de653a84f948389280cfde0add366fa0fb7af4a5e67ca490a63a8fabca801f04b23a70bb948cbe06d48aa0ab0b3fff73", + "@rollup/rollup-linux-s390x-gnu@npm:4.52.5": "6f4b1605d9cb191ec404ad2418f5fbc43d5585a83eeb33f8a8de6d2393e4ec85fb42a4e55da7d100bdd708e830e89b815d4e444f34b3002096370b1e1e80bee7", + "@rollup/rollup-linux-x64-gnu@npm:4.52.5": "70fdee240db9c56c9a2a202450f4fb2b8cad059bb001c10cfc37b8ba1a333f1ad61b4a9bc01df005d9d0eb9c7ae57103c70c4ba58ef89942e11b0eb449cb3fd8", + "@rollup/rollup-linux-x64-musl@npm:4.52.5": "871865574e0a5f79af49151685b1e243d43f0eb11100cffb9d835c4aa3423a471dfbb56ba7d16928eb11df7956e307c74d0b5cd872db711cd382bc36e487be9a", + "@rollup/rollup-openharmony-arm64@npm:4.52.5": "15150989aa46138a5675962f1bfb01640a212e26976e799be4b0029c2e6f0e7a21b32754457b13dac05d02aa04814b6d0a6ee43dbf3473dc9fce00c7d8c0155f", + "@rollup/rollup-win32-arm64-msvc@npm:4.52.5": "6433d349de33e71bb1cd11192ac58827630ef1b4eef79af40708cd7a8375922bfdcde69ed9e31309ae9b9224e3d9237ac00191a1c8406c7e3bbfa99d57baae00", + "@rollup/rollup-win32-ia32-msvc@npm:4.52.5": "0da2d66ad1bc046a601b9de5a1266ba61a08e211df670d056451a58ee92a1a1de3739cfae853bf133c4204802ec7c72d2fae607f7ef31789e6124c23441f3f07", + "@rollup/rollup-win32-x64-gnu@npm:4.52.5": "a7d3489e79f1cd8e4d34e784f3e32e9681170e4fc7d568cf43b31511c6b9c0e03db722c76baa595799c85ebd96a7e6ce66670ec00ed253e674d7e732a244c554", + "@rollup/rollup-win32-x64-msvc@npm:4.52.5": "eb1c823b1e13f27b49321ae56f4c35710194d674034820f6c0b66a2309cbefaff7bc4a58e6c3fbb2453f8913f4aa1cc173cf9f6e9085df47f1922626630260da", + "@tauri-apps/cli-darwin-arm64@npm:2.8.4": "de198401193ce2ca4c07ed43ef9a89db2d352290479779ba2465a3aead697c86bd489a262e96e08dfeac1c563e3db706ba82f0e1e142638494aa4a9800816a1e", + "@tauri-apps/cli-darwin-x64@npm:2.8.4": "f708ba1a329d907e675612b8458ba5ada9649731857d4ac57d89e8913f213acbc85ccd40617063edcbee199f024474820d41e5381b0020323a6fb6b5de7877f5", + "@tauri-apps/cli-linux-arm-gnueabihf@npm:2.8.4": "a2d64ec5120f1fae3e6a3af28e5ccd3543c94f97277765f97a4bb2932143530eb16de2d2a6dd9f581fca44bb0522ee0551e6211d3f314d15d5f4a20771b272cc", + "@tauri-apps/cli-linux-arm64-gnu@npm:2.8.4": "a7cde7b644fed1404cd6d2a863b11e6734fe5a3f23af56cb4a319cf785fe14d6d8109a3fab0c484563e9273e31e5147b64ebd652de64417bf16546776ecdcd86", + "@tauri-apps/cli-linux-arm64-musl@npm:2.8.4": "5c7f527c46e7052d14732bcc08cf3a6fc0a011302e3c4e55248c98b439eb1c4eaced2fd262a6f700cb5ca37770d39f755d2f1c44ae4a21ad3fc323538e1954be", + "@tauri-apps/cli-linux-riscv64-gnu@npm:2.8.4": "3858837346d2ca006e4b8418dda4b68102059280e76aef2ebe4b90577a41407adf9f16674402140bf01b120f455453ea0099ff3f88274645e3b748c3c45c30fa", + "@tauri-apps/cli-linux-x64-gnu@npm:2.8.4": "b2d7c74bf0a7ad34b0009bd19e6f0bd388775e43365ca3d1bda75be06e15f38ec2d53f528bd08d14cfa170252943d656ce5ab554d5687d288a85071c47c0c7a6", + "@tauri-apps/cli-linux-x64-musl@npm:2.8.4": "d7f2755cfdc74bb416c73a1510002c1e8ba8450aa44cd5d562ee08ccfe20dec95d962f6098d8c70a29fb4ad1088b9583bc34191def6cfbaa05bb313cfffc250c", + "@tauri-apps/cli-win32-arm64-msvc@npm:2.8.4": "cc00c4edace7f25f11d5789f9727d9861dcb15181bdfac222d2be66ade3558d941e2b523d51c7468227633fd4bd14fdd49cba4433677bf9da97ce82f5a40aad1", + "@tauri-apps/cli-win32-ia32-msvc@npm:2.8.4": "e25cb4cfe210ae6a3c4599b58a5c437004f0219483206b3f4b58d4023d1eccf2859037e37b9a4fa65ee974c2e0052a36889dd414003a764757b413edcd15c1c9", + "@tauri-apps/cli-win32-x64-msvc@npm:2.8.4": "2619e879a1df1deae8aa026fd4b2ed5d9b618abeef40328549f2eda3d5669136ea2c07338ef424f7072d4d0be2d977cf467b15b3697abf5a7323ff4932eae692", + "lightningcss-android-arm64@npm:1.30.2": "7b8a62c7aa787251381e9e082fc19991e8bca696f17be4dad0a5c3a31483d1452e6f8b04713b9c9221ef8d9b011510ee10d69c34005294be92ba2e57ad075a90", + "lightningcss-darwin-arm64@npm:1.30.2": "fe4f6eb4af66f95a0f83a9b4970f863417ae9ac394b5c963a20cda24ae08ae0ce6ebdc6f8e664d8b53717afb936242b9a73394584b55ecf2978babab50364e93", + "lightningcss-darwin-x64@npm:1.30.2": "b2d82add63e88d77dbd08508a32c1c28a12de826d4dd70f6ec17ffae9d3c5bf1be7a7c35f154bf98bca4164b7390ba515202884e4cabaa83ed7f1727baaa08fa", + "lightningcss-freebsd-x64@npm:1.30.2": "cea6113555ed6fd69e10c67a8616d3b4c743eacd817e93d290b7d85d1c2eb29386466e55f61890f4aee87cafe062ef037b92824160418dd1c299bb7d15796cec", + "lightningcss-linux-arm-gnueabihf@npm:1.30.2": "93119a9476759aff2a1a3fe35dfdfd39b0eab320b76725b36bddfc11f258f80140831169ed10f5528349863f7c6497358ec73d3c13054e6dc72ef5b26a22bd26", + "lightningcss-linux-arm64-gnu@npm:1.30.2": "c52236dd9777f150b849e0ed4ec1a4d17dc2bbe1ffa802286483d9c71e868eef16b54e348e410d44921262beb4474d2b4c90c268aa2c1109e55899d7cf8294c8", + "lightningcss-linux-arm64-musl@npm:1.30.2": "85b54252172367c9b15be312c55f982d0541063b0626faa370c26d5eb8bedc36e036b6081374aba35f68d9e82c729239fb7af52f997004df715b09a6f7c5d453", + "lightningcss-linux-x64-gnu@npm:1.30.2": "658f54482728885541331184a5fefc3df76e1f4d691ad28d70b559dc391d552837bc95676449e48cbdcda8d63165f0f56c921a09ec2c6fc591b427c566e0b9ed", + "lightningcss-linux-x64-musl@npm:1.30.2": "6b046d57dab2237729953f1350a922844fafd16bdbae3a9ee17b04abdc2e2d2392ccd61932e7210276bf18938165d900517d2079ec57d866fd288b8bba28dbd4", + "lightningcss-win32-arm64-msvc@npm:1.30.2": "f8383d06fe81494ba34b9bd7eb713ad91dbd84d4f321526b5190d7908e95591e462159acf71f6d3a0c33ea1251d5e80c012d255d94e9aa4187a476a810a249bc", + "lightningcss-win32-x64-msvc@npm:1.30.2": "ab86748b46ca851d29c387cb349cd35ca9da6fc73082b759ef84d358ec08ece6491e0eb137ea8b30b85419c20075c59f44620ab026d9a0aa0e86d3e0a610a960", + "sass-embedded-all-unknown@npm:1.93.2": "a71f67fb4b9602e914cf752217769a60f4f458cf16f02b6c9a037c7f8ef4e0e47b2ef3459994e66ba783588594df37985ac5f7f4b27ed392c1f9dbef35660357", + "sass-embedded-android-arm64@npm:1.93.2": "64c9befadbb9e25573c4bc136ee6426f8e7e066c239171777a358f00e60e44fd57203c325206e27fe9aacb46bfb791503ec4bff0f96308a3e09c17dceeabbbc5", + "sass-embedded-android-arm@npm:1.93.2": "c1ab390df3b5464a674cb2bd3dfc63fb1b4436284445296cb9f7c3aeaa1a39741eecffb324d0eb32b603bb366a811ed5fae0e5ecf7daa8643c40e0337f1558e3", + "sass-embedded-android-riscv64@npm:1.93.2": "48ef513496e2ef191a274558ff90779bb888a00129b2d7c3d612b57aa55cab0ac4cafb6e547b046c244e0c27e2f23a58462724c48a9a9749b91aec91a61253c8", + "sass-embedded-android-x64@npm:1.93.2": "8dba70d34fa5425f3b4f7e912976b57e73b72c0e080791dc067c2dc512a1ecb07a9e8566c7a6e3814bb91162e0042b47278f784e297a328ed780bce6c3945a95", + "sass-embedded-darwin-arm64@npm:1.93.2": "d312f6c2721d1fa1d778ff615eeda433d1f2266cfe73bc45926dbccd47e53ba7e36478e4459ab5ca5aa424ebb9d7e22655aca1b3e3d4c3f80bfef24a67fe9ecd", + "sass-embedded-darwin-x64@npm:1.93.2": "23492b4c75dcc9c9fab2c943c16404f7928da097f29b1073b7f30cd344ebc9d7f43e22c212919e6d60d69fd87522546f208fb2e04f7c4e764b6e7e5bba204c8c", + "sass-embedded-linux-arm64@npm:1.93.2": "88f4f1967dc9fa5128c1d29c64da99b9f9a5c87e52d102bc14a8ff6e9288f1eef77769ade41dce0a593297eb6ea1d879868ba1f9fc5f66cf24b193ab1e083238", + "sass-embedded-linux-arm@npm:1.93.2": "3b4ea034d4d32b7d620ad1df51047b727a30486dcf69a3009110f6bbe5c19a39dde351c60e987391592fb093e51202c9a0c1770d25c3b889853df20db155168e", + "sass-embedded-linux-musl-arm64@npm:1.93.2": "0a752fc5533bb9476ea3014396a4864177e4eb5a1d7d81e266fdb9a413a82cd5c2a5e839c06e27c21916ee23f6f73616503027406d9012b5a9da9b759feef9a5", + "sass-embedded-linux-musl-arm@npm:1.93.2": "c82de6d09390757a45d0b3a96518ef68ba2775e7bfdf3923b002fb6f61590105dbabf3cb2cf9c6ef45f45e486e20c14a9ce6e230583e264e6d78709779512957", + "sass-embedded-linux-musl-riscv64@npm:1.93.2": "bf9c71004579bb32b485cb229d71cdc39e6e41f44887113e7cf0bfbfe4ce00bf15236afea9b75d9156aaad7328bff6f550f04915fba9cd6a3e07baa96104564a", + "sass-embedded-linux-musl-x64@npm:1.93.2": "94bcf60465ebb2518e7af954c54b84bd572a25ea2b29a56341a95c42936c74ccf3511dc6002ed845c0a0452f3fa248045ea0e84e25ae2e2caa03957588ce0f05", + "sass-embedded-linux-riscv64@npm:1.93.2": "a8c59c78d43fc324c4f3030b9c05db32d6614fdc3ed78d76f40bf7ef080d7382cba9e152ceb9d286401aaf1f00fb2397e9c50f55683e883223639f994970013d", + "sass-embedded-linux-x64@npm:1.93.2": "56887e44759d4f49c94ab37c77e449590fa80c2d802ed7681fbc2b7315b128187e6c598f969e06a1811bf30b7e1c568008b75ac4293667bbfb094e248cf403b6", + "sass-embedded-unknown-all@npm:1.93.2": "b453bf4fe9e4b0d344ccdebd31abefadf62e1bd25b16d4e74f8f9f502f8aebdae20b69dd210eacafb6658027bfdc6d3e5c624cad2731919f067e6bcd4a44ec66", + "sass-embedded-win32-arm64@npm:1.93.2": "a481e11f298e818ea7faa01e582e7b6afa80587333c51b233276eb38bb53d2fc1352e5ca2436039d84c8ebd97ac8e69e712714368f9c47377592e87a938dda63", + "sass-embedded-win32-x64@npm:1.93.2": "dbc5cacf2b05739c69f1d46df772d2d6b9ab47dbc3a26612706da1c522f1ed5c8aca33e39eb31735daae7289e304215921697f2598c0d76c3fa690e0e5799992" +} diff --git a/pkgs/by-name/funkwhale/package.nix b/pkgs/by-name/funkwhale/package.nix index b1244c466..95d401c82 100644 --- a/pkgs/by-name/funkwhale/package.nix +++ b/pkgs/by-name/funkwhale/package.nix @@ -7,18 +7,21 @@ redisTestHook, funkwhale, runCommand, + typesense, + curl, # Frontend stdenv, - fetchYarnDeps, - yarnConfigHook, - yarnBuildHook, + yarn-berry_4, nodejs, + cypress, + dart-sass, nix-update-script, }: let python = python3; + yarn-berry = yarn-berry_4; meta = { description = "Federated platform for audio streaming, exploration, and publishing"; @@ -32,7 +35,7 @@ let in python.pkgs.buildPythonApplication rec { pname = "funkwhale"; - version = "2.0.0-alpha.2"; + version = "2.0.0"; pyproject = true; src = fetchFromGitLab { @@ -40,7 +43,7 @@ python.pkgs.buildPythonApplication rec { owner = "funkwhale"; repo = "funkwhale"; tag = version; - hash = "sha256-4WvTyVqFuSlkim/9S88tutvXJqA4VHsILH5q4WKsjo8="; + hash = "sha256-hMxVWnKa2n8ZmY8A2J8603tpyRvTH/Po37gZDBmRKWY="; }; sourceRoot = "${src.name}/api"; @@ -50,12 +53,6 @@ python.pkgs.buildPythonApplication rec { # See https://github.com/NixOS/nixpkgs/pull/448893. ./replace-unicode-slugify.patch - # The function was removed in an update. - ./fix-allauth-internal-function-use.patch - - # Broken in - ./fix-oob-schemes.patch - ./fix-root-filesystem-tests.patch ]; @@ -120,6 +117,7 @@ python.pkgs.buildPythonApplication rec { cryptography defusedxml feedparser + httpx python-ffmpeg liblistenbrainz musicbrainzngs @@ -137,7 +135,9 @@ python.pkgs.buildPythonApplication rec { pycountry # Typesense - typesense + #typesense + # Remove once https://github.com/NixOS/nixpkgs/pull/503394 is merged + (python3.pkgs.callPackage ./deps/typesense { inherit typesense curl; }) ipython pluralizer @@ -196,24 +196,41 @@ python.pkgs.buildPythonApplication rec { inherit version src; sourceRoot = "${src.name}/front"; - yarnOfflineCache = fetchYarnDeps { + missingHashes = ./missing-hashes.json; + offlineCache = yarn-berry.fetchYarnBerryDeps { yarnLock = "${src}/front/yarn.lock"; - hash = "sha256-+rGiKBg18XL6W5b5VaYAbwbF+kQGX8JBIn0ATJyd9Bg="; + # TODO update script + # yarn-berry-fetcher missing-hashes $(nix-build -A funkwhale.frontend.src)/front/yarn.lock >pkgs/by-name/funkwhale/missing-hashes.json + missingHashes = ./missing-hashes.json; + hash = "sha256-II/9X4JILGJli5gSznIfKMGlDzp84IMJS7l1qV2KNOk="; }; - yarnBuildScript = "build:deployment"; + env = { + CYPRESS_INSTALL_BINARY = 0; + CYPRESS_RUN_BINARY = lib.getExe cypress; + }; nativeBuildInputs = [ - yarnConfigHook - yarnBuildHook + yarn-berry.yarnBerryConfigHook + yarn-berry nodejs + dart-sass ]; + buildPhase = '' + runHook preBuild + + # force sass-embedded to use our own sass instead of the bundled one + substituteInPlace node_modules/sass-embedded/dist/lib/src/compiler-path.js \ + --replace-fail 'compilerCommand = (() => {' 'compilerCommand = (() => { return ["${lib.getExe dart-sass}"];' + + yarn run build:deployment + runHook postBuild + ''; + installPhase = '' runHook preInstall - cp -r dist $out - runHook postInstall ''; @@ -222,6 +239,7 @@ python.pkgs.buildPythonApplication rec { }; }; + # TODO experimental combinator updateScript = nix-update-script { extraArgs = [ "--subpackage" diff --git a/pkgs/by-name/funkwhale/replace-unicode-slugify.patch b/pkgs/by-name/funkwhale/replace-unicode-slugify.patch index bcec406ca..68eeb9ed0 100644 --- a/pkgs/by-name/funkwhale/replace-unicode-slugify.patch +++ b/pkgs/by-name/funkwhale/replace-unicode-slugify.patch @@ -1,5 +1,5 @@ diff --git a/funkwhale_api/common/storage.py b/funkwhale_api/common/storage.py -index ebf70a367..e5edfafae 100644 +index ebf70a367..cf82e2d3e 100644 --- a/funkwhale_api/common/storage.py +++ b/funkwhale_api/common/storage.py @@ -1,4 +1,5 @@ @@ -8,28 +8,32 @@ index ebf70a367..e5edfafae 100644 import shutil import slugify -@@ -10,7 +11,7 @@ def asciionly(name): +@@ -10,7 +11,11 @@ def asciionly(name): """ Convert unicode characters in name to ASCII characters. """ - return slugify.slugify(name, ok=slugify.SLUG_OK + ".", only_ascii=True) -+ return re.sub(r"[\s]+", "-", slugify.slugify(name, regex_pattern=r"[^\s\-_~\.a-zA-Z0-9]+", separator="")) ++ return re.sub( ++ r"[\s]+", ++ "-", ++ slugify.slugify(name, regex_pattern=r"[^\s\-_~\.a-zA-Z0-9]+", separator=""), ++ ) class ASCIIFileSystemStorage(FileSystemStorage): diff --git a/funkwhale_api/music/models.py b/funkwhale_api/music/models.py -index 005990995..536e1dfdb 100644 +index 8abe0d289..bfd354008 100644 --- a/funkwhale_api/music/models.py +++ b/funkwhale_api/music/models.py -@@ -2,6 +2,7 @@ import datetime - import itertools +@@ -3,6 +3,7 @@ import itertools import logging import os + import random +import re import tempfile import urllib.parse import uuid -@@ -789,7 +790,7 @@ TRACK_FILE_IMPORT_STATUS_CHOICES = ( +@@ -779,7 +780,7 @@ TRACK_FILE_IMPORT_STATUS_CHOICES = ( def get_file_path(instance, filename): # Convert unicode characters in name to ASCII characters. @@ -39,11 +43,11 @@ index 005990995..536e1dfdb 100644 if isinstance(instance, UploadVersion): return common_utils.ChunkedPath("transcoded")(instance, filename) diff --git a/pyproject.toml b/pyproject.toml -index 23453fe10..ad8bb069e 100644 +index 37d13aa31..ad2cbda91 100644 --- a/pyproject.toml +++ b/pyproject.toml -@@ -98,7 +98,7 @@ typesense = { version = "==1.0.3", optional = true } - ipython = "==9.2.0" +@@ -98,7 +98,7 @@ typesense = { version = "==1.3.0", optional = true } + ipython = "==9.10.0" pluralizer = "==1.2.0" service-identity = "==24.2.0" -unicode-slugify = "==0.1.5" From 2913854df7007e2dff7775ad1c90550030145c9f Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Wed, 25 Mar 2026 23:22:34 +0530 Subject: [PATCH 16/37] projects(Funkwhale): fix nixos test Signed-off-by: phanirithvij --- projects/Funkwhale/services/funkwhale/tests/basic.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/Funkwhale/services/funkwhale/tests/basic.nix b/projects/Funkwhale/services/funkwhale/tests/basic.nix index bf5d98f1a..5aa92dcd7 100644 --- a/projects/Funkwhale/services/funkwhale/tests/basic.nix +++ b/projects/Funkwhale/services/funkwhale/tests/basic.nix @@ -39,7 +39,7 @@ machine.succeed("curl --fail http://localhost") # Can create supseruser and login. - machine.succeed("sudo -u funkwhale funkwhale-manage fw users create --superuser " + machine.succeed("cd /var/lib/funkwhale && sudo -u funkwhale funkwhale-manage fw users create --superuser " "--username testinahat --email test@example.com --password teast1997") machine.succeed('curl --fail http://localhost/api/v2/users/login ' '--form "username=testinahat" --form "password=teast1997" ' @@ -50,4 +50,11 @@ machine.succeed("sudo -u funkwhale funkwhale-manage generate_typesense_index") machine.wait_for_console_text("typesense\\.build_canonical_index.*succeeded") ''; + + # Debug interactively with: + # - nix build -f . projects.Funkwhale.tests.basic.driverInteractive + # - ./result/bin/nixos-test-driver + # - run_tests() + # ssh -o User=root vsock%3 (can also do vsock/3, but % works with scp etc.) + interactive.sshBackdoor.enable = true; } From 2e741987cda1236e2c075ee19ff23cc68cf4eaed Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sat, 28 Mar 2026 22:43:39 +0530 Subject: [PATCH 17/37] projects(holo): fix test and update package Nixpkgs pr 504411 Signed-off-by: phanirithvij --- pkgs/by-name/holo-cli/libyang4-sys.patch | 12 +++ pkgs/by-name/holo-cli/package.nix | 76 +++++++++++++++++++ .../holo/services/holo/tests/ietf-ospfv3.nix | 14 +++- 3 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 pkgs/by-name/holo-cli/libyang4-sys.patch create mode 100644 pkgs/by-name/holo-cli/package.nix diff --git a/pkgs/by-name/holo-cli/libyang4-sys.patch b/pkgs/by-name/holo-cli/libyang4-sys.patch new file mode 100644 index 000000000..829d39818 --- /dev/null +++ b/pkgs/by-name/holo-cli/libyang4-sys.patch @@ -0,0 +1,12 @@ +--- a/build.rs ++++ b/build.rs +@@ -62,6 +62,9 @@ + cmake_config.define("ENABLE_BUILD_TESTS", "OFF"); + cmake_config.define("CMAKE_BUILD_TYPE", "Release"); + cmake_config.define("CMAKE_POSITION_INDEPENDENT_CODE", "ON"); ++ // https://github.com/CESNET/libyang/blob/3d07c3a71534a580c3960907da17568eff7e5c64/CMakeModules/FindPCRE2.cmake#L9 ++ cmake_config.define("PCRE2_INCLUDE_DIRS", "@PCRE2_INCLUDE_DIRS@"); ++ cmake_config.define("PCRE2_LIBRARIES", "@PCRE2_LIBRARIES@"); + let cmake_dst = cmake_config.build(); + println!("cargo:root={}", env::var("OUT_DIR").unwrap()); + println!("cargo:rustc-link-search=native={}/lib", cmake_dst.display()); diff --git a/pkgs/by-name/holo-cli/package.nix b/pkgs/by-name/holo-cli/package.nix new file mode 100644 index 000000000..93942defe --- /dev/null +++ b/pkgs/by-name/holo-cli/package.nix @@ -0,0 +1,76 @@ +{ + lib, + rustPlatform, + fetchFromGitHub, + fetchpatch2, + + stdenv, + replaceVars, + + cmake, + pkg-config, + protobuf, + + pcre2, + + nix-update-script, +}: + +rustPlatform.buildRustPackage (finalAttrs: { + pname = "holo-cli"; + version = "0.5.0-unstable-2026-03-15"; + + src = fetchFromGitHub { + owner = "holo-routing"; + repo = "holo-cli"; + rev = "36fdc13323e384c086da8663f0d510b238fb6e4f"; + hash = "sha256-5Nvyh9gznMsutu3wHR6gwgKkIm115hbx4R6D/Gm1Rug="; + }; + + # cargo lock is outdated + cargoPatches = [ + # https://github.com/holo-routing/holo-cli/pull/31 + (fetchpatch2 { + url = "https://github.com/holo-routing/holo-cli/commit/8e282c056f7d3cc00c1f1b544659f94c150e72e9.patch?full_index=1"; + hash = "sha256-/Gw4ilFjfsMNS4em21Lkf4OmyjU0xHAKfmAXS6i320E="; + }) + ]; + + cargoHash = "sha256-77aUfXcnVQLVEKQuUdBZ4k5/3rOoe9PvGC0AlJS0UJc="; + + postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' + pushd $cargoDepsCopy/*/libyang4-sys-* + patch -p1 < ${ + replaceVars ./libyang4-sys.patch { + PCRE2_INCLUDE_DIRS = "${lib.getInclude pcre2}/include"; + PCRE2_LIBRARIES = "${lib.getLib pcre2}/lib/libpcre2-8${stdenv.hostPlatform.extensions.sharedLibrary}"; + } + } + popd + ''; + + # Use rust nightly features + env.RUSTC_BOOTSTRAP = 1; + + nativeBuildInputs = [ + cmake + pkg-config + protobuf + ]; + + buildInputs = [ + pcre2 + ]; + + passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; }; + + meta = { + description = "Holo` Command Line Interface"; + homepage = "https://github.com/holo-routing/holo-cli"; + license = lib.licenses.mit; + mainProgram = "holo-cli"; + maintainers = with lib.maintainers; [ themadbit ]; + platforms = lib.platforms.all; + teams = with lib.teams; [ ngi ]; + }; +}) diff --git a/projects/holo/services/holo/tests/ietf-ospfv3.nix b/projects/holo/services/holo/tests/ietf-ospfv3.nix index 0bd27fb16..0bd2bcb81 100644 --- a/projects/holo/services/holo/tests/ietf-ospfv3.nix +++ b/projects/holo/services/holo/tests/ietf-ospfv3.nix @@ -40,7 +40,9 @@ machine.wait_for_open_port(50051) # Test the running configuration is empty - machine.succeed("holo-cli -c 'show running format json'") + out = machine.succeed("holo-cli -c 'show running format json'") + print(out) + assert out.strip() == "{}"; # Configure an OSPFv3 instance: # as seen in https://asciinema.org/a/qYxmDu1QjGPBAt5gNyNKvXhHk @@ -55,6 +57,14 @@ machine.send_chars("exit\n", 1) # Verify the configuration was applied (in interactive test) - machine.succeed("test \"$(holo-cli -c 'show running format json')\" != \"{}\""); + out = machine.succeed("holo-cli -c 'show running format json'") + print(out) + assert out.strip() != "{}"; ''; + + # Debug interactively with: + # - nix run .#projects.holo.tests.basic.driverInteractive -L + # - start_all()/run_tests() + # ssh -o User=root vsock%3 (can also do vsock/3, but % works with scp etc.) + interactive.sshBackdoor.enable = true; } From 9380b4ab239b88d96c8415796bbb8f29277840ae Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sat, 28 Mar 2026 22:52:06 +0530 Subject: [PATCH 18/37] projects(mitmproxy): mark test as broken fix is in nixpkgs pr 504385 Signed-off-by: phanirithvij --- projects/mitmproxy/default.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/projects/mitmproxy/default.nix b/projects/mitmproxy/default.nix index b707735f9..6bcfff4fc 100644 --- a/projects/mitmproxy/default.nix +++ b/projects/mitmproxy/default.nix @@ -20,6 +20,9 @@ module = ./demo.nix; description = ""; tests.basic.module = pkgs.nixosTests.mitmproxy; + tests.basic.problem.broken.reason = '' + Broken in nixpkgs, fix: https://github.com/NixOS/nixpkgs/pull/504385 + ''; }; }; }; @@ -28,5 +31,8 @@ module-demo = ./module-demo.nix; description = ""; tests.demo.module = pkgs.nixosTests.mitmproxy; + tests.demo.problem.broken.reason = '' + Broken in nixpkgs, fix: https://github.com/NixOS/nixpkgs/pull/504385 + ''; }; } From 03c556eb3682e96371b5a04d075c6023ad775d68 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Wed, 25 Mar 2026 19:57:53 +0530 Subject: [PATCH 19/37] pdfding: vendor 1.6.3 nixpkgs PR at 496164 Signed-off-by: phanirithvij --- pkgs/by-name/pdfding/frontend.nix | 80 +++++++++++++ pkgs/by-name/pdfding/package.nix | 190 ++++++++++++++++++++++++++++++ pkgs/by-name/pdfding/update.sh | 53 +++++++++ 3 files changed, 323 insertions(+) create mode 100644 pkgs/by-name/pdfding/frontend.nix create mode 100644 pkgs/by-name/pdfding/package.nix create mode 100755 pkgs/by-name/pdfding/update.sh diff --git a/pkgs/by-name/pdfding/frontend.nix b/pkgs/by-name/pdfding/frontend.nix new file mode 100644 index 000000000..dcdb4b06b --- /dev/null +++ b/pkgs/by-name/pdfding/frontend.nix @@ -0,0 +1,80 @@ +{ + stdenv, + fetchNpmDeps, + fetchzip, + fetchFromGitHub, + npmHooks, + + tailwindcss_4, + nodejs, +}: +let + pdfjsVersion = "5.4.394"; # see update script + pdfjsHash = "sha256-pd7xwfvR9U1bHT5eblszYU3YJQwQwhuyDDiNj+fnyaQ="; + pdfjs = fetchzip { + url = "https://github.com/mozilla/pdf.js/releases/download/v${pdfjsVersion}/pdfjs-${pdfjsVersion}-dist.zip"; + hash = pdfjsHash; + stripRoot = false; + postFetch = '' + rm -rf $out/web/locale \ + $out/web/standard_fonts \ + $out/web/compressed.tracemonkey-pldi-09.pdf + + # remove source maps + find "$out" -name '*.map' -exec rm -f '{}' \; + ''; + }; +in +stdenv.mkDerivation (finalAttrs: { + pname = "pdfding-frontend"; + version = "1.6.3"; + src = fetchFromGitHub { + owner = "mrmn2"; + repo = "PdfDing"; + tag = "v${finalAttrs.version}"; + hash = "sha256-Qfw5urcUsVMxaVeVQeZkG8x5aK29y1HrcRY69AbdUXA="; + }; + + npmDeps = fetchNpmDeps { + inherit (finalAttrs) src; + name = "pdfding-frontend-${finalAttrs.version}-npm-deps"; + hash = "sha256-XsaVnl7JNitRVDVxk82jy3/P81TgVK4EoXIrWSBPDVQ="; + }; + + nativeBuildInputs = [ + nodejs + npmHooks.npmConfigHook + # it is in package.json and thus node_modules but no cli executable + tailwindcss_4 + ]; + + # keeping the file structure same as upstream to minimise confusion + buildPhase = '' + runHook preBuild + mkdir -p $out/pdfding + cp -r --no-preserve=mode pdfding/static $out/pdfding/static + cp -r --no-preserve=mode ${finalAttrs.passthru.pdfjs} $out/pdfding/static/pdfjs + + tailwindcss -i $out/pdfding/static/css/input.css -o $out/pdfding/static/css/tailwind.css --minify + rm $out/pdfding/static/css/input.css + + for i in build/pdf.mjs build/pdf.sandbox.mjs build/pdf.worker.mjs web/viewer.mjs; + do + node_modules/terser/bin/terser $out/pdfding/static/pdfjs/$i --compress -o $out/pdfding/static/pdfjs/$i; + done + + npm run build + + cp -r pdfding/static/js $out/pdfding/static + + runHook postBuild + ''; + + passthru = { + inherit pdfjs; + }; + + meta = { + description = "PdfDing frontend"; + }; +}) diff --git a/pkgs/by-name/pdfding/package.nix b/pkgs/by-name/pdfding/package.nix new file mode 100644 index 000000000..f9f66c85a --- /dev/null +++ b/pkgs/by-name/pdfding/package.nix @@ -0,0 +1,190 @@ +{ + lib, + callPackage, + fetchFromGitHub, + makeWrapper, + nixosTests, + + python3, +}: +let + python = python3; +in +python.pkgs.buildPythonPackage (finalAttrs: { + pname = "pdfding"; + version = "1.6.3"; + src = fetchFromGitHub { + owner = "mrmn2"; + repo = "PdfDing"; + tag = "v${finalAttrs.version}"; + hash = "sha256-Qfw5urcUsVMxaVeVQeZkG8x5aK29y1HrcRY69AbdUXA="; + }; + pyproject = true; + + # remove supervisor from dependencies + postPatch = '' + sed -i 's/supervisor.*$//' pyproject.toml + ''; + + dependencies = + with python.pkgs; + [ + django + django-allauth + django-cleanup + django-htmx + gunicorn + huey + markdown + minio + nh3 + oauthlib + pillow + psycopg2-binary + pypdf + pypdfium2 + python-magic + qrcode + rapidfuzz + ruamel-yaml + whitenoise + + # dependecies required for django collectstatic + cryptography + pyjwt + requests + ] + ++ qrcode.optional-dependencies.pil + ++ django-allauth.optional-dependencies.mfa + ++ django-allauth.optional-dependencies.socialaccount; + + build-system = with python.pkgs; [ poetry-core ]; + + nativeBuildInputs = [ + makeWrapper + ]; + + optional-dependencies = { + e2e = with python.pkgs; [ + pytest + pytest-django + pytest-playwright + pytest-rerunfailures # required to retry some flaky e2e tests + ]; + }; + + preBuild = '' + # remove originals, copy from frontend + rm -rf pdfding/static + ln -s ${finalAttrs.passthru.frontend}/pdfding/static pdfding/static + + # staticfiles step requires prod configuration, remove dev.py + mv pdfding/core/settings/dev.py dev.py.bak + + ${python.pythonOnBuildForHost.interpreter} pdfding/manage.py collectstatic + + # not needed, now we have staticfiles directory + rm -rf pdfding/static + + # the following is from upstream's Dockerfile + + # remove django md5 hash from filenames of pdfjs as it will mess up the relative imports because of the whitenoise setup + export PDFJS_PATH="pdfding/staticfiles/pdfjs" + for file_name in $(find $PDFJS_PATH -type f -not -path "$PDFJS_PATH/web/images/*") + do + if [[ $file_name =~ "LICENSE" ]]; then + new=$(echo "$file_name" | sed -E "s/LICENSE\.[a-zA-Z0-9]{12}/LICENSE/"); + else + new=$(echo "$file_name" | sed -E "s/\.[a-zA-Z0-9]{12}\./\./"); + fi; + mv -- "$file_name" "$new"; + done \ + && echo 'Successfully removed hash from pdfjs files' + + echo "VERSION = '${finalAttrs.version}'" > pdfding/core/settings/version.py; + ''; + + env.PDFDING_OUT_DIR = "${placeholder "out"}/${python.sitePackages}/pdfding"; + + makeWrapperArgs = [ + "--set-default DATA_DIR /var/lib/pdfding" + # allow for gunicorn processes to have access to Python packages + "--prefix PYTHONPATH : " + "${python.pkgs.makePythonPath finalAttrs.passthru.dependencies}:${finalAttrs.env.PDFDING_OUT_DIR}" + ]; + + postInstall = '' + mkdir -p $out/bin + + makeWrapper "$PDFDING_OUT_DIR/manage.py" $out/bin/pdfding-manage \ + $makeWrapperArgs + + makeWrapper ${lib.getExe python.pkgs.gunicorn} $out/bin/pdfding-start \ + --add-flags '--bind ''${HOST_IP:-127.0.0.1}:''${HOST_PORT:-8080} core.wsgi:application' \ + $makeWrapperArgs + ''; + + pythonRelaxDeps = [ + "django" + "django-allauth" + "gunicorn" + "markdown" + "nh3" + "pypdf" + "whitenoise" + ]; + + checkInputs = with python.pkgs; [ + fido2 + pytest-django + ]; + + nativeCheckInputs = with python.pkgs; [ + pytestCheckHook + ]; + + # from .github/workflows/tests.yaml + pytestFlags = [ "--ignore=e2e" ]; + + preCheck = '' + # dev.py is required for tests, restore it + mv dev.py.bak $PDFDING_OUT_DIR/core/settings/dev.py + + export DATA_DIR=$PWD/pdfding + + # tests should run in pdfding directory + pushd pdfding + ''; + + postCheck = '' + # come out of the pdfding directory + popd + + unset DATA_DIR + + # remove dev.py + rm $PDFDING_OUT_DIR/core/settings/dev.py + ''; + + pythonImportsCheck = [ + "pdfding" + ]; + + passthru = { + inherit python; + tests = nixosTests.pdfding; + frontend = callPackage ./frontend.nix { }; + updateScript = ./update.sh; + }; + + meta = { + changelog = "https://github.com/mrmn2/PdfDing/blob/${finalAttrs.src.rev}/CHANGELOG.md"; + description = "Selfhosted PDF manager, viewer and editor offering a seamless user experience on multiple devices"; + downloadPage = "https://github.com/mrmn2/PdfDing"; + homepage = "https://pdfding.com"; + license = lib.licenses.agpl3Only; + mainProgram = "pdfding-manage"; + platforms = lib.platforms.unix; + teams = with lib.teams; [ ngi ]; + }; +}) diff --git a/pkgs/by-name/pdfding/update.sh b/pkgs/by-name/pdfding/update.sh new file mode 100755 index 000000000..debf815b4 --- /dev/null +++ b/pkgs/by-name/pdfding/update.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl jq nix-update gitMinimal prefetch-npm-deps coreutils + +set -x +set -eou pipefail + +version=$(curl ${GITHUB_TOKEN:+ -H "Authorization: Bearer $GITHUB_TOKEN"} -sL https://api.github.com/repos/mrmn2/PdfDing/releases/latest | jq -r '.tag_name') + +if [[ "v${UPDATE_NIX_OLD_VERSION:-}" == "$version" ]]; then + echo "Already up-to-date, version: $version" + exit 0 +fi + +# source hashes +nix-update --version="$version" pdfding +nix-update --version="$version" pdfding.frontend + +NIXPKGS_PATH="$(git rev-parse --show-toplevel)" +PACKAGE_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +TMPDIR="$(mktemp -d)" +trap 'rm -rf "$TMPDIR"' EXIT +cd "$TMPDIR" + +src="$(nix-build --no-link "$NIXPKGS_PATH" -A pdfding.src)" +cp "$src"/{package.json,package-lock.json} . + +# npmDeps hash +prev_npm_hash="$( + nix-instantiate "$NIXPKGS_PATH" \ + --eval --json \ + -A pdfding.frontend.npmDeps.hash | + jq -r . +)" +new_npm_hash="$(prefetch-npm-deps ./package-lock.json)" + +sed -i "s|$prev_npm_hash|$new_npm_hash|g" "$PACKAGE_DIR/frontend.nix" + +# pdfjs version +pdfjs_version="$(grep 'PDFJS_VERSION=' "$src/Dockerfile" | cut -d'=' -f2)" + +sed -i "s|pdfjsVersion = .*;|pdfjsVersion = \"$pdfjs_version\";|" "$PACKAGE_DIR/frontend.nix" + +# pdfjs hash +sed -i "s|pdfjsHash = .*;|pdfjsHash = \"sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\";|" "$PACKAGE_DIR/frontend.nix" + +set +e +new_pdfjs_hash="$( + nix-build --no-out-link -A pdfding.frontend.pdfjs "$NIXPKGS_PATH" 2>&1 >/dev/null | grep "got:" | cut -d':' -f2 | sed 's| ||g' +)" +set -e + +sed -i "s|\"sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\"|\"$new_pdfjs_hash\"|g" "$PACKAGE_DIR/frontend.nix" From 962840c886640ba0c935a73e6425e17eaab8b11f Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Fri, 27 Mar 2026 16:01:11 +0530 Subject: [PATCH 20/37] projects(PdfDing): use vendored pdfding for tests Signed-off-by: phanirithvij --- projects/PdfDing/default.nix | 12 +++++++++++- projects/PdfDing/services/pdfding/tests/basic.nix | 12 +++++++++++- projects/PdfDing/services/pdfding/tests/postgres.nix | 12 +++++++++++- .../PdfDing/services/pdfding/tests/s3-backups.nix | 12 +++++++++++- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/projects/PdfDing/default.nix b/projects/PdfDing/default.nix index a0760d7c1..1446b5cd8 100644 --- a/projects/PdfDing/default.nix +++ b/projects/PdfDing/default.nix @@ -4,6 +4,11 @@ sources, ... }@args: +let + brokenReason = '' + pdfding derivation is broken in nixpkgs, fix at https://github.com/NixOS/nixpkgs/pull/496164 + ''; +in { metadata = { summary = "Web-based selfhosted PDF manager, viewer and editor"; @@ -32,16 +37,19 @@ module = ./services/pdfding/examples/basic.nix; description = "Sqlite default service"; tests.basic.module = ./services/pdfding/tests/basic.nix; + tests.basic.problem.broken.reason = brokenReason; }; postgres = { module = ./services/pdfding/examples/postgres.nix; description = "Postgres and consume feature"; tests.postgres.module = ./services/pdfding/tests/postgres.nix; + tests.postgres.problem.broken.reason = brokenReason; }; s3-backups = { module = ./services/pdfding/examples/s3-backups.nix; description = "Backup feature of pdfding"; tests.s3-backups.module = ./services/pdfding/tests/s3-backups.nix; + tests.s3-backups.problem.broken.reason = brokenReason; }; }; links = { @@ -55,6 +63,7 @@ # e2e not tied to an example nixos.tests.e2e.module = pkgs.nixosTests.pdfding.e2e; + nixos.tests.e2e.problem.broken.reason = brokenReason; nixos.demo.vm = { module = ./demo/module.nix; @@ -84,6 +93,7 @@ ''; } ]; - tests.basic.module = pkgs.nixosTests.pdfding.basic; + tests.basic.module = ./services/pdfding/tests/basic.nix; + tests.basic.problem.broken.reason = brokenReason; }; } diff --git a/projects/PdfDing/services/pdfding/tests/basic.nix b/projects/PdfDing/services/pdfding/tests/basic.nix index c2ea01b63..1c4012653 100644 --- a/projects/PdfDing/services/pdfding/tests/basic.nix +++ b/projects/PdfDing/services/pdfding/tests/basic.nix @@ -7,6 +7,7 @@ let baseTestFile = pkgs.path + "/nixos/tests/web-apps/pdfding/basic.nix"; baseTest = import baseTestFile { inherit pkgs lib; }; + ngiPkgs = pkgs; in { inherit (baseTest) @@ -18,7 +19,7 @@ in nodes = lib.mapAttrs ( _: nodeConfig: - { config, pkgs, ... }: + { config, ... }: { imports = [ sources.modules.ngipkgs @@ -28,6 +29,15 @@ in nodeConfig ]; + # TODO remove once pdfding update+fix reaches nixpkgs + # https://github.com/NixOS/nixpkgs/pull/496164 + services.pdfding.package = lib.mkForce ngiPkgs.pdfding; + nixpkgs.overlays = [ + (self: super: { + pdfding = ngiPkgs.pdfding; + }) + ]; + sops = lib.mkForce { age.keyFile = "/run/keys.txt"; defaultSopsFile = ./sops/pdfding.yaml; diff --git a/projects/PdfDing/services/pdfding/tests/postgres.nix b/projects/PdfDing/services/pdfding/tests/postgres.nix index b1f2bbd67..5b550e344 100644 --- a/projects/PdfDing/services/pdfding/tests/postgres.nix +++ b/projects/PdfDing/services/pdfding/tests/postgres.nix @@ -7,6 +7,7 @@ let baseTestFile = pkgs.path + "/nixos/tests/web-apps/pdfding/postgres.nix"; baseTest = import baseTestFile { inherit pkgs lib; }; + ngiPkgs = pkgs; in { inherit (baseTest) @@ -18,7 +19,7 @@ in nodes = lib.mapAttrs ( _: nodeConfig: - { config, pkgs, ... }: + { config, ... }: { imports = [ sources.modules.ngipkgs @@ -28,6 +29,15 @@ in nodeConfig ]; + # TODO remove once pdfding update+fix reaches nixpkgs + # https://github.com/NixOS/nixpkgs/pull/496164 + services.pdfding.package = lib.mkForce ngiPkgs.pdfding; + nixpkgs.overlays = [ + (self: super: { + pdfding = ngiPkgs.pdfding; + }) + ]; + sops = lib.mkForce { age.keyFile = "/run/keys.txt"; defaultSopsFile = ./sops/pdfding.yaml; diff --git a/projects/PdfDing/services/pdfding/tests/s3-backups.nix b/projects/PdfDing/services/pdfding/tests/s3-backups.nix index 4c6c3758a..d908b3df0 100644 --- a/projects/PdfDing/services/pdfding/tests/s3-backups.nix +++ b/projects/PdfDing/services/pdfding/tests/s3-backups.nix @@ -7,6 +7,7 @@ let baseTestFile = pkgs.path + "/nixos/tests/web-apps/pdfding/s3-backups.nix"; baseTest = import baseTestFile { inherit pkgs lib; }; + ngiPkgs = pkgs; in { inherit (baseTest) @@ -18,7 +19,7 @@ in nodes = lib.mapAttrs ( _: nodeConfig: - { config, pkgs, ... }: + { config, ... }: { imports = [ sources.modules.ngipkgs @@ -28,6 +29,15 @@ in nodeConfig ]; + # TODO remove once pdfding update+fix reaches nixpkgs + # https://github.com/NixOS/nixpkgs/pull/496164 + services.pdfding.package = lib.mkForce ngiPkgs.pdfding; + nixpkgs.overlays = [ + (self: super: { + pdfding = ngiPkgs.pdfding; + }) + ]; + sops = lib.mkForce { age.keyFile = "/run/keys.txt"; defaultSopsFile = ./sops/pdfding.yaml; From 4db7bbe34d6ceee084e156eb370793133d9df5ce Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sun, 29 Mar 2026 00:29:20 +0530 Subject: [PATCH 21/37] nodebb: 4.9.2 -> 4.10.1; fix build Signed-off-by: phanirithvij --- .../0001-add-node-gyp-to-dependencies.patch | 59 + pkgs/by-name/nodebb/package-lock.json | 1705 ++++++++++------- pkgs/by-name/nodebb/package.nix | 17 +- .../services/nodebb/tests/postgresql.nix | 8 +- .../NodeBB/services/nodebb/tests/redis.nix | 8 +- 5 files changed, 1096 insertions(+), 701 deletions(-) create mode 100644 pkgs/by-name/nodebb/0001-add-node-gyp-to-dependencies.patch diff --git a/pkgs/by-name/nodebb/0001-add-node-gyp-to-dependencies.patch b/pkgs/by-name/nodebb/0001-add-node-gyp-to-dependencies.patch new file mode 100644 index 000000000..e4eae341f --- /dev/null +++ b/pkgs/by-name/nodebb/0001-add-node-gyp-to-dependencies.patch @@ -0,0 +1,59 @@ +From 893dd8a25ea9a9f76461f75243f336982baa3c08 Mon Sep 17 00:00:00 2001 +From: phanirithvij +Date: Sun, 29 Mar 2026 00:21:31 +0530 +Subject: [PATCH] add node-gyp to dependencies + +Signed-off-by: phanirithvij +--- + install/package.json | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/install/package.json b/install/package.json +index 42a5dda294..80ec7fc70e 100644 +--- a/install/package.json ++++ b/install/package.json +@@ -36,6 +36,7 @@ + "@isaacs/ttlcache": "2.1.4", + "@nodebb/spider-detector": "2.0.3", + "@popperjs/core": "2.11.8", ++ "@socket.io/redis-adapter": "8.3.0", + "@textcomplete/contenteditable": "0.1.13", + "@textcomplete/core": "0.1.13", + "@textcomplete/textarea": "0.1.13", +@@ -97,6 +98,7 @@ + "mousetrap": "1.6.5", + "multer": "2.1.1", + "nconf": "0.13.0", ++ "node-gyp": "^12.2.0", + "nodebb-plugin-2factor": "7.6.1", + "nodebb-plugin-composer-default": "10.3.28", + "nodebb-plugin-dbsearch": "6.4.1", +@@ -140,7 +142,6 @@ + "sitemap": "9.0.1", + "socket.io": "4.8.3", + "socket.io-client": "4.8.3", +- "@socket.io/redis-adapter": "8.3.0", + "sortablejs": "1.15.7", + "spdx-license-list": "6.11.0", + "terser-webpack-plugin": "5.4.0", +@@ -164,9 +165,9 @@ + "@apidevtools/swagger-parser": "10.1.0", + "@commitlint/cli": "20.5.0", + "@commitlint/config-angular": "20.5.0", +- "coveralls": "3.1.1", + "@eslint/js": "10.0.1", + "@stylistic/eslint-plugin": "5.10.0", ++ "coveralls": "3.1.1", + "eslint-config-nodebb": "2.0.1", + "globals": "17.4.0", + "grunt": "1.6.1", +@@ -204,4 +205,4 @@ + "url": "https://github.com/barisusakli" + } + ] +-} +\ No newline at end of file ++} +-- +2.53.0 + diff --git a/pkgs/by-name/nodebb/package-lock.json b/pkgs/by-name/nodebb/package-lock.json index 0b46acb31..11b84e939 100644 --- a/pkgs/by-name/nodebb/package-lock.json +++ b/pkgs/by-name/nodebb/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodebb", - "version": "4.9.2", + "version": "4.10.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nodebb", - "version": "4.9.2", + "version": "4.10.1", "license": "GPL-3.0", "dependencies": { "@adactive/bootstrap-tagsinput": "0.8.2", @@ -24,7 +24,7 @@ "ace-builds": "1.43.6", "archiver": "7.0.1", "async": "3.2.6", - "autoprefixer": "10.4.24", + "autoprefixer": "10.4.27", "bcryptjs": "3.0.3", "benchpressjs": "2.5.5", "body-parser": "2.2.2", @@ -44,17 +44,18 @@ "connect-redis": "9.0.0", "cookie-parser": "1.4.7", "cron": "4.4.0", + "cronstrue": "3.14.0", "cropperjs": "1.6.2", "csrf-sync": "4.2.1", "daemon": "1.1.0", "diff": "8.0.3", - "esbuild": "0.27.3", + "esbuild": "0.27.4", "express": "4.22.1", "express-session": "1.19.0", "express-useragent": "2.1.0", "fetch-cookie": "3.2.0", "file-loader": "6.2.0", - "fs-extra": "11.3.3", + "fs-extra": "11.3.4", "graceful-fs": "4.2.11", "helmet": "7.2.0", "html-to-text": "9.0.5", @@ -70,7 +71,7 @@ "jsonwebtoken": "9.0.3", "lodash": "4.17.23", "logrotate-stream": "0.2.9", - "lru-cache": "11.2.6", + "lru-cache": "11.2.7", "mime": "3.0.0", "mkdirp": "3.0.1", "mongodb": "7.1.0", @@ -78,30 +79,31 @@ "mousetrap": "1.6.5", "multer": "2.1.1", "nconf": "0.13.0", + "node-gyp": "^12.2.0", "nodebb-plugin-2factor": "7.6.1", - "nodebb-plugin-composer-default": "10.3.26", + "nodebb-plugin-composer-default": "10.3.28", "nodebb-plugin-dbsearch": "6.4.1", "nodebb-plugin-emoji": "6.0.6", "nodebb-plugin-emoji-android": "4.1.1", "nodebb-plugin-link-preview": "2.2.3", "nodebb-plugin-markdown": "13.2.4", - "nodebb-plugin-mentions": "4.8.17", + "nodebb-plugin-mentions": "4.8.18", "nodebb-plugin-spam-be-gone": "2.3.2", - "nodebb-plugin-web-push": "0.7.6", + "nodebb-plugin-web-push": "0.7.7", "nodebb-rewards-essentials": "1.0.2", - "nodebb-theme-harmony": "2.2.51", + "nodebb-theme-harmony": "2.2.62", "nodebb-theme-lavender": "7.1.21", "nodebb-theme-peace": "2.2.57", - "nodebb-theme-persona": "14.2.27", + "nodebb-theme-persona": "14.2.33", "nodebb-widget-essentials": "7.0.43", - "nodemailer": "8.0.1", + "nodemailer": "8.0.3", "nprogress": "0.2.0", "passport": "0.7.0", "passport-http-bearer": "1.0.1", "passport-local": "1.0.0", - "pg": "8.18.0", - "pg-cursor": "2.17.0", - "postcss": "8.5.6", + "pg": "8.20.0", + "pg-cursor": "2.19.0", + "postcss": "8.5.8", "postcss-clean": "1.2.0", "pretty": "^2.0.0", "progress-webpack-plugin": "1.0.16", @@ -113,12 +115,12 @@ "rtlcss": "4.3.0", "sanitize-html": "2.17.1", "sass": "1.98.0", - "satori": "0.19.2", + "satori": "0.25.0", "sbd": "^1.0.19", "semver": "7.7.4", "serve-favicon": "2.5.1", "sharp": "0.34.5", - "sitemap": "9.0.0", + "sitemap": "9.0.1", "socket.io": "4.8.3", "socket.io-client": "4.8.3", "sortablejs": "1.15.7", @@ -129,10 +131,10 @@ "timeago": "1.6.7", "tinycon": "0.6.8", "toobusy-js": "0.5.1", - "tough-cookie": "6.0.0", + "tough-cookie": "6.0.1", "undici": "^7.10.0", "validator": "13.15.26", - "webpack": "5.105.2", + "webpack": "5.105.4", "webpack-merge": "6.0.1", "winston": "3.19.0", "workerpool": "10.0.1", @@ -142,22 +144,22 @@ }, "devDependencies": { "@apidevtools/swagger-parser": "10.1.0", - "@commitlint/cli": "20.4.2", - "@commitlint/config-angular": "20.4.2", + "@commitlint/cli": "20.5.0", + "@commitlint/config-angular": "20.5.0", "@eslint/js": "10.0.1", - "@stylistic/eslint-plugin": "5.9.0", + "@stylistic/eslint-plugin": "5.10.0", "coveralls": "3.1.1", "eslint-config-nodebb": "2.0.1", - "globals": "17.3.0", + "globals": "17.4.0", "grunt": "1.6.1", "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", - "jsdom": "28.1.0", - "lint-staged": "16.2.7", + "jsdom": "29.0.0", + "lint-staged": "16.4.0", "mocha": "11.7.5", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", - "nyc": "17.1.0", + "nyc": "18.0.0", "smtp-server": "3.18.1" }, "engines": { @@ -167,13 +169,6 @@ "sass-embedded": "1.98.0" } }, - "node_modules/@acemir/cssom": { - "version": "0.9.31", - "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz", - "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==", - "dev": true, - "license": "MIT" - }, "node_modules/@adactive/bootstrap-tagsinput": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/@adactive/bootstrap-tagsinput/-/bootstrap-tagsinput-0.8.2.tgz", @@ -246,17 +241,20 @@ } }, "node_modules/@asamuzakjp/dom-selector": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", - "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.0.4.tgz", + "integrity": "sha512-jXR6x4AcT3eIrS2fSNAwJpwirOkGcd+E7F7CP3zjdTqz9B/2huHOL8YJZBgekKwLML+u7qB/6P1LXQuMScsx0w==", "dev": true, "license": "MIT", "dependencies": { "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", - "css-tree": "^3.1.0", + "css-tree": "^3.2.1", "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.6" + "lru-cache": "^11.2.7" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@asamuzakjp/nwsapi": { @@ -393,6 +391,13 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -466,23 +471,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", - "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, "license": "MIT", "dependencies": { @@ -573,17 +578,17 @@ } }, "node_modules/@commitlint/cli": { - "version": "20.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.4.2.tgz", - "integrity": "sha512-YjYSX2yj/WsVoxh9mNiymfFS2ADbg2EK4+1WAsMuckwKMCqJ5PDG0CJU/8GvmHWcv4VRB2V02KqSiecRksWqZQ==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.5.0.tgz", + "integrity": "sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/format": "^20.4.0", - "@commitlint/lint": "^20.4.2", - "@commitlint/load": "^20.4.0", - "@commitlint/read": "^20.4.0", - "@commitlint/types": "^20.4.0", + "@commitlint/format": "^20.5.0", + "@commitlint/lint": "^20.5.0", + "@commitlint/load": "^20.5.0", + "@commitlint/read": "^20.5.0", + "@commitlint/types": "^20.5.0", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, @@ -595,9 +600,9 @@ } }, "node_modules/@commitlint/config-angular": { - "version": "20.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-20.4.2.tgz", - "integrity": "sha512-aArQZyKytFSe6kUNsr8tzgYeRLSmoHPKcKC39Aasun3miDqVcHnrOMbo7y2CxSeaAex8k5Rn3/4f6/4nAqc4Ug==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-20.5.0.tgz", + "integrity": "sha512-AZ8foxHb8VBCpZywnIFxpXgrK6VMizZ957vlz8UEyaMZEzvP0F+RtQmTijHnVPaPVk/scS6EDp0/1sy1UszXoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -952,7 +957,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=20.19.0" }, @@ -961,9 +965,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.1.tgz", - "integrity": "sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.2.tgz", + "integrity": "sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA==", "dev": true, "funding": [ { @@ -1001,7 +1005,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=20.19.0" } @@ -1018,9 +1021,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz", - "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", "license": "MIT", "optional": true, "dependencies": { @@ -1028,9 +1031,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", - "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", "cpu": [ "ppc64" ], @@ -1044,9 +1047,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", - "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", "cpu": [ "arm" ], @@ -1060,9 +1063,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", - "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", "cpu": [ "arm64" ], @@ -1076,9 +1079,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", - "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", "cpu": [ "x64" ], @@ -1092,9 +1095,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", - "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", "cpu": [ "arm64" ], @@ -1108,9 +1111,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", - "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", "cpu": [ "x64" ], @@ -1124,9 +1127,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", - "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", "cpu": [ "arm64" ], @@ -1140,9 +1143,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", - "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", "cpu": [ "x64" ], @@ -1156,9 +1159,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", - "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", "cpu": [ "arm" ], @@ -1172,9 +1175,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", - "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", "cpu": [ "arm64" ], @@ -1188,9 +1191,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", - "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", "cpu": [ "ia32" ], @@ -1204,9 +1207,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", - "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", "cpu": [ "loong64" ], @@ -1220,9 +1223,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", - "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", "cpu": [ "mips64el" ], @@ -1236,9 +1239,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", - "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", "cpu": [ "ppc64" ], @@ -1252,9 +1255,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", - "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", "cpu": [ "riscv64" ], @@ -1268,9 +1271,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", - "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", "cpu": [ "s390x" ], @@ -1284,9 +1287,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", - "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", "cpu": [ "x64" ], @@ -1300,9 +1303,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", - "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", "cpu": [ "arm64" ], @@ -1316,9 +1319,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", - "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", "cpu": [ "x64" ], @@ -1332,9 +1335,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", - "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", "cpu": [ "arm64" ], @@ -1348,9 +1351,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", - "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", "cpu": [ "x64" ], @@ -1364,9 +1367,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", - "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", "cpu": [ "arm64" ], @@ -1380,9 +1383,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", - "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", "cpu": [ "x64" ], @@ -1396,9 +1399,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", - "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", "cpu": [ "arm64" ], @@ -1412,9 +1415,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", - "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", "cpu": [ "ia32" ], @@ -1428,9 +1431,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", - "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", "cpu": [ "x64" ], @@ -1481,6 +1484,7 @@ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -1491,6 +1495,7 @@ "integrity": "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/object-schema": "^3.0.3", "debug": "^4.3.1", @@ -1506,6 +1511,7 @@ "integrity": "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/core": "^1.1.1" }, @@ -1519,6 +1525,7 @@ "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -1532,7 +1539,6 @@ "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" }, @@ -1554,6 +1560,7 @@ "integrity": "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" } @@ -1564,6 +1571,7 @@ "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/core": "^1.1.1", "levn": "^0.4.1" @@ -1632,6 +1640,15 @@ "node": ">=6" } }, + "node_modules/@gar/promise-retry": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.3.tgz", + "integrity": "sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA==", + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/@github/webauthn-json": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@github/webauthn-json/-/webauthn-json-0.5.7.tgz", @@ -1648,6 +1665,7 @@ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18.0" } @@ -1658,6 +1676,7 @@ "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" @@ -1672,6 +1691,7 @@ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=12.22" }, @@ -1686,6 +1706,7 @@ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18" }, @@ -2176,6 +2197,18 @@ "node": ">=12" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@isaacs/ttlcache": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-2.1.4.tgz", @@ -2357,6 +2390,43 @@ "yarn": ">=1.17.3" } }, + "node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/@one-ini/wasm": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", @@ -2727,7 +2797,6 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -2750,7 +2819,6 @@ "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.11.0.tgz", "integrity": "sha512-GHoprlNQD51Xq2Ztd94HHV94MdFZQ3CVrpA04Fz8MVoHM0B7SlbmPEVIjwTbcv58z8QyjnrOuikS0rWF03k5dQ==", "license": "MIT", - "peer": true, "dependencies": { "cluster-key-slot": "1.1.2" }, @@ -2894,12 +2962,11 @@ } }, "node_modules/@stylistic/eslint-plugin": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.9.0.tgz", - "integrity": "sha512-FqqSkvDMYJReydrMhlugc71M76yLLQWNfmGq+SIlLa7N3kHp8Qq8i2PyWrVNAfjOyOIY+xv9XaaYwvVW7vroMA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.10.0.tgz", + "integrity": "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/types": "^8.56.0", @@ -2932,7 +2999,6 @@ "resolved": "https://registry.npmjs.org/@textcomplete/core/-/core-0.1.13.tgz", "integrity": "sha512-C4S+ihQU5HsKQ/TbsmS0e7hfPZtLZbEXj5NDUgRnhu/1Nezpu892bjNZGeErZm+R8iyDIT6wDu6EgIhng4M8eQ==", "license": "MIT", - "peer": true, "dependencies": { "eventemitter3": "^5.0.1" } @@ -2991,7 +3057,8 @@ "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/estree": { "version": "1.0.8", @@ -3016,7 +3083,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -3061,9 +3127,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.0.tgz", - "integrity": "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", + "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", "dev": true, "license": "MIT", "engines": { @@ -3284,7 +3350,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3352,7 +3417,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -3638,9 +3702,9 @@ "license": "MIT" }, "node_modules/autoprefixer": { - "version": "10.4.24", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", - "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", "funding": [ { "type": "opencollective", @@ -3658,7 +3722,7 @@ "license": "MIT", "dependencies": { "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001766", + "caniuse-lite": "^1.0.30001774", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -3718,7 +3782,6 @@ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "license": "Apache-2.0", - "peer": true, "peerDependencies": { "bare-abort-controller": "*" }, @@ -3729,9 +3792,9 @@ } }, "node_modules/bare-fs": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.5.tgz", - "integrity": "sha512-XvwYM6VZqKoqDll8BmSww5luA5eflDzY0uEFfBJtFKe4PAAtxBjU3YIxzIBzhyaEQBy1VXEQBto4cpN5RZJw+w==", + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.6.tgz", + "integrity": "sha512-1QovqDrR80Pmt5HPAsMsXTCFcDYr+NSUKW6nd6WO5v0JBmnItc/irNRzm2KOQ5oZ69P37y+AMujNyNtG+1Rggw==", "license": "Apache-2.0", "dependencies": { "bare-events": "^2.5.4", @@ -3753,9 +3816,9 @@ } }, "node_modules/bare-os": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.0.tgz", - "integrity": "sha512-Dc9/SlwfxkXIGYhvMQNUtKaXCaGkZYGcd1vuNUUADVqzu4/vQfvnMkYYOUnt2VwQ2AqKr/8qAVFRtwETljgeFg==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.2.tgz", + "integrity": "sha512-lMseYRMTzMrxPGfXkDwOWym2iv9dUMlTqpjXa0M+7ymI1TJKhxQ2jkDOK7y1EGvxuqJcXOoJ/HYEBxIlWObgjQ==", "license": "Apache-2.0", "engines": { "bare": ">=1.14.0" @@ -3771,19 +3834,23 @@ } }, "node_modules/bare-stream": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.1.tgz", - "integrity": "sha512-bSeR8RfvbRwDpD7HWZvn8M3uYNDrk7m9DQjYOFkENZlXW8Ju/MPaqUPQq5LqJ3kyjEm07siTaAQ7wBKCU59oHg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.11.0.tgz", + "integrity": "sha512-Y/+iQ49fL3rIn6w/AVxI/2+BRrpmzJvdWt5Jv8Za6Ngqc6V227c+pYjYYgLdpR3MwQ9ObVXD0ZrqoBztakM0rw==", "license": "Apache-2.0", "dependencies": { - "streamx": "^2.21.0", + "streamx": "^2.25.0", "teex": "^1.0.1" }, "peerDependencies": { + "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, "bare-buffer": { "optional": true }, @@ -3793,9 +3860,9 @@ } }, "node_modules/bare-url": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", - "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.0.tgz", + "integrity": "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==", "license": "Apache-2.0", "dependencies": { "bare-path": "^3.0.0" @@ -3840,9 +3907,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.8", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz", - "integrity": "sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==", + "version": "2.10.12", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.12.tgz", + "integrity": "sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -4048,7 +4115,6 @@ } ], "license": "MIT", - "peer": true, "peerDependencies": { "@popperjs/core": "^2.11.8" } @@ -4060,9 +4126,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -4116,7 +4182,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -4220,6 +4285,60 @@ "node": ">=6.0.0" } }, + "node_modules/cacache": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.4.tgz", + "integrity": "sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA==", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -4301,9 +4420,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001779", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001779.tgz", - "integrity": "sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA==", + "version": "1.0.30001781", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", + "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", "funding": [ { "type": "opencollective", @@ -4460,6 +4579,15 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", @@ -5274,6 +5402,15 @@ "url": "https://ko-fi.com/intcreator" } }, + "node_modules/cronstrue": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/cronstrue/-/cronstrue-3.14.0.tgz", + "integrity": "sha512-XnW4vuK/jPJjmTyDWiej1Zq36Od7ITwxaV2O1pzHZuyMVvdy7NAvyvIBzybt+idqSpfqYuoDG7uf/ocGtJVWxA==", + "license": "MIT", + "bin": { + "cronstrue": "bin/cli.js" + } + }, "node_modules/cropperjs": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.6.2.tgz", @@ -5366,7 +5503,6 @@ "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" @@ -5387,22 +5523,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cssstyle": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", - "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@asamuzakjp/css-color": "^5.0.1", - "@csstools/css-syntax-patches-for-csstree": "^1.0.28", - "css-tree": "^3.1.0", - "lru-cache": "^11.2.6" - }, - "engines": { - "node": ">=20" - } - }, "node_modules/cycle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", @@ -5503,7 +5623,8 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/deepmerge": { "version": "4.3.1", @@ -5753,9 +5874,9 @@ "license": "MIT" }, "node_modules/editorconfig/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -5792,9 +5913,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.313", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz", - "integrity": "sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==", + "version": "1.5.328", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz", + "integrity": "sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==", "license": "ISC" }, "node_modules/elliptic": { @@ -5935,9 +6056,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz", - "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -5963,7 +6084,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6051,9 +6171,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -6063,32 +6183,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" } }, "node_modules/escalade": { @@ -6119,9 +6239,9 @@ } }, "node_modules/eslint": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.3.tgz", - "integrity": "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz", + "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==", "dev": true, "license": "MIT", "peer": true, @@ -6129,7 +6249,7 @@ "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.3", - "@eslint/config-helpers": "^0.5.2", + "@eslint/config-helpers": "^0.5.3", "@eslint/core": "^1.1.1", "@eslint/plugin-kit": "^0.6.1", "@humanfs/node": "^0.16.6", @@ -6142,7 +6262,7 @@ "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", - "espree": "^11.1.1", + "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -6189,12 +6309,26 @@ "@stylistic/eslint-plugin": "^5.x" } }, + "node_modules/eslint-config-nodebb/node_modules/globals": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz", + "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-scope": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@types/esrecurse": "^4.3.1", "@types/estree": "^1.0.8", @@ -6227,6 +6361,7 @@ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -6244,6 +6379,7 @@ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" }, @@ -6257,6 +6393,7 @@ "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", @@ -6274,7 +6411,8 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/espree": { "version": "10.4.0", @@ -6314,6 +6452,7 @@ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -6348,6 +6487,7 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -6429,6 +6569,12 @@ "node": ">=0.10.0" } }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "license": "Apache-2.0" + }, "node_modules/express": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", @@ -6480,7 +6626,6 @@ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.19.0.tgz", "integrity": "sha512-0csaMkGq+vaiZTmSMMGkfdCOabYv192VbytFypcvI0MANrp+4i/7yEkJ0sbAEhycQjntaKGzYfjfXQyVb7BHMA==", "license": "MIT", - "peer": true, "dependencies": { "cookie": "~0.7.2", "cookie-signature": "~1.0.7", @@ -6692,7 +6837,8 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-uri": { "version": "3.1.0", @@ -6723,6 +6869,23 @@ "node": ">=0.4.0" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -6812,6 +6975,7 @@ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "flat-cache": "^4.0.0" }, @@ -6987,6 +7151,7 @@ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -6996,11 +7161,12 @@ } }, "node_modules/flatted": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz", - "integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/fn.name": { "version": "1.1.0", @@ -7137,9 +7303,9 @@ "license": "MIT" }, "node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -7150,6 +7316,18 @@ "node": ">=14.14" } }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -7327,6 +7505,7 @@ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -7347,9 +7526,9 @@ "license": "MIT" }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -7439,9 +7618,9 @@ } }, "node_modules/globals": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz", - "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", + "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", "dev": true, "license": "MIT", "engines": { @@ -7474,9 +7653,9 @@ "license": "MIT" }, "node_modules/globule/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": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -7701,9 +7880,9 @@ "license": "MIT" }, "node_modules/grunt/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": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8033,6 +8212,12 @@ "node": ">=16" } }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, "node_modules/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", @@ -8064,7 +8249,6 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, "license": "MIT", "dependencies": { "agent-base": "^7.1.0", @@ -8161,6 +8345,7 @@ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 4" } @@ -8273,6 +8458,15 @@ "dev": true, "license": "MIT" }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", @@ -8587,9 +8781,9 @@ } }, "node_modules/istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-3.0.0.tgz", + "integrity": "sha512-P7nLXRRlo7Sqinty6lNa7+4o9jBUYGpqtejqCOZKfgXlRoxY/QArflcB86YO500Ahj4pDJEG34JjMRbQgePLnQ==", "dev": true, "license": "ISC", "dependencies": { @@ -8597,87 +8791,30 @@ "cross-spawn": "^7.0.3", "istanbul-lib-coverage": "^3.2.0", "p-map": "^3.0.0", - "rimraf": "^3.0.0", + "rimraf": "^6.1.3", "uuid": "^8.3.2" }, "engines": { - "node": ">=8" + "node": "20 || >=22" } }, - "node_modules/istanbul-lib-processinfo/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==", - "dev": true, - "license": "MIT" - }, - "node_modules/istanbul-lib-processinfo/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==", + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/istanbul-lib-processinfo/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "license": "MIT", "bin": { @@ -8802,8 +8939,7 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/jquery-deserialize": { "version": "2.0.0", @@ -8921,36 +9057,36 @@ "license": "MIT" }, "node_modules/jsdom": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", - "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.0.0.tgz", + "integrity": "sha512-9FshNB6OepopZ08unmmGpsF7/qCjxGPbo3NbgfJAnPeHXnsODE9WWffXZtRFRFe0ntzaAOcSKNJFz8wiyvF1jQ==", "dev": true, "license": "MIT", "dependencies": { - "@acemir/cssom": "^0.9.31", - "@asamuzakjp/dom-selector": "^6.8.1", + "@asamuzakjp/css-color": "^5.0.1", + "@asamuzakjp/dom-selector": "^7.0.2", "@bramus/specificity": "^2.4.2", - "@exodus/bytes": "^1.11.0", - "cssstyle": "^6.0.1", + "@csstools/css-syntax-patches-for-csstree": "^1.1.1", + "@exodus/bytes": "^1.15.0", + "css-tree": "^3.2.1", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.7", "parse5": "^8.0.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^6.0.0", - "undici": "^7.21.0", + "tough-cookie": "^6.0.1", + "undici": "^7.24.3", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^16.0.0", + "whatwg-url": "^16.0.1", "xml-name-validator": "^5.0.0" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24.0.0" }, "peerDependencies": { "canvas": "^3.0.0" @@ -8978,7 +9114,8 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -9004,7 +9141,8 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -9159,6 +9297,7 @@ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "json-buffer": "3.0.1" } @@ -9257,6 +9396,7 @@ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -9350,19 +9490,18 @@ } }, "node_modules/lint-staged": { - "version": "16.2.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.7.tgz", - "integrity": "sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==", + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.4.0.tgz", + "integrity": "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^14.0.2", + "commander": "^14.0.3", "listr2": "^9.0.5", - "micromatch": "^4.0.8", - "nano-spawn": "^2.0.0", - "pidtree": "^0.6.0", + "picomatch": "^4.0.3", "string-argv": "^0.3.2", - "yaml": "^2.8.1" + "tinyexec": "^1.0.4", + "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -9852,9 +9991,9 @@ "license": "Apache-2.0" }, "node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -9895,6 +10034,38 @@ "semver": "bin/semver.js" } }, + "node_modules/make-fetch-happen": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.5.tgz", + "integrity": "sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg==", + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "@npmcli/redact": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -10055,9 +10226,9 @@ } }, "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -10176,6 +10347,119 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", + "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "iconv-lite": "^0.7.2" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.7.tgz", + "integrity": "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", + "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", + "license": "ISC", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", @@ -10253,9 +10537,9 @@ "license": "MIT" }, "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { @@ -10336,7 +10620,6 @@ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.1.0.tgz", "integrity": "sha512-kMfnKunbolQYwCIyrkxNJFB4Ypy91pYqua5NargS/f8ODNSJxT03ZU3n1JqL4mCzbSih8tvmMEMLpKTT7x5gCg==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^7.1.1", @@ -10527,19 +10810,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "license": "ISC" }, - "node_modules/nano-spawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz", - "integrity": "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" - } - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -10580,7 +10850,8 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/nconf": { "version": "0.13.0", @@ -10784,14 +11055,86 @@ } }, "node_modules/node-forge": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", - "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, + "node_modules/node-gyp": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.2.0.tgz", + "integrity": "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/node-jose": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/node-jose/-/node-jose-2.2.0.tgz", @@ -10856,10 +11199,16 @@ "yallist": "^3.0.2" } }, + "node_modules/nodebb-plugin-2factor/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, "node_modules/nodebb-plugin-composer-default": { - "version": "10.3.26", - "resolved": "https://registry.npmjs.org/nodebb-plugin-composer-default/-/nodebb-plugin-composer-default-10.3.26.tgz", - "integrity": "sha512-awuSRVGJR9ktxnbzGZMzgWahlHFtq/iH526+uGLjHZ+63Mt0ECwqMXimoe+/4Z+25DH43CNSftsoBR3+KfPT/A==", + "version": "10.3.28", + "resolved": "https://registry.npmjs.org/nodebb-plugin-composer-default/-/nodebb-plugin-composer-default-10.3.28.tgz", + "integrity": "sha512-L331n4gSAGVze0aHZHG80VPAIgxGI/JneGQQIAK3K1LTCKh7zJl07TGJyZlJFfhS+SjQVU1wxCgw2j17oNuRaA==", "license": "MIT", "dependencies": { "screenfull": "^5.0.2", @@ -10942,9 +11291,9 @@ } }, "node_modules/nodebb-plugin-mentions": { - "version": "4.8.17", - "resolved": "https://registry.npmjs.org/nodebb-plugin-mentions/-/nodebb-plugin-mentions-4.8.17.tgz", - "integrity": "sha512-G4CmH1g7a5pIplcYn+N8yHRpRCOxdTs0MegvUbd/laNdUN1cRkklQnm9kfONQY+U+fe8xcJcP2bwlfuEG2vxuQ==", + "version": "4.8.18", + "resolved": "https://registry.npmjs.org/nodebb-plugin-mentions/-/nodebb-plugin-mentions-4.8.18.tgz", + "integrity": "sha512-HF158CQ6eleY1tL5QQUZfxgGyFMKUm+d1NIknTl268Igemqq+tNHxPYFRCwz3XsG/d2qZhEnNjXEwQ2y2uH8Gw==", "license": "MIT", "dependencies": { "html-entities": "^2.3.2", @@ -10965,9 +11314,9 @@ } }, "node_modules/nodebb-plugin-web-push": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/nodebb-plugin-web-push/-/nodebb-plugin-web-push-0.7.6.tgz", - "integrity": "sha512-qcWK0SG97mrLTd/MgH6M8H0T+pt6qXtT8hmN/PRXFIGQ3C5mmjDgZ5yI8R3SYGM7z29+YT/pKtWp41TnWCm18w==", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/nodebb-plugin-web-push/-/nodebb-plugin-web-push-0.7.7.tgz", + "integrity": "sha512-g+Mx+N1xp+dV+zEaRoMhAP56VG7pgrrhz1yxbORlSufSTg8DQZTnUsf3iUCSWRh/S6KtkJqZomKpy+DGcHRzDg==", "license": "MIT", "dependencies": { "validator": "^13.12.0", @@ -10981,9 +11330,9 @@ "license": "BSD-2-Clause" }, "node_modules/nodebb-theme-harmony": { - "version": "2.2.51", - "resolved": "https://registry.npmjs.org/nodebb-theme-harmony/-/nodebb-theme-harmony-2.2.51.tgz", - "integrity": "sha512-g8q9a4a0yLq/IuP1WjtT9jvkBTbK4N1eYIZqdhvxCLyzJ1U1D10xmizvE2V8X0FSEHyklNRJSjPAo/jRuKsVDw==", + "version": "2.2.62", + "resolved": "https://registry.npmjs.org/nodebb-theme-harmony/-/nodebb-theme-harmony-2.2.62.tgz", + "integrity": "sha512-ZDnFQjR9DKseLkc6xKSYNnKhnOUV7TXi6oeKEeUTfpY05/Q6x2POFe4ZtX/3JJRG9youRQqlXSLG92309saoVw==", "license": "MIT", "dependencies": { "@fontsource/inter": "5.2.8", @@ -11026,9 +11375,9 @@ } }, "node_modules/nodebb-theme-persona": { - "version": "14.2.27", - "resolved": "https://registry.npmjs.org/nodebb-theme-persona/-/nodebb-theme-persona-14.2.27.tgz", - "integrity": "sha512-OLTjgtdHVEApn4dHDym4Hru1o4OBwVwgbrMALpgtVCqJ+H/2Bn49BzY/dZbBiTW6lsq0Vi1JLpjcir5H/ZOK4Q==", + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/nodebb-theme-persona/-/nodebb-theme-persona-14.2.33.tgz", + "integrity": "sha512-VF6tH+rIrz4JHEq+2etJwXBs/GP8Cyea96SiAjCclhGmez8OaRcEraQApT32rnFJP9njf9itICTCpkvn8dao9Q==", "license": "BSD-2-Clause", "dependencies": { "pulling": "^2.0.0" @@ -11041,9 +11390,9 @@ "license": "BSD-2-Clause" }, "node_modules/nodemailer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.1.tgz", - "integrity": "sha512-5kcldIXmaEjZcHR6F28IKGSgpmZHaF1IXLWFTG+Xh3S+Cce4MiakLtWY+PlBU69fLbRa8HlaGIrC/QolUpHkhg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.3.tgz", + "integrity": "sha512-JQNBqvK+bj3NMhUFR3wmCl3SYcOeMotDiwDBvIoCuQdF0PvlIY0BH+FJ2CG7u4cXKPChplE78oowlH/Otsc4ZQ==", "license": "MIT-0", "engines": { "node": ">=6.0.0" @@ -11113,9 +11462,9 @@ } }, "node_modules/nyc": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", - "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-18.0.0.tgz", + "integrity": "sha512-G5UyHinFkB1BxqGTrmZdB6uIYH0+v7ZnVssuflUDi+J+RhKWyAhRT1RCehBSI6jLFLuUUgFDyLt49mUtdO1XeQ==", "dev": true, "license": "ISC", "dependencies": { @@ -11128,11 +11477,11 @@ "find-up": "^4.1.0", "foreground-child": "^3.3.0", "get-package-type": "^0.1.0", - "glob": "^7.1.6", + "glob": "^13.0.6", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-hook": "^3.0.0", "istanbul-lib-instrument": "^6.0.2", - "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-processinfo": "^3.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.0.2", @@ -11141,17 +11490,17 @@ "p-map": "^3.0.0", "process-on-spawn": "^1.0.0", "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", + "rimraf": "^6.1.3", "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", + "spawn-wrap": "^3.0.0", + "test-exclude": "^8.0.0", "yargs": "^15.0.2" }, "bin": { "nyc": "bin/nyc.js" }, "engines": { - "node": ">=18" + "node": "20 || >=22" } }, "node_modules/nyc/node_modules/ansi-regex": { @@ -11164,24 +11513,6 @@ "node": ">=8" } }, - "node_modules/nyc/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==", - "dev": true, - "license": "MIT" - }, - "node_modules/nyc/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -11216,22 +11547,18 @@ } }, "node_modules/nyc/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -11260,19 +11587,6 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -11302,18 +11616,31 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "aggregate-error": "^3.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -11557,6 +11884,7 @@ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -11651,16 +11979,15 @@ } }, "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -12000,9 +12327,9 @@ "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", "license": "MIT" }, "node_modules/pause": { @@ -12027,15 +12354,14 @@ "license": "MIT" }, "node_modules/pg": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.18.0.tgz", - "integrity": "sha512-xqrUDL1b9MbkydY/s+VZ6v+xiMUmOUk7SS9d/1kpyQxoJ6U9AO1oIJyUWVZojbfe5Cc/oluutcgFG4L9RDP1iQ==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz", + "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==", "license": "MIT", - "peer": true, "dependencies": { - "pg-connection-string": "^2.11.0", - "pg-pool": "^3.11.0", - "pg-protocol": "^1.11.0", + "pg-connection-string": "^2.12.0", + "pg-pool": "^3.13.0", + "pg-protocol": "^1.13.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, @@ -12068,9 +12394,9 @@ "license": "MIT" }, "node_modules/pg-cursor": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.17.0.tgz", - "integrity": "sha512-2Uio3Xfl5ldwJfls+RgGL+YbPcKQncWACWjYQFqlamvHZ4HJFjZhhZBbqd7jQ2LIkZYSvU90bm2dNW0rno+QFQ==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.19.0.tgz", + "integrity": "sha512-J5cF1MUz7LRJ9emOqF/06QjabMHMZy587rSPF0UuA8rCwKeeYl2co8Pp+6k5UU9YrAYHMzWkLxilfZB0hqsWWw==", "license": "MIT", "peerDependencies": { "pg": "^8" @@ -12132,10 +12458,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "devOptional": true, + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", "engines": { "node": ">=12" @@ -12144,19 +12469,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -12258,9 +12570,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "funding": [ { "type": "opencollective", @@ -12276,7 +12588,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -12350,6 +12661,7 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8.0" } @@ -12368,6 +12680,15 @@ "node": ">=0.10.0" } }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -13058,9 +13379,9 @@ "license": "MIT" }, "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -13109,7 +13430,6 @@ "resolved": "https://registry.npmjs.org/redis/-/redis-5.11.0.tgz", "integrity": "sha512-YwXjATVDT+AuxcyfOwZn046aml9jMlQPvU1VXIlLDVAExe0u93aTfPYSeRgG4p9Q/Jlkj+LXJ1XEoFV+j2JKcQ==", "license": "MIT", - "peer": true, "dependencies": { "@redis/bloom": "5.11.0", "@redis/client": "5.11.0", @@ -13151,7 +13471,6 @@ "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.5.6.tgz", "integrity": "sha512-M3Svdwt6oSfyfQdqEr0L2HOJH2vK7GgCFx1NfAQvpWAT4+ljoT1L5S5cKT3dA9NJrxrOPDkdoTPWJnIrGCOcmw==", "license": "MIT", - "peer": true, "dependencies": { "cluster-key-slot": "1.1.2" }, @@ -13936,9 +14255,9 @@ } }, "node_modules/satori": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/satori/-/satori-0.19.2.tgz", - "integrity": "sha512-71plFHWcq6WJBM5sf/n0eHOmTBiKLUB/G8du7SmLTTLHKEKrV3TPHGKcEVIoyjnbhnjvu9HhLyF9MATB/zzL7g==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/satori/-/satori-0.25.0.tgz", + "integrity": "sha512-utINfLxrYrmSnLvxFT4ZwgwWa8KOjrz7ans32V5wItgHVmzESl/9i33nE38uG0miycab8hUqQtDlOpqrIpB/iw==", "license": "MPL-2.0", "dependencies": { "@shuding/opentype.js": "1.4.0-beta.0", @@ -13958,9 +14277,9 @@ } }, "node_modules/sax": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz", - "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", "license": "BlueOak-1.0.0", "engines": { "node": ">=11.0.0" @@ -14011,7 +14330,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14358,9 +14676,9 @@ } }, "node_modules/sitemap": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.0.tgz", - "integrity": "sha512-J/SU27FJ+I52TcDLKZzPRRVQUMj0Pp1i/HLb2lrkU+hrMLM+qdeRjdacrNxnSW48Waa3UcEOGOdX1+0Lob7TgA==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz", + "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==", "license": "MIT", "dependencies": { "@types/node": "^24.9.2", @@ -14421,6 +14739,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/smtp-server": { "version": "3.18.1", "resolved": "https://registry.npmjs.org/smtp-server/-/smtp-server-3.18.1.tgz", @@ -14524,9 +14852,9 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.5.tgz", - "integrity": "sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -14570,6 +14898,34 @@ } } }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/sortablejs": { "version": "1.15.7", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.7.tgz", @@ -14614,16 +14970,17 @@ } }, "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-3.0.0.tgz", + "integrity": "sha512-z+s5vv4KzFPJVddGab0xX2n7kQPGMdNUX5l9T8EJqsXdKTWpcxmAqWHpsgHEXoC1taGBCc7b79bi62M5kdbrxQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { + "cross-spawn": "^7.0.6", "foreground-child": "^2.0.0", "is-windows": "^1.0.2", "make-dir": "^3.0.0", - "rimraf": "^3.0.0", + "rimraf": "^6.1.3", "signal-exit": "^3.0.2", "which": "^2.0.1" }, @@ -14631,24 +14988,6 @@ "node": ">=8" } }, - "node_modules/spawn-wrap/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==", - "dev": true, - "license": "MIT" - }, - "node_modules/spawn-wrap/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/spawn-wrap/node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -14663,58 +15002,6 @@ "node": ">=8.0.0" } }, - "node_modules/spawn-wrap/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/spawn-wrap/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/spawn-wrap/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/spawn-wrap/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -14776,6 +15063,18 @@ "node": ">=0.10.0" } }, + "node_modules/ssri": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -14816,9 +15115,9 @@ } }, "node_modules/streamx": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", + "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", "license": "MIT", "dependencies": { "events-universal": "^1.0.0", @@ -15048,9 +15347,9 @@ } }, "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", "license": "MIT", "engines": { "node": ">=6" @@ -15060,6 +15359,22 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/tar": { + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz", + "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/tar-stream": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", @@ -15082,9 +15397,9 @@ } }, "node_modules/terser": { - "version": "5.46.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", - "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", + "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -15158,71 +15473,53 @@ "license": "MIT" }, "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-8.0.0.tgz", + "integrity": "sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==", "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "glob": "^13.0.6", + "minimatch": "^10.2.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/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==", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude/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==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": "20 || >=22" } }, "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/test-exclude/node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/text-decoder": { @@ -15373,22 +15670,38 @@ "node": ">=18" } }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/tldts": { - "version": "7.0.25", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.25.tgz", - "integrity": "sha512-keinCnPbwXEUG3ilrWQZU+CqcTTzHq9m2HhoUP2l7Xmi8l1LuijAXLpAJ5zRW+ifKTNscs4NdCkfkDCBYm352w==", + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.27.tgz", + "integrity": "sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==", "license": "MIT", "dependencies": { - "tldts-core": "^7.0.25" + "tldts-core": "^7.0.27" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.25", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.25.tgz", - "integrity": "sha512-ZjCZK0rppSBu7rjHYDYsEaMOIbbT+nWF57hKkv4IUmZWBNrBWBOjIElc0mKRgLM8bm7x/BBlof6t2gi/Oq/Asw==", + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.27.tgz", + "integrity": "sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==", "license": "MIT" }, "node_modules/to-regex-range": { @@ -15423,9 +15736,9 @@ } }, "node_modules/tough-cookie": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", - "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", "license": "BSD-3-Clause", "dependencies": { "tldts": "^7.0.5" @@ -15488,6 +15801,7 @@ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -15552,9 +15866,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -15659,9 +15973,9 @@ "license": "BSD-3-Clause" }, "node_modules/undici": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.3.tgz", - "integrity": "sha512-eJdUmK/Wrx2d+mnWWmwwLRyA7OQCkLap60sk3dOK4ViZR7DKwwptwuIvFBg2HaiP9ESaEdhtpSymQPvytpmkCA==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.6.tgz", + "integrity": "sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==", "license": "MIT", "engines": { "node": ">=20.18.1" @@ -15941,11 +16255,10 @@ } }, "node_modules/webpack": { - "version": "5.105.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz", - "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==", + "version": "5.105.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", + "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -15953,11 +16266,11 @@ "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", + "acorn": "^8.16.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.19.0", + "enhanced-resolve": "^5.20.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -15969,9 +16282,9 @@ "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.16", + "terser-webpack-plugin": "^5.3.17", "watchpack": "^2.5.1", - "webpack-sources": "^3.3.3" + "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" @@ -16209,6 +16522,7 @@ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -16423,15 +16737,18 @@ } }, "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } }, "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", "dev": true, "license": "ISC", "bin": { diff --git a/pkgs/by-name/nodebb/package.nix b/pkgs/by-name/nodebb/package.nix index f6498cd9e..ee1744a4e 100644 --- a/pkgs/by-name/nodebb/package.nix +++ b/pkgs/by-name/nodebb/package.nix @@ -11,23 +11,34 @@ buildNpmPackage (finalAttrs: { pname = "nodebb"; - version = "4.9.2"; + version = "4.10.1"; src = fetchFromGitHub { owner = "NodeBB"; repo = "NodeBB"; tag = "v${finalAttrs.version}"; - hash = "sha256-yPCxIcpwzGqKzDDGkTCw9l0uTRu5Eb0D6V/0YOgdcrA="; + hash = "sha256-QG55il+BeVdfmKrOvsyjULHUpySiYrWvgblO8OPsKM0="; postFetch = '' cp $out/install/package.json $out ''; }; + patches = [ + # sharp is failing to build from source + # node-gyp is missing from the install/package.json + ./0001-add-node-gyp-to-dependencies.patch + ]; + postPatch = '' cp ${./package-lock.json} ./package-lock.json + + # overrwrite the package.json to the patched version + cp install/package.json package.json ''; - npmDepsHash = "sha256-fEtxiYJD1wiQkrzoCuUoc/qhPYhpkY0OgybKTJkILO4="; + npmDepsHash = "sha256-o6waZ/LmvJ7fLpQk8Te4X6atV0wAABWyU7XOC4gxLjk="; + + makeCacheWritable = true; nativeBuildInputs = [ pkg-config ]; diff --git a/projects/NodeBB/services/nodebb/tests/postgresql.nix b/projects/NodeBB/services/nodebb/tests/postgresql.nix index 2f9a46baf..10b1c136c 100644 --- a/projects/NodeBB/services/nodebb/tests/postgresql.nix +++ b/projects/NodeBB/services/nodebb/tests/postgresql.nix @@ -6,8 +6,6 @@ { name = "NodeBB"; - interactive.sshBackdoor.enable = true; - nodes.machine = { imports = [ sources.modules.ngipkgs @@ -26,4 +24,10 @@ machine.succeed("curl -v ${nodes.machine.services.nodebb.settings.url} >&2") ''; + + # Debug interactively with: + # - nix build -f . projects.NodeBB.tests.postgresql.driverInteractive -L && ./result/bin/nixos-test-driver + # - start_all()/run_tests() + # ssh -o User=root vsock%3 (can also do vsock/3, but % works with scp etc.) + interactive.sshBackdoor.enable = true; } diff --git a/projects/NodeBB/services/nodebb/tests/redis.nix b/projects/NodeBB/services/nodebb/tests/redis.nix index 41359be30..f762bc187 100644 --- a/projects/NodeBB/services/nodebb/tests/redis.nix +++ b/projects/NodeBB/services/nodebb/tests/redis.nix @@ -6,8 +6,6 @@ { name = "NodeBB"; - interactive.sshBackdoor.enable = true; - nodes.machine = { imports = [ sources.modules.ngipkgs @@ -26,4 +24,10 @@ machine.succeed("curl -v ${nodes.machine.services.nodebb.settings.url} >&2") ''; + + # Debug interactively with: + # - nix build -f . projects.NodeBB.tests.redis.driverInteractive -L && ./result/bin/nixos-test-driver + # - start_all()/run_tests() + # ssh -o User=root vsock%3 (can also do vsock/3, but % works with scp etc.) + interactive.sshBackdoor.enable = true; } From 90d95c11ab9fac0395a2bbf3cfa9364161f34b21 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sun, 29 Mar 2026 12:28:32 +0530 Subject: [PATCH 22/37] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'buildbot-nix': 'github:nix-community/buildbot-nix/0239dd9a76c14ed7baa2ca40ae89c498e8dac6e7?narHash=sha256-8oqnieGvMp8VbvU8QbzwvFuxHDJ9xm2kVzS6segXy10%3D' (2026-03-22) → 'github:nix-community/buildbot-nix/1865dc8516575d09188f30934d944b57aa3cb3d4?narHash=sha256-85Ds/QjrWIqoCMWwetYsDB82QukQUQHzswjQKOo6WZ8%3D' (2026-03-29) • Updated input 'buildbot-nix/hercules-ci-effects': 'github:hercules-ci/hercules-ci-effects/0b152e0f7c5cc265a529cd63374b80e2771b207b?narHash=sha256-HPBNYf7HiKtBVy7/69vKpLYHX6wTcUxndxmybzDlXP8%3D' (2026-02-15) → 'github:hercules-ci/hercules-ci-effects/554f6ed448ca74c00aa2371cde901ae1e73005b9?narHash=sha256-neu7ixXHjV3LobVjOndkL97u%2B6UF6Yoh%2BCUnzX7kUBQ%3D' (2026-03-15) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/fdc7b8f7b30fdbedec91b71ed82f36e1637483ed?narHash=sha256-a%2B%2BtZ1RQsDb1I0NHrFwdGuRlR5TORvCEUksM459wKUA%3D' (2026-03-23) → 'github:NixOS/nixpkgs/832efc09b4caf6b4569fbf9dc01bec3082a00611?narHash=sha256-HaThtroVD9wRdx7KQk0B75JmFcXlMUoEdDFNOMOlsOs%3D' (2026-03-27) • Updated input 'opam-repository': 'github:ocaml/opam-repository/b2a1270dba57f3ceb38426939f9780c38c181b3c?narHash=sha256-DEPWH5A/yTeTdCedo%2BGHMZpfDp7d6RsKv0itK11AOQs%3D' (2026-03-23) → 'github:ocaml/opam-repository/0cc61fc5fe1a2fdbc1fdd94c11a4eb8e12dfe1a3?narHash=sha256-2R7oqIc/fbMq3QxY4siyTXdliELQ4xJWxytWWEn988E%3D' (2026-03-29) • Updated input 'sops-nix': 'github:Mic92/sops-nix/614e256310e0a4f8a9ccae3fa80c11844fba7042?narHash=sha256-fhG4JAcLgjKwt%2BXHbjs8brpWnyKUfU4LikLm3s0Q/ic%3D' (2026-03-23) → 'github:Mic92/sops-nix/8adb84861fe70e131d44e1e33c426a51e2e0bfa5?narHash=sha256-D%2BtgywBHldTc0klWCIC49%2B6Zlp57Y4GGwxP1CqfxZrY%3D' (2026-03-29) --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 0d2a49fcd..1506088fa 100644 --- a/flake.lock +++ b/flake.lock @@ -12,11 +12,11 @@ ] }, "locked": { - "lastModified": 1774153455, - "narHash": "sha256-8oqnieGvMp8VbvU8QbzwvFuxHDJ9xm2kVzS6segXy10=", + "lastModified": 1774759126, + "narHash": "sha256-85Ds/QjrWIqoCMWwetYsDB82QukQUQHzswjQKOo6WZ8=", "owner": "nix-community", "repo": "buildbot-nix", - "rev": "0239dd9a76c14ed7baa2ca40ae89c498e8dac6e7", + "rev": "1865dc8516575d09188f30934d944b57aa3cb3d4", "type": "github" }, "original": { @@ -151,11 +151,11 @@ ] }, "locked": { - "lastModified": 1771131391, - "narHash": "sha256-HPBNYf7HiKtBVy7/69vKpLYHX6wTcUxndxmybzDlXP8=", + "lastModified": 1773550609, + "narHash": "sha256-neu7ixXHjV3LobVjOndkL97u+6UF6Yoh+CUnzX7kUBQ=", "owner": "hercules-ci", "repo": "hercules-ci-effects", - "rev": "0b152e0f7c5cc265a529cd63374b80e2771b207b", + "rev": "554f6ed448ca74c00aa2371cde901ae1e73005b9", "type": "github" }, "original": { @@ -214,11 +214,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1774273680, - "narHash": "sha256-a++tZ1RQsDb1I0NHrFwdGuRlR5TORvCEUksM459wKUA=", + "lastModified": 1774610258, + "narHash": "sha256-HaThtroVD9wRdx7KQk0B75JmFcXlMUoEdDFNOMOlsOs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fdc7b8f7b30fdbedec91b71ed82f36e1637483ed", + "rev": "832efc09b4caf6b4569fbf9dc01bec3082a00611", "type": "github" }, "original": { @@ -282,11 +282,11 @@ "opam-repository": { "flake": false, "locked": { - "lastModified": 1774273360, - "narHash": "sha256-DEPWH5A/yTeTdCedo+GHMZpfDp7d6RsKv0itK11AOQs=", + "lastModified": 1774743430, + "narHash": "sha256-2R7oqIc/fbMq3QxY4siyTXdliELQ4xJWxytWWEn988E=", "owner": "ocaml", "repo": "opam-repository", - "rev": "b2a1270dba57f3ceb38426939f9780c38c181b3c", + "rev": "0cc61fc5fe1a2fdbc1fdd94c11a4eb8e12dfe1a3", "type": "github" }, "original": { @@ -388,11 +388,11 @@ ] }, "locked": { - "lastModified": 1774303811, - "narHash": "sha256-fhG4JAcLgjKwt+XHbjs8brpWnyKUfU4LikLm3s0Q/ic=", + "lastModified": 1774760784, + "narHash": "sha256-D+tgywBHldTc0klWCIC49+6Zlp57Y4GGwxP1CqfxZrY=", "owner": "Mic92", "repo": "sops-nix", - "rev": "614e256310e0a4f8a9ccae3fa80c11844fba7042", + "rev": "8adb84861fe70e131d44e1e33c426a51e2e0bfa5", "type": "github" }, "original": { From 3bf55cac2c13bc0aed81e184e2282226c89ee7b1 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sun, 29 Mar 2026 15:16:28 +0530 Subject: [PATCH 23/37] overview: fix build Signed-off-by: phanirithvij --- manuals/default.nix | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/manuals/default.nix b/manuals/default.nix index 61881ad7b..b84db7c8c 100644 --- a/manuals/default.nix +++ b/manuals/default.nix @@ -1,5 +1,6 @@ { callPackage, + fetchFromGitHub, fetchurl, gnused, imagemagick, @@ -14,6 +15,23 @@ ... }: let + python = python3.override { + packageOverrides = final: prev: { + # nixpkgs PR https://github.com/NixOS/nixpkgs/pull/504645 + sphinx-last-updated-by-git = prev.sphinx-last-updated-by-git.overridePythonAttrs { + version = "0.3.8-unstable-2026-03-22"; + src = fetchFromGitHub { + owner = "mgeier"; + repo = "sphinx-last-updated-by-git"; + rev = "8d4eef2561996319e6f785b4faa914a1e6545476"; + hash = "sha256-30pZiqWs6Da+O8j08EIHrUoiJfJUPT6FdDiPBjmvRL8="; + fetchSubmodules = true; + leaveDotGit = true; + }; + }; + }; + }; + options = callPackage ./Options.nix { }; common = stdenv.mkDerivation (finalAttrs: { @@ -98,7 +116,7 @@ let hash = "sha256-m5f2WVVj1b7dyxBle/Ug959DAJ7PYinK0OlkD/zxh0s="; }; }; - pythonPackages = python3.withPackages ( + pythonPackages = python.withPackages ( pyPkgs: with pyPkgs; [ linkify-it-py myst-parser From de551eeff4f760f1222855d22ac9bf39c241db96 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Mon, 30 Mar 2026 13:55:55 +0530 Subject: [PATCH 24/37] projects(CryptoLyzer): update and vendor 1.1.0 nixpkgs pr 504919 Signed-off-by: phanirithvij --- pkgs/by-name/cryptodatahub/package.nix | 61 ++++++++++++++++ .../cryptolyzer/fix-dirs-exclude.patch | 27 ++++++++ pkgs/by-name/cryptolyzer/package.nix | 69 +++++++++++++++++++ pkgs/by-name/cryptoparser/package.nix | 67 ++++++++++++++++++ projects/CryptoLyzer/programs/module.nix | 2 +- 5 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 pkgs/by-name/cryptodatahub/package.nix create mode 100644 pkgs/by-name/cryptolyzer/fix-dirs-exclude.patch create mode 100644 pkgs/by-name/cryptolyzer/package.nix create mode 100644 pkgs/by-name/cryptoparser/package.nix diff --git a/pkgs/by-name/cryptodatahub/package.nix b/pkgs/by-name/cryptodatahub/package.nix new file mode 100644 index 000000000..376b8246d --- /dev/null +++ b/pkgs/by-name/cryptodatahub/package.nix @@ -0,0 +1,61 @@ +{ + lib, + fetchFromGitLab, + python3, +}: + +python3.pkgs.buildPythonPackage (finalAttrs: { + pname = "cryptodatahub"; + version = "1.1.0"; + pyproject = true; + + src = fetchFromGitLab { + owner = "coroner"; + repo = "cryptodatahub"; + tag = "v${finalAttrs.version}"; + hash = "sha256-Tz2VbWS5/sGjRsOKR7eWpWAJVNv1QMSjkepI7fVZq6w="; + }; + + build-system = with python3.pkgs; [ + setuptools + setuptools-scm + ]; + + dependencies = with python3.pkgs; [ + asn1crypto + attrs + python-dateutil + urllib3 + ]; + + nativeCheckInputs = with python3.pkgs; [ + beautifulsoup4 + pyfakefs + pytestCheckHook + ]; + + pythonImportsCheck = [ "cryptodatahub" ]; + + disabledTests = [ + # fails due to certificate expiry + # see https://gitlab.com/coroner/cryptodatahub/-/work_items/38 + "test_validity" + # pytest incorrectly collects abstract base classes + "TestClasses" + ]; + + disabledTestPaths = [ + # failing tests + "test/updaters/test_common.py" + # Tests require network access + "test/common/test_utils.py" + ]; + + meta = { + description = "Repository of cryptography-related data"; + homepage = "https://gitlab.com/coroner/cryptodatahub"; + changelog = "https://gitlab.com/coroner/cryptodatahub/-/blob/${finalAttrs.src.tag}/CHANGELOG.rst"; + license = lib.licenses.mpl20; + teams = with lib.teams; [ ngi ]; + }; +}) diff --git a/pkgs/by-name/cryptolyzer/fix-dirs-exclude.patch b/pkgs/by-name/cryptolyzer/fix-dirs-exclude.patch new file mode 100644 index 000000000..0455c892b --- /dev/null +++ b/pkgs/by-name/cryptolyzer/fix-dirs-exclude.patch @@ -0,0 +1,27 @@ +From 5ba89bc0bcc23fc7e8cd3eefb2d78b5a63f4fc66 Mon Sep 17 00:00:00 2001 +From: Ivan Mincik +Date: Wed, 17 Sep 2025 14:44:15 +0200 +Subject: [PATCH] Fix directories exclude from package + +* correctly exclude submodules directory +* also exclude docs directory +--- + pyproject.toml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/pyproject.toml b/pyproject.toml +index 96a0fa89..a26ee257 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -106,7 +106,7 @@ technical_name = 'cryptolyzer' + license-files = ['LICENSE.txt'] + + [tool.setuptools.packages.find] +-exclude = ['submodules'] ++exclude = ['submodules*', 'docs'] + + [tool.tox] + envlist = [ +-- +GitLab + diff --git a/pkgs/by-name/cryptolyzer/package.nix b/pkgs/by-name/cryptolyzer/package.nix new file mode 100644 index 000000000..59239804c --- /dev/null +++ b/pkgs/by-name/cryptolyzer/package.nix @@ -0,0 +1,69 @@ +{ + lib, + fetchFromGitLab, + python3, + cryptoparser, +}: + +python3.pkgs.buildPythonApplication (finalAttrs: { + pname = "cryptolyzer"; + version = "1.1.0"; + pyproject = true; + + src = fetchFromGitLab { + owner = "coroner"; + repo = "cryptolyzer"; + tag = "v${finalAttrs.version}"; + hash = "sha256-qfE6/jHJD+I2AeIl3uUcGVkAteAHSvZquLvh2fCxJB0="; + }; + + patches = [ + # https://gitlab.com/coroner/cryptolyzer/-/merge_requests/4 + ./fix-dirs-exclude.patch + ]; + + pythonRemoveDeps = [ "bs4" ]; + + build-system = with python3.pkgs; [ + setuptools + setuptools-scm + ]; + + dependencies = [ + cryptoparser + ] + ++ (with python3.pkgs; [ + attrs + beautifulsoup4 + certvalidator + colorama + dnspython + pathlib2 + pyfakefs + python-dateutil + requests + urllib3 + ]); + + # Tests require networking + doCheck = false; + + postInstall = '' + find $out -name "__pycache__" -type d | xargs rm -rv + + # Prevent creating more binary byte code later (e.g. during + # pythonImportsCheck) + export PYTHONDONTWRITEBYTECODE=1 + ''; + + pythonImportsCheck = [ "cryptolyzer" ]; + + meta = { + description = "Cryptographic protocol analyzer"; + homepage = "https://gitlab.com/coroner/cryptolyzer"; + changelog = "https://gitlab.com/coroner/cryptolyzer/-/blob/v${finalAttrs.version}/CHANGELOG.md"; + license = lib.licenses.mpl20; + mainProgram = "cryptolyze"; + teams = with lib.teams; [ ngi ]; + }; +}) diff --git a/pkgs/by-name/cryptoparser/package.nix b/pkgs/by-name/cryptoparser/package.nix new file mode 100644 index 000000000..084e4fe48 --- /dev/null +++ b/pkgs/by-name/cryptoparser/package.nix @@ -0,0 +1,67 @@ +{ + lib, + fetchFromGitLab, + fetchpatch2, + python3, + cryptodatahub, +}: + +python3.pkgs.buildPythonPackage (finalAttrs: { + pname = "cryptoparser"; + version = "1.1.0"; + pyproject = true; + + src = fetchFromGitLab { + owner = "coroner"; + repo = "cryptoparser"; + tag = "v${finalAttrs.version}"; + hash = "sha256-Zd305BFM3G8LMQqDwtbwRPy6ooNXJ61UzWBwVewh0F4="; + }; + + patches = [ + (fetchpatch2 { + url = "https://gitlab.com/coroner/cryptoparser/-/merge_requests/2.diff"; + hash = "sha256-T8dK6OMR41XUMrZ6B7ZybEtljZJOR2QbCiZl04dT3wA="; + }) + ]; + + build-system = with python3.pkgs; [ + setuptools + setuptools-scm + ]; + + dependencies = [ + cryptodatahub + ] + ++ (with python3.pkgs; [ + asn1crypto + attrs + urllib3 + ]); + + env.PYTHONDONTWRITEBYTECODE = 1; + + nativeCheckInputs = with python3.pkgs; [ + pyfakefs + pytestCheckHook + ]; + + disabledTests = [ + # pytest incorrectly collects abstract base classes + "TestCasesBasesHttpHeader" + ]; + + postInstall = '' + find $out -name __pycache__ -type d | xargs rm -rv + ''; + + pythonImportsCheck = [ "cryptoparser" ]; + + meta = { + description = "Security protocol parser and generator"; + homepage = "https://gitlab.com/coroner/cryptoparser"; + changelog = "https://gitlab.com/coroner/cryptoparser/-/blob/${finalAttrs.src.tag}/CHANGELOG.md"; + license = lib.licenses.mpl20; + teams = with lib.teams; [ ngi ]; + }; +}) diff --git a/projects/CryptoLyzer/programs/module.nix b/projects/CryptoLyzer/programs/module.nix index fe95043f2..f107076e2 100644 --- a/projects/CryptoLyzer/programs/module.nix +++ b/projects/CryptoLyzer/programs/module.nix @@ -10,7 +10,7 @@ in { options.programs.cryptolyzer = { enable = lib.mkEnableOption "CryptoLyzer"; - package = lib.mkPackageOption pkgs [ "python3Packages" "cryptolyzer" ] { }; + package = lib.mkPackageOption pkgs [ "cryptolyzer" ] { }; }; config = lib.mkIf cfg.enable { From 2c3d190e5f59389e9128b38468a3e74a2e7720bd Mon Sep 17 00:00:00 2001 From: eljamm Date: Mon, 30 Mar 2026 16:02:23 +0200 Subject: [PATCH 25/37] projects(PdfDing): unbreak tests --- pkgs/by-name/pdfding/package.nix | 2 +- projects/PdfDing/default.nix | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/pkgs/by-name/pdfding/package.nix b/pkgs/by-name/pdfding/package.nix index f9f66c85a..4c9083766 100644 --- a/pkgs/by-name/pdfding/package.nix +++ b/pkgs/by-name/pdfding/package.nix @@ -172,7 +172,7 @@ python.pkgs.buildPythonPackage (finalAttrs: { passthru = { inherit python; - tests = nixosTests.pdfding; + # tests = nixosTests.pdfding; # NOTE: already tested frontend = callPackage ./frontend.nix { }; updateScript = ./update.sh; }; diff --git a/projects/PdfDing/default.nix b/projects/PdfDing/default.nix index 1446b5cd8..bbac37b53 100644 --- a/projects/PdfDing/default.nix +++ b/projects/PdfDing/default.nix @@ -4,11 +4,6 @@ sources, ... }@args: -let - brokenReason = '' - pdfding derivation is broken in nixpkgs, fix at https://github.com/NixOS/nixpkgs/pull/496164 - ''; -in { metadata = { summary = "Web-based selfhosted PDF manager, viewer and editor"; @@ -37,19 +32,16 @@ in module = ./services/pdfding/examples/basic.nix; description = "Sqlite default service"; tests.basic.module = ./services/pdfding/tests/basic.nix; - tests.basic.problem.broken.reason = brokenReason; }; postgres = { module = ./services/pdfding/examples/postgres.nix; description = "Postgres and consume feature"; tests.postgres.module = ./services/pdfding/tests/postgres.nix; - tests.postgres.problem.broken.reason = brokenReason; }; s3-backups = { module = ./services/pdfding/examples/s3-backups.nix; description = "Backup feature of pdfding"; tests.s3-backups.module = ./services/pdfding/tests/s3-backups.nix; - tests.s3-backups.problem.broken.reason = brokenReason; }; }; links = { @@ -63,7 +55,6 @@ in # e2e not tied to an example nixos.tests.e2e.module = pkgs.nixosTests.pdfding.e2e; - nixos.tests.e2e.problem.broken.reason = brokenReason; nixos.demo.vm = { module = ./demo/module.nix; @@ -94,6 +85,5 @@ in } ]; tests.basic.module = ./services/pdfding/tests/basic.nix; - tests.basic.problem.broken.reason = brokenReason; }; } From 0e27303a8fa06b7a7246530eba0611bfa32beafe Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Mon, 30 Mar 2026 20:44:22 +0530 Subject: [PATCH 26/37] projects(kbin): fix nixos test Signed-off-by: phanirithvij --- pkgs/by-name/kbin-backend/package.nix | 47 ++++++++++++--------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/pkgs/by-name/kbin-backend/package.nix b/pkgs/by-name/kbin-backend/package.nix index 6c209095a..984f5ba32 100644 --- a/pkgs/by-name/kbin-backend/package.nix +++ b/pkgs/by-name/kbin-backend/package.nix @@ -15,33 +15,19 @@ let optionalString ; - php = php82.override { - packageOverrides = final: prev: { - extensions = prev.extensions // { - # newer versions don't seem to work with kbin - redis = prev.extensions.redis.overrideAttrs ( - finalAttrs: previousAttrs: { - version = "6.0.2"; - src = fetchFromGitHub { - repo = "phpredis"; - owner = "phpredis"; - rev = finalAttrs.version; - hash = "sha256-Ie31zak6Rqxm2+jGXWg6KN4czHe9e+190jZRQ5VoB+M="; - }; - } - ); - }; - }; - }; + # NOTE: php override with `packageOverrides` no longer works + # documentation in nixpkgs php framework is outdated + php = php82; in # NOTE: when updating this: # - also update the `kbin-frontend` yarn deps hash and its `package.json` +# - project seems dead https://codeberg.org/Kbin/kbin-core/issues/1425 and last commit on Feb 2024 php.buildComposerProject ( finalAttrs: let pname = "kbin"; - baseVersion = "0.0.1"; - version = "0.0.1-unstable-2024-02-05"; + # realVersion = "0.0.1-unstable-2024-02-05"; + version = "0.0.1"; in { inherit pname version; @@ -83,7 +69,19 @@ php.buildComposerProject ( enabled ++ (with all; [ amqp - redis + (redis.overrideAttrs ( + finalAttrs: previousAttrs: { + # newer versions don't seem to work with kbin + # https://github.com/phpredis/phpredis/issues/2564 + version = "6.0.2"; + src = fetchFromGitHub { + repo = "phpredis"; + owner = "phpredis"; + rev = finalAttrs.version; + hash = "sha256-Ie31zak6Rqxm2+jGXWg6KN4czHe9e+190jZRQ5VoB+M="; + }; + } + )) ]) ); @@ -104,11 +102,6 @@ php.buildComposerProject ( | sponge config/packages/oneup_flysystem.yaml ''); - preBuild = '' - # composer does not support unstable versioning scheme - export version="${baseVersion}" - ''; - installCheckPhase = '' runHook preInstallCheck @@ -128,7 +121,7 @@ php.buildComposerProject ( read -r input_tag if [ "$input_tag" = 0 ] then - printf '%s' ${baseVersion} + printf '%s' ${version} else printf '%s' "$input_tag" fi From 026036d01dcdbd99f55c724a6fe76f52e915e4de Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Wed, 1 Apr 2026 14:14:12 +0530 Subject: [PATCH 27/37] pkgs/pdfding: 1.6.3 -> 1.7.1 Signed-off-by: phanirithvij --- pkgs/by-name/pdfding/frontend.nix | 10 +++++----- pkgs/by-name/pdfding/package.nix | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkgs/by-name/pdfding/frontend.nix b/pkgs/by-name/pdfding/frontend.nix index dcdb4b06b..7e10dda15 100644 --- a/pkgs/by-name/pdfding/frontend.nix +++ b/pkgs/by-name/pdfding/frontend.nix @@ -9,8 +9,8 @@ nodejs, }: let - pdfjsVersion = "5.4.394"; # see update script - pdfjsHash = "sha256-pd7xwfvR9U1bHT5eblszYU3YJQwQwhuyDDiNj+fnyaQ="; + pdfjsVersion = "5.5.207"; # see update script + pdfjsHash = "sha256-HikisEa6L+BqsG6imgWhV+4J46BluU5zqU1nFZAG0eM="; pdfjs = fetchzip { url = "https://github.com/mozilla/pdf.js/releases/download/v${pdfjsVersion}/pdfjs-${pdfjsVersion}-dist.zip"; hash = pdfjsHash; @@ -27,18 +27,18 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "pdfding-frontend"; - version = "1.6.3"; + version = "1.7.1"; src = fetchFromGitHub { owner = "mrmn2"; repo = "PdfDing"; tag = "v${finalAttrs.version}"; - hash = "sha256-Qfw5urcUsVMxaVeVQeZkG8x5aK29y1HrcRY69AbdUXA="; + hash = "sha256-T3Y9eWwBVxGPISZ3EZndAR6mwsq4g67RRCPpoZPuh+0="; }; npmDeps = fetchNpmDeps { inherit (finalAttrs) src; name = "pdfding-frontend-${finalAttrs.version}-npm-deps"; - hash = "sha256-XsaVnl7JNitRVDVxk82jy3/P81TgVK4EoXIrWSBPDVQ="; + hash = "sha256-an4KKKx65ehCm1YAlwLWYAW8pQMgB4HdDERqC/hfQi0="; }; nativeBuildInputs = [ diff --git a/pkgs/by-name/pdfding/package.nix b/pkgs/by-name/pdfding/package.nix index 4c9083766..c4de5d936 100644 --- a/pkgs/by-name/pdfding/package.nix +++ b/pkgs/by-name/pdfding/package.nix @@ -12,12 +12,12 @@ let in python.pkgs.buildPythonPackage (finalAttrs: { pname = "pdfding"; - version = "1.6.3"; + version = "1.7.1"; src = fetchFromGitHub { owner = "mrmn2"; repo = "PdfDing"; tag = "v${finalAttrs.version}"; - hash = "sha256-Qfw5urcUsVMxaVeVQeZkG8x5aK29y1HrcRY69AbdUXA="; + hash = "sha256-T3Y9eWwBVxGPISZ3EZndAR6mwsq4g67RRCPpoZPuh+0="; }; pyproject = true; From ba5bddc467d14038804e7a5f75d640475e6129ed Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Mon, 6 Apr 2026 11:53:29 +0530 Subject: [PATCH 28/37] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'buildbot-nix': 'github:nix-community/buildbot-nix/1865dc8516575d09188f30934d944b57aa3cb3d4?narHash=sha256-85Ds/QjrWIqoCMWwetYsDB82QukQUQHzswjQKOo6WZ8%3D' (2026-03-29) → 'github:nix-community/buildbot-nix/19a89fd4c890433dab7062672ff95efe0128db3c?narHash=sha256-BdSvfgE5ryOYqOY7Y9p5wkJjAzF0IJSBvR79AaxYMbI%3D' (2026-04-05) • Updated input 'buildbot-nix/flake-parts': 'github:hercules-ci/flake-parts/f20dc5d9b8027381c474144ecabc9034d6a839a3?narHash=sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0%3D' (2026-03-01) → 'github:hercules-ci/flake-parts/3107b77cd68437b9a76194f0f7f9c55f2329ca5b?narHash=sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA%3D' (2026-04-01) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/832efc09b4caf6b4569fbf9dc01bec3082a00611?narHash=sha256-HaThtroVD9wRdx7KQk0B75JmFcXlMUoEdDFNOMOlsOs%3D' (2026-03-27) → 'github:NixOS/nixpkgs/5e11f7acce6c3469bef9df154d78534fa7ae8b6c?narHash=sha256-cGyKiTspHEUx3QwAnV3RfyT%2BVOXhHLs%2BNEr17HU34Wo%3D' (2026-04-05) • Updated input 'opam-repository': 'github:ocaml/opam-repository/0cc61fc5fe1a2fdbc1fdd94c11a4eb8e12dfe1a3?narHash=sha256-2R7oqIc/fbMq3QxY4siyTXdliELQ4xJWxytWWEn988E%3D' (2026-03-29) → 'github:ocaml/opam-repository/58be49813ccd4678f5762ae269409e93bce1ce7c?narHash=sha256-vKPg1fjfcIfNsNcQbh6dJtXOXwtxVjPsijyOqorih/s%3D' (2026-04-04) • Updated input 'pre-commit-hooks': 'github:cachix/pre-commit-hooks.nix/f799ae951fde0627157f40aec28dec27b22076d0?narHash=sha256-EAtviqz0sEAxdHS4crqu7JGR5oI3BwaqG0mw7CmXkO8%3D' (2026-03-21) → 'github:cachix/pre-commit-hooks.nix/4e0eb042b67d863b1b34b3f64d52ceb9cd926735?narHash=sha256-zW0lyy7ZNNT/x8JhzFHBsP2IPx7ATZIPai4FJj12BgU%3D' (2026-04-01) • Updated input 'sops-nix': 'github:Mic92/sops-nix/8adb84861fe70e131d44e1e33c426a51e2e0bfa5?narHash=sha256-D%2BtgywBHldTc0klWCIC49%2B6Zlp57Y4GGwxP1CqfxZrY%3D' (2026-03-29) → 'github:Mic92/sops-nix/a4ee2de76efb759fe8d4868c33dec9937897916f?narHash=sha256-f50qrK0WwZ9z5EdaMGWOTtALgSF7yb7XwuE7LjCuDmw%3D' (2026-04-05) • Updated input 'treefmt-nix': 'github:numtide/treefmt-nix/71b125cd05fbfd78cab3e070b73544abe24c5016?narHash=sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk%3D' (2026-03-12) → 'github:numtide/treefmt-nix/75925962939880974e3ab417879daffcba36c4a3?narHash=sha256-2qYcPgzFhnQWchHo0SlqLHrXpux5i6ay6UHA%2Bv2iH4U%3D' (2026-04-02) --- flake.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index 1506088fa..1e189c03c 100644 --- a/flake.lock +++ b/flake.lock @@ -12,11 +12,11 @@ ] }, "locked": { - "lastModified": 1774759126, - "narHash": "sha256-85Ds/QjrWIqoCMWwetYsDB82QukQUQHzswjQKOo6WZ8=", + "lastModified": 1775363961, + "narHash": "sha256-BdSvfgE5ryOYqOY7Y9p5wkJjAzF0IJSBvR79AaxYMbI=", "owner": "nix-community", "repo": "buildbot-nix", - "rev": "1865dc8516575d09188f30934d944b57aa3cb3d4", + "rev": "19a89fd4c890433dab7062672ff95efe0128db3c", "type": "github" }, "original": { @@ -85,11 +85,11 @@ ] }, "locked": { - "lastModified": 1772408722, - "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "lastModified": 1775087534, + "narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b", "type": "github" }, "original": { @@ -214,11 +214,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1774610258, - "narHash": "sha256-HaThtroVD9wRdx7KQk0B75JmFcXlMUoEdDFNOMOlsOs=", + "lastModified": 1775403759, + "narHash": "sha256-cGyKiTspHEUx3QwAnV3RfyT+VOXhHLs+NEr17HU34Wo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "832efc09b4caf6b4569fbf9dc01bec3082a00611", + "rev": "5e11f7acce6c3469bef9df154d78534fa7ae8b6c", "type": "github" }, "original": { @@ -282,11 +282,11 @@ "opam-repository": { "flake": false, "locked": { - "lastModified": 1774743430, - "narHash": "sha256-2R7oqIc/fbMq3QxY4siyTXdliELQ4xJWxytWWEn988E=", + "lastModified": 1775317442, + "narHash": "sha256-vKPg1fjfcIfNsNcQbh6dJtXOXwtxVjPsijyOqorih/s=", "owner": "ocaml", "repo": "opam-repository", - "rev": "0cc61fc5fe1a2fdbc1fdd94c11a4eb8e12dfe1a3", + "rev": "58be49813ccd4678f5762ae269409e93bce1ce7c", "type": "github" }, "original": { @@ -326,11 +326,11 @@ ] }, "locked": { - "lastModified": 1774104215, - "narHash": "sha256-EAtviqz0sEAxdHS4crqu7JGR5oI3BwaqG0mw7CmXkO8=", + "lastModified": 1775036584, + "narHash": "sha256-zW0lyy7ZNNT/x8JhzFHBsP2IPx7ATZIPai4FJj12BgU=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "f799ae951fde0627157f40aec28dec27b22076d0", + "rev": "4e0eb042b67d863b1b34b3f64d52ceb9cd926735", "type": "github" }, "original": { @@ -388,11 +388,11 @@ ] }, "locked": { - "lastModified": 1774760784, - "narHash": "sha256-D+tgywBHldTc0klWCIC49+6Zlp57Y4GGwxP1CqfxZrY=", + "lastModified": 1775365543, + "narHash": "sha256-f50qrK0WwZ9z5EdaMGWOTtALgSF7yb7XwuE7LjCuDmw=", "owner": "Mic92", "repo": "sops-nix", - "rev": "8adb84861fe70e131d44e1e33c426a51e2e0bfa5", + "rev": "a4ee2de76efb759fe8d4868c33dec9937897916f", "type": "github" }, "original": { @@ -438,11 +438,11 @@ ] }, "locked": { - "lastModified": 1773297127, - "narHash": "sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk=", + "lastModified": 1775125835, + "narHash": "sha256-2qYcPgzFhnQWchHo0SlqLHrXpux5i6ay6UHA+v2iH4U=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "71b125cd05fbfd78cab3e070b73544abe24c5016", + "rev": "75925962939880974e3ab417879daffcba36c4a3", "type": "github" }, "original": { From 77fe01e2925d7cc550c53b9612eb2da4b69b5302 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Mon, 6 Apr 2026 12:16:51 +0530 Subject: [PATCH 29/37] fix: nodePackages removed in nixpkgs, use package names Signed-off-by: phanirithvij --- pkgs/by-name/wax-client/package.nix | 4 ++-- pkgs/by-name/wax-server/package.nix | 4 ++-- projects/Keyoxide/keyoxide-cli/module.nix | 2 +- projects/Keyoxide/keyoxide-web/module.nix | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/by-name/wax-client/package.nix b/pkgs/by-name/wax-client/package.nix index e34decd48..885dd8fb9 100644 --- a/pkgs/by-name/wax-client/package.nix +++ b/pkgs/by-name/wax-client/package.nix @@ -8,7 +8,7 @@ yarnInstallHook, nodejs, makeWrapper, - nodePackages, + serve, nix-update-script, }: @@ -71,7 +71,7 @@ stdenv.mkDerivation (finalAttrs: { postFixup = '' wrapProgram $out/bin/wax-client \ - --prefix PATH : ${lib.makeBinPath [ nodePackages.serve ]} \ + --prefix PATH : ${lib.makeBinPath [ serve ]} \ ''; passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; }; diff --git a/pkgs/by-name/wax-server/package.nix b/pkgs/by-name/wax-server/package.nix index 855a0cba9..3eaaf13a5 100644 --- a/pkgs/by-name/wax-server/package.nix +++ b/pkgs/by-name/wax-server/package.nix @@ -16,7 +16,7 @@ potrace, yarn, pkg-config, - nodePackages, + node-gyp, node-pre-gyp, nix-update-script, }: @@ -49,7 +49,7 @@ stdenv.mkDerivation (finalAttrs: { python3 gnumake gcc - nodePackages.node-gyp + node-gyp pkg-config node-pre-gyp ]; diff --git a/projects/Keyoxide/keyoxide-cli/module.nix b/projects/Keyoxide/keyoxide-cli/module.nix index 40f0d0b0c..1c1afd33b 100644 --- a/projects/Keyoxide/keyoxide-cli/module.nix +++ b/projects/Keyoxide/keyoxide-cli/module.nix @@ -10,7 +10,7 @@ in { options.programs.keyoxide-cli = { enable = lib.mkEnableOption "keyoxide-cli"; - package = lib.mkPackageOption pkgs [ "nodePackages" "keyoxide" ] { }; + package = lib.mkPackageOption pkgs "keyoxide-cli" { }; }; config = lib.mkIf cfg.enable { diff --git a/projects/Keyoxide/keyoxide-web/module.nix b/projects/Keyoxide/keyoxide-web/module.nix index 6d7051f6e..1084f5a52 100644 --- a/projects/Keyoxide/keyoxide-web/module.nix +++ b/projects/Keyoxide/keyoxide-web/module.nix @@ -6,6 +6,6 @@ { options.services.keyoxide = { enable = lib.mkEnableOption "keyoxide-web"; - package = lib.mkPackageOption pkgs "nodePackages.keyoxide" { }; + package = lib.mkPackageOption pkgs "keyoxide-cli" { }; }; } From e3719588b3786d8d2c7a3e2419a229ed3856ea31 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Mon, 6 Apr 2026 12:14:14 +0530 Subject: [PATCH 30/37] fix: overview broken due to stalwart module changes From NixOS/nixpkgs#489143 Fixed via switching to declarations instead of files Signed-off-by: phanirithvij --- pkgs/lib.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/lib.nix b/pkgs/lib.nix index fd9d4fb88..fa44f1ed9 100644 --- a/pkgs/lib.nix +++ b/pkgs/lib.nix @@ -137,9 +137,13 @@ rec { collectFiles = attrs: let - # get value of `files` attr or empty list + # get value of `declarations` attr or empty list getFiles = - attr: if attr.value ? files && builtins.isList attr.value.files then attr.value.files else [ ]; + attr: + if attr.value ? declarations && builtins.isList attr.value.declarations then + attr.value.declarations + else + [ ]; in lib.concatMap getFiles (lib.attrsToList attrs); in From b0f60aeeaed25234b3c4298766bab5a8b3cc3e74 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Mon, 13 Apr 2026 10:27:10 +0530 Subject: [PATCH 31/37] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'buildbot-nix': 'github:nix-community/buildbot-nix/19a89fd4c890433dab7062672ff95efe0128db3c?narHash=sha256-BdSvfgE5ryOYqOY7Y9p5wkJjAzF0IJSBvR79AaxYMbI%3D' (2026-04-05) → 'github:nix-community/buildbot-nix/df9ff85cf20cedeae2f231dc2997d2e8ca5810cf?narHash=sha256-uu%2BDFoqMI2g2E%2BQE6EQfVc4g/jibNSnVobSUhxFr20o%3D' (2026-04-12) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/5e11f7acce6c3469bef9df154d78534fa7ae8b6c?narHash=sha256-cGyKiTspHEUx3QwAnV3RfyT%2BVOXhHLs%2BNEr17HU34Wo%3D' (2026-04-05) → 'github:NixOS/nixpkgs/13043924aaa7375ce482ebe2494338e058282925?narHash=sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90%3D' (2026-04-11) • Updated input 'opam-repository': 'github:ocaml/opam-repository/58be49813ccd4678f5762ae269409e93bce1ce7c?narHash=sha256-vKPg1fjfcIfNsNcQbh6dJtXOXwtxVjPsijyOqorih/s%3D' (2026-04-04) → 'github:ocaml/opam-repository/0404939bde256ca9d097922f265c4342b3b383b0?narHash=sha256-qnWpaFtpvFsvh4Gyf1dSQJC9saXRMPILJsyFHWZ//2M%3D' (2026-04-11) • Updated input 'pre-commit-hooks': 'github:cachix/pre-commit-hooks.nix/4e0eb042b67d863b1b34b3f64d52ceb9cd926735?narHash=sha256-zW0lyy7ZNNT/x8JhzFHBsP2IPx7ATZIPai4FJj12BgU%3D' (2026-04-01) → 'github:cachix/pre-commit-hooks.nix/580633fa3fe5fc0379905986543fd7495481913d?narHash=sha256-8Psjt%2BTWvE4thRKktJsXfR6PA/fWWsZ04DVaY6PUhr4%3D' (2026-04-07) • Updated input 'sops-nix': 'github:Mic92/sops-nix/a4ee2de76efb759fe8d4868c33dec9937897916f?narHash=sha256-f50qrK0WwZ9z5EdaMGWOTtALgSF7yb7XwuE7LjCuDmw%3D' (2026-04-05) → 'github:Mic92/sops-nix/31ac5fe5d015f76b54058c69fcaebb66a55871a4?narHash=sha256-VKp9bhVSm0bT6JWctFy06ocqxGGnWHi1NfoE90IgIcY%3D' (2026-04-12) • Updated input 'treefmt-nix': 'github:numtide/treefmt-nix/75925962939880974e3ab417879daffcba36c4a3?narHash=sha256-2qYcPgzFhnQWchHo0SlqLHrXpux5i6ay6UHA%2Bv2iH4U%3D' (2026-04-02) → 'github:numtide/treefmt-nix/790751ff7fd3801feeaf96d7dc416a8d581265ba?narHash=sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0%3D' (2026-04-08) --- flake.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 1e189c03c..830d53b35 100644 --- a/flake.lock +++ b/flake.lock @@ -12,11 +12,11 @@ ] }, "locked": { - "lastModified": 1775363961, - "narHash": "sha256-BdSvfgE5ryOYqOY7Y9p5wkJjAzF0IJSBvR79AaxYMbI=", + "lastModified": 1775969270, + "narHash": "sha256-uu+DFoqMI2g2E+QE6EQfVc4g/jibNSnVobSUhxFr20o=", "owner": "nix-community", "repo": "buildbot-nix", - "rev": "19a89fd4c890433dab7062672ff95efe0128db3c", + "rev": "df9ff85cf20cedeae2f231dc2997d2e8ca5810cf", "type": "github" }, "original": { @@ -214,11 +214,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1775403759, - "narHash": "sha256-cGyKiTspHEUx3QwAnV3RfyT+VOXhHLs+NEr17HU34Wo=", + "lastModified": 1775888245, + "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5e11f7acce6c3469bef9df154d78534fa7ae8b6c", + "rev": "13043924aaa7375ce482ebe2494338e058282925", "type": "github" }, "original": { @@ -282,11 +282,11 @@ "opam-repository": { "flake": false, "locked": { - "lastModified": 1775317442, - "narHash": "sha256-vKPg1fjfcIfNsNcQbh6dJtXOXwtxVjPsijyOqorih/s=", + "lastModified": 1775946396, + "narHash": "sha256-qnWpaFtpvFsvh4Gyf1dSQJC9saXRMPILJsyFHWZ//2M=", "owner": "ocaml", "repo": "opam-repository", - "rev": "58be49813ccd4678f5762ae269409e93bce1ce7c", + "rev": "0404939bde256ca9d097922f265c4342b3b383b0", "type": "github" }, "original": { @@ -326,11 +326,11 @@ ] }, "locked": { - "lastModified": 1775036584, - "narHash": "sha256-zW0lyy7ZNNT/x8JhzFHBsP2IPx7ATZIPai4FJj12BgU=", + "lastModified": 1775585728, + "narHash": "sha256-8Psjt+TWvE4thRKktJsXfR6PA/fWWsZ04DVaY6PUhr4=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "4e0eb042b67d863b1b34b3f64d52ceb9cd926735", + "rev": "580633fa3fe5fc0379905986543fd7495481913d", "type": "github" }, "original": { @@ -388,11 +388,11 @@ ] }, "locked": { - "lastModified": 1775365543, - "narHash": "sha256-f50qrK0WwZ9z5EdaMGWOTtALgSF7yb7XwuE7LjCuDmw=", + "lastModified": 1775971308, + "narHash": "sha256-VKp9bhVSm0bT6JWctFy06ocqxGGnWHi1NfoE90IgIcY=", "owner": "Mic92", "repo": "sops-nix", - "rev": "a4ee2de76efb759fe8d4868c33dec9937897916f", + "rev": "31ac5fe5d015f76b54058c69fcaebb66a55871a4", "type": "github" }, "original": { @@ -438,11 +438,11 @@ ] }, "locked": { - "lastModified": 1775125835, - "narHash": "sha256-2qYcPgzFhnQWchHo0SlqLHrXpux5i6ay6UHA+v2iH4U=", + "lastModified": 1775636079, + "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "75925962939880974e3ab417879daffcba36c4a3", + "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", "type": "github" }, "original": { From 53fbeca92efdce705953b8c969c123b25bc00768 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sun, 29 Mar 2026 17:17:52 +0530 Subject: [PATCH 32/37] projects(openXC7): remove unused fetchpatch Signed-off-by: phanirithvij --- pkgs/by-name/openxc7/nix/fasm/default.nix | 1 - pkgs/by-name/openxc7/package.nix | 2 -- 2 files changed, 3 deletions(-) diff --git a/pkgs/by-name/openxc7/nix/fasm/default.nix b/pkgs/by-name/openxc7/nix/fasm/default.nix index 1ac43ff7e..39b81ba96 100644 --- a/pkgs/by-name/openxc7/nix/fasm/default.nix +++ b/pkgs/by-name/openxc7/nix/fasm/default.nix @@ -8,7 +8,6 @@ cmake, textx, cython, - fetchpatch, }: buildPythonPackage rec { diff --git a/pkgs/by-name/openxc7/package.nix b/pkgs/by-name/openxc7/package.nix index 014db6675..9d402ef34 100644 --- a/pkgs/by-name/openxc7/package.nix +++ b/pkgs/by-name/openxc7/package.nix @@ -3,7 +3,6 @@ stdenvNoCC, callPackage, fetchFromGitHub, - fetchpatch, writeShellApplication, bashInteractive, ghdl, @@ -21,7 +20,6 @@ let nextpnr-xilinx = callPackage ./nix/nextpnr-xilinx.nix { }; prjxray = callPackage ./nix/prjxray.nix { }; fasm = callPackage ./nix/fasm { - inherit fetchpatch; inherit (python3Packages) buildPythonPackage pythonOlder From 5b7d6af2bb2a1164892e947b2c231a1eabe63da0 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sun, 29 Mar 2026 17:13:29 +0530 Subject: [PATCH 33/37] projects(openxc7): yosys-syling mark broken Signed-off-by: phanirithvij --- pkgs/by-name/openxc7/nix/yosys-synlig.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/by-name/openxc7/nix/yosys-synlig.nix b/pkgs/by-name/openxc7/nix/yosys-synlig.nix index 504185df1..d0460fb40 100644 --- a/pkgs/by-name/openxc7/nix/yosys-synlig.nix +++ b/pkgs/by-name/openxc7/nix/yosys-synlig.nix @@ -89,5 +89,9 @@ stdenv.mkDerivation (finalAttrs: { license = licenses.asl20; maintainers = with maintainers; [ hzeller ]; platforms = platforms.all; + # Note: + # dropped from nixpkgs in https://github.com/NixOS/nixpkgs/pull/473242 + # alternative pr https://github.com/NixOS/nixpkgs/pull/472800 + broken = true; }; }) From cbf8ce43eab8944ec5ae701054cdcd2bbdac7e33 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sun, 29 Mar 2026 17:19:05 +0530 Subject: [PATCH 34/37] projects(openXC7): mark as broken for now Signed-off-by: phanirithvij --- projects/openXC7/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/openXC7/default.nix b/projects/openXC7/default.nix index e62a81206..0418ea5cb 100644 --- a/projects/openXC7/default.nix +++ b/projects/openXC7/default.nix @@ -22,6 +22,9 @@ module = ./example.nix; description = ""; tests.compile-example.module = ./test.nix; + tests.compile-example.problem.broken.reason = '' + Has several problems as of now. + ''; }; }; }; From 44af9889437a823a7a322b6e0b4da4d1bad8fc3b Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sun, 29 Mar 2026 17:26:00 +0530 Subject: [PATCH 35/37] projects(openXC7): support antlr in fasm From upstream, openXC7/toolchain-nix commit b65456fb19c3f61406ebb74e403e8d4b7a7b698f Signed-off-by: phanirithvij --- pkgs/by-name/openxc7/nix/fasm/default.nix | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/openxc7/nix/fasm/default.nix b/pkgs/by-name/openxc7/nix/fasm/default.nix index 39b81ba96..78058a371 100644 --- a/pkgs/by-name/openxc7/nix/fasm/default.nix +++ b/pkgs/by-name/openxc7/nix/fasm/default.nix @@ -6,8 +6,11 @@ fetchFromGitHub, pythonOlder, cmake, + jre_headless, + antlr4_9, textx, cython, + fetchpatch, }: buildPythonPackage rec { @@ -22,18 +25,31 @@ buildPythonPackage rec { owner = "openxc7"; repo = "fasm"; rev = "2f57ccb1727a120e8cacbb95c578f3c71bdcc95a"; - hash = "sha256-ZytcNJvXs+GUSIrf4dtYl+Hc5kEQmeJP+3BQOmQImIw="; + fetchSubmodules = true; + hash = "sha256-4Na24czHPGvxuNuWKDiLkoBamsbqjGQkaQc8ogYHtuA="; }; nativeBuildInputs = [ cmake + jre_headless cython ]; + buildInputs = [ + antlr4_9.runtime.cpp + ]; + propagatedBuildInputs = [ textx ]; + env.ANTLR4_RUNTIME_INCLUDE = "${antlr4_9.runtime.cpp.dev}/include/antlr4-runtime"; + + postPatch = '' + substituteInPlace setup.py \ + --replace-fail "self.antlr_runtime = 'static'" "self.antlr_runtime = 'shared'" + ''; + dontUseCmakeConfigure = true; # Broken upstream. From 6a3ce7b151e81ca426dfede8dd56f19a50a02dcc Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sun, 29 Mar 2026 16:51:09 +0530 Subject: [PATCH 36/37] WIP projects(openXC7): use patched nextpnr-xilinx from nixpkgs TBA add new patch pr to nixpkgs? Recently merged to nixpkgs PR 494173 --- .../nix/0001-patch-xc7z035-tilegrid.patch | 27 ++++++ pkgs/by-name/openxc7/nix/nextpnr-xilinx.nix | 89 ++++++++++++++----- 2 files changed, 92 insertions(+), 24 deletions(-) create mode 100644 pkgs/by-name/openxc7/nix/0001-patch-xc7z035-tilegrid.patch diff --git a/pkgs/by-name/openxc7/nix/0001-patch-xc7z035-tilegrid.patch b/pkgs/by-name/openxc7/nix/0001-patch-xc7z035-tilegrid.patch new file mode 100644 index 000000000..3870f3d73 --- /dev/null +++ b/pkgs/by-name/openxc7/nix/0001-patch-xc7z035-tilegrid.patch @@ -0,0 +1,27 @@ +From c7d1beaf4bce7ea120936293ec279fd3c468afee Mon Sep 17 00:00:00 2001 +From: phanirithvij +Date: Sun, 29 Mar 2026 20:21:10 +0530 +Subject: [PATCH] patch xc7z035 tilegrid + +Signed-off-by: phanirithvij +--- + xilinx/python/xilinx_device.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/xilinx/python/xilinx_device.py b/xilinx/python/xilinx_device.py +index 386d4724..56f31c92 100644 +--- a/xilinx/python/xilinx_device.py ++++ b/xilinx/python/xilinx_device.py +@@ -461,6 +461,9 @@ def import_device(name, prjxray_root, metadata_root): + # https://github.com/gatecat/nextpnr-xilinx/issues/35 + # https://github.com/f4pga/prjxray/pull/1889 + fabricname = 'xc7a50t' ++ elif fabricname == 'xc7z035': ++ # https://github.com/openXC7/nextpnr-xilinx/issues/87 ++ fabricname = 'xc7z045' + # Load intent JSON + with open(metadata_root + "/wire_intents.json", "r") as ijf: + ij = json.load(ijf) +-- +2.53.0 + diff --git a/pkgs/by-name/openxc7/nix/nextpnr-xilinx.nix b/pkgs/by-name/openxc7/nix/nextpnr-xilinx.nix index a14eaf599..b1a78b4da 100644 --- a/pkgs/by-name/openxc7/nix/nextpnr-xilinx.nix +++ b/pkgs/by-name/openxc7/nix/nextpnr-xilinx.nix @@ -1,43 +1,60 @@ { - stdenv, - cmake, - git, lib, + stdenv, fetchFromGitHub, - python312Packages, + cmake, + gitMinimal, + nix-update-script, python312, + python312Packages, eigen, llvmPackages, - ... }: + +let + prjxrayDb = fetchFromGitHub { + owner = "openxc7"; + repo = "prjxray-db"; + rev = "381966a746cb4cf4a7f854f0e53caa3bf74fbe62"; + hash = "sha256-tQ1KfYj6kQq3fKBv6PAsqxm9btMNWFd5fT9UzOGMlkE="; + }; + + nextpnrXilinxMeta = fetchFromGitHub { + owner = "openxc7"; + repo = "nextpnr-xilinx-meta"; + rev = "491aefcc15be159efc8ad8bff2a1a4b93fe487fe"; + hash = "sha256-oRVFPzdw9ctzT6iQ8YI3Q92LZTIlRPBZvJVjMqvDJQE="; + }; +in stdenv.mkDerivation (finalAttrs: { pname = "nextpnr-xilinx"; - version = "0.8.2-unstable-2025-11-25"; + version = "0.8.2-unstable-2026-03-13"; src = fetchFromGitHub { owner = "openXC7"; repo = "nextpnr-xilinx"; - rev = "3374e5a62b54dc346fd5f85188ed24075ddfd5fb"; - hash = "sha256-gW3Z3Cd5/gfX7k/ekRHtPVlbhKszWah1L+HggMFKakA="; - fetchSubmodules = true; + rev = "96bb068afdb941e9292509a28b079c14c26ceca6"; + hash = "sha256-l9V7glWRtt9NUAKV00zeacA4vyFjwhfxv3mfDEF4lgI="; }; - postPatch = '' - # fix build with gcc15 - substituteInPlace 3rdparty/json11/json11.cpp \ - --replace-fail "" "${"\n"}#include " - ''; + patches = [ + # see https://github.com/openXC7/nextpnr-xilinx/issues/87 + ./0001-patch-xc7z035-tilegrid.patch + ]; nativeBuildInputs = [ cmake - git + gitMinimal + python312 ]; + buildInputs = [ + # Newer python fails with 'No version of Boost::Python 3.x could be found' python312Packages.boost python312 eigen ] - ++ (lib.optionals stdenv.cc.isClang [ llvmPackages.openmp ]); + ++ (lib.optional stdenv.cc.isClang llvmPackages.openmp); cmakeFlags = [ "-DCURRENT_GIT_VERSION=${lib.substring 0 7 finalAttrs.src.rev}" @@ -45,27 +62,51 @@ stdenv.mkDerivation (finalAttrs: { "-DBUILD_GUI=OFF" "-DBUILD_TESTS=OFF" "-DUSE_OPENMP=ON" - "-Wno-deprecated" ]; + postPatch = '' + # Boost.System is header-only in modern Boost; requiring the component fails + # with CMake's FindBoost in nixpkgs. + substituteInPlace CMakeLists.txt \ + --replace-fail "set(boost_libs filesystem thread program_options iostreams system)" \ + "set(boost_libs filesystem thread program_options iostreams)" + + # GCC 15 requires explicit include for uint8_t in vendored json11. + substituteInPlace 3rdparty/json11/json11.cpp \ + --replace-fail "#include " $'#include \n#include ' + + rm -rf xilinx/external/prjxray-db xilinx/external/nextpnr-xilinx-meta + ln -s ${prjxrayDb} xilinx/external/prjxray-db + ln -s ${nextpnrXilinxMeta} xilinx/external/nextpnr-xilinx-meta + ''; + installPhase = '' runHook preInstall + mkdir -p $out/bin cp nextpnr-xilinx bbasm $out/bin/ + mkdir -p $out/share/nextpnr/external - cp -rv ../xilinx/external/prjxray-db $out/share/nextpnr/external/ - cp -rv ../xilinx/external/nextpnr-xilinx-meta $out/share/nextpnr/external/ - cp -rv ../xilinx/python/ $out/share/nextpnr/python/ - cp ../xilinx/constids.inc $out/share/nextpnr + ln -s ${prjxrayDb} $out/share/nextpnr/external/prjxray-db + cp -r ../xilinx/external/nextpnr-xilinx-meta $out/share/nextpnr/external/ + cp -r ../xilinx/python $out/share/nextpnr/ + cp ../xilinx/constids.inc $out/share/nextpnr/ + runHook postInstall ''; - env.CMAKE_POLICY_VERSION_MINIMUM = "3.5"; + strictDeps = true; + + passthru.updateScript = nix-update-script { + extraArgs = [ "--version=branch" ]; + }; meta = { - description = "Place and route tool for FPGAs"; + description = "Place and route tool for Xilinx 7-series FPGAs"; homepage = "https://github.com/openXC7/nextpnr-xilinx"; license = lib.licenses.isc; - platforms = lib.platforms.all; + mainProgram = "nextpnr-xilinx"; + maintainers = with lib.maintainers; [ rcoeurjoly ]; + platforms = lib.platforms.unix; }; }) From 7693016c073760bac4f8bff223b933dd9e7b527f Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sun, 29 Mar 2026 21:14:58 +0530 Subject: [PATCH 37/37] WIP projects(openXC7): TODO remove f4pga/prjxray replace with openxc7/prjxray Signed-off-by: phanirithvij --- .../openxc7/nix/nextpnr-xilinx-chipdb.nix | 2 - pkgs/by-name/openxc7/nix/prjxray.nix | 72 ------------------- pkgs/by-name/openxc7/package.nix | 5 -- 3 files changed, 79 deletions(-) delete mode 100644 pkgs/by-name/openxc7/nix/prjxray.nix diff --git a/pkgs/by-name/openxc7/nix/nextpnr-xilinx-chipdb.nix b/pkgs/by-name/openxc7/nix/nextpnr-xilinx-chipdb.nix index ae81a87f5..81c0aa48c 100644 --- a/pkgs/by-name/openxc7/nix/nextpnr-xilinx-chipdb.nix +++ b/pkgs/by-name/openxc7/nix/nextpnr-xilinx-chipdb.nix @@ -3,7 +3,6 @@ runtimeShell, backend, nextpnr-xilinx, - prjxray, pypy310, coreutils, findutils, @@ -22,7 +21,6 @@ stdenv.mkDerivation (finalAttrs: { dontUnpack = true; buildInputs = [ - prjxray nextpnr-xilinx pypy310 coreutils diff --git a/pkgs/by-name/openxc7/nix/prjxray.nix b/pkgs/by-name/openxc7/nix/prjxray.nix deleted file mode 100644 index a795d500b..000000000 --- a/pkgs/by-name/openxc7/nix/prjxray.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ - stdenv, - lib, - fetchFromGitHub, - cmake, - git, - python312Packages, - eigen, - python312, - ... -}: -stdenv.mkDerivation { - pname = "prjxray"; - version = "0-unstable-2024-06-08"; - - src = fetchFromGitHub { - owner = "f4pga"; - repo = "prjxray"; - rev = "bdbc665852b82f589ff775a8f6498542dbec0a07"; - fetchSubmodules = true; - hash = "sha256-lV4o62lS7CMG0EYPhp9bTB4fg0hOixy8CC8yGxKhGQE="; - }; - - nativeBuildInputs = [ - cmake - git - ]; - buildInputs = [ - python312Packages.boost - python312 - eigen - ]; - - patchPhase = '' - runHook prePatch - # fix build with gcc15 - substituteInPlace third_party/yaml-cpp/src/emitterutils.cpp \ - --replace-fail "\"yaml-cpp/null.h\"" "\"yaml-cpp/null.h\"${"\n"}#include " - substituteInPlace lib/include/prjxray/memory_mapped_file.h \ - --replace-fail "" "${"\n"}#include " - runHook postPatch - ''; - - installPhase = '' - runHook preInstall - mkdir -p $out/bin - cp -v tools/xc7frames2bit tools/bitread tools/xc7patch $out/bin - cp -v $srcs/utils/fasm2frames.py $out/bin/fasm2frames - chmod 755 $out/bin/fasm2frames - cp -v $srcs/utils/bit2fasm.py $out/bin/bit2fasm - chmod 755 $out/bin/bit2fasm - mkdir -p $out/usr/share/python3/ - cp -rv $srcs/prjxray $out/usr/share/python3/ - runHook postInstall - ''; - - doCheck = false; - - env.CMAKE_POLICY_VERSION_MINIMUM = "3.5"; - env.NIX_CFLAGS_COMPILE = toString [ - "-Wno-deprecated" - # fix build for gcc 15 - "-Wno-error=free-nonheap-object" - ]; - - meta = { - description = "Xilinx series 7 FPGA bitstream documentation"; - homepage = "https://github.com/f4pga/prjxray"; - license = lib.licenses.isc; - platforms = lib.platforms.all; - }; -} diff --git a/pkgs/by-name/openxc7/package.nix b/pkgs/by-name/openxc7/package.nix index 9d402ef34..3e414927b 100644 --- a/pkgs/by-name/openxc7/package.nix +++ b/pkgs/by-name/openxc7/package.nix @@ -38,7 +38,6 @@ let callPackage ./nix/nextpnr-xilinx-chipdb.nix { backend = name; inherit nextpnr-xilinx; - inherit prjxray; } ); @@ -47,7 +46,6 @@ let name = "openxc7-env"; runtimeInputs = [ fasm - prjxray nextpnr-xilinx yosys @@ -66,9 +64,7 @@ let "NEXTPNR_XILINX_DIR" = "${nextpnr-xilinx}"; "NEXTPNR_XILINX_PYTHON_DIR" = "${nextpnr-xilinx}/share/nextpnr/python/"; "PRJXRAY_DB_DIR" = "${nextpnr-xilinx}/share/nextpnr/external/prjxray-db"; - "PRJXRAY_PYTHON_DIR" = "${prjxray}/usr/share/python3/"; "PYTHONPATH" = lib.strings.concatStringsSep ":" [ - "${prjxray}/usr/share/python3" (python3Packages.makePythonPath ( [ fasm @@ -124,7 +120,6 @@ stdenvNoCC.mkDerivation (finalAttrs: { passthru.packages = { inherit nextpnr-xilinx - prjxray fasm ; inherit (nextpnr-xilinx-chipdb)