diff --git a/.github/workflows/publish-docker-cpu.yml b/.github/workflows/publish-docker-cpu.yml
deleted file mode 100644
index 945b139..0000000
--- a/.github/workflows/publish-docker-cpu.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-name: Publish CPU
-
-on:
- workflow_dispatch:
-
-jobs:
- push_to_registry:
- name: Build image
- runs-on: ubuntu-latest
- if: ${{ github.repository_owner == 'cloud-py-api' }}
- permissions:
- packages: write
- contents: read
- steps:
- - name: Set app env
- run: |
- # Split and keep last
- echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
- echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV
-
- - name: Checkout
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
- with:
- path: ${{ env.APP_NAME }}
-
- - name: Read package.json node and npm engines version
- uses: skjnldsv/read-package-engines-version-actions@0ce2ed60f6df073a62a77c0a4958dd0fc68e32e7 # v2.1
- id: versions
- # Continue if no package.json
- continue-on-error: true
- with:
- path: ${{ env.APP_NAME }}
- fallbackNode: "^20"
- fallbackNpm: "^10"
-
- - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
- # Skip if no package.json
- if: ${{ steps.versions.outputs.nodeVersion }}
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
- with:
- node-version: ${{ steps.versions.outputs.nodeVersion }}
-
- - name: Set up npm ${{ steps.versions.outputs.npmVersion }}
- # Skip if no package.json
- if: ${{ steps.versions.outputs.npmVersion }}
- run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
-
- - name: Build ${{ env.APP_NAME }}
- # Skip if no package.json
- if: ${{ steps.versions.outputs.nodeVersion }}
- run: |
- cd ${{ env.APP_NAME }}
- npm ci
- npm run build
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
-
- - name: Log in to GitHub Container Registry
- uses: docker/login-action@v3
- with:
- registry: ghcr.io
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Available platforms
- run: echo ${{ steps.buildx.outputs.platforms }}
-
- - name: Install xmlstarlet
- run: sudo apt-get update && sudo apt-get install -y xmlstarlet
-
- - name: Extract version from XML
- id: extract_version
- run: |
- cd ${{ env.APP_NAME }}
- VERSION=$(xmlstarlet sel -t -v "//image-tag" appinfo/info.xml)
- echo "VERSION=$VERSION" >> $GITHUB_ENV
-
- - name: Log version
- run: |
- echo "Extracted version: ${{ env.VERSION }}"
-
- - name: Build container image
- uses: docker/build-push-action@v5
- with:
- push: true
- context: ./${{ env.APP_NAME }}
- platforms: linux/amd64
- tags: ghcr.io/${{ github.repository_owner }}/${{ env.APP_NAME }}:${{ env.VERSION }}
- build-args: |
- BUILD_TYPE=cpu
diff --git a/.github/workflows/publish-docker-cuda.yml b/.github/workflows/publish-docker-cuda.yml
deleted file mode 100644
index c12d505..0000000
--- a/.github/workflows/publish-docker-cuda.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-name: Publish CUDA
-
-on:
- workflow_dispatch:
-
-jobs:
- push_to_registry:
- name: Build image
- runs-on: ubuntu-latest
- if: ${{ github.repository_owner == 'cloud-py-api' }}
- permissions:
- packages: write
- contents: read
- steps:
- - name: Set app env
- run: |
- # Split and keep last
- echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
- echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV
-
- - name: Checkout
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
- with:
- path: ${{ env.APP_NAME }}
-
- - name: Read package.json node and npm engines version
- uses: skjnldsv/read-package-engines-version-actions@0ce2ed60f6df073a62a77c0a4958dd0fc68e32e7 # v2.1
- id: versions
- # Continue if no package.json
- continue-on-error: true
- with:
- path: ${{ env.APP_NAME }}
- fallbackNode: "^20"
- fallbackNpm: "^10"
-
- - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
- # Skip if no package.json
- if: ${{ steps.versions.outputs.nodeVersion }}
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
- with:
- node-version: ${{ steps.versions.outputs.nodeVersion }}
-
- - name: Set up npm ${{ steps.versions.outputs.npmVersion }}
- # Skip if no package.json
- if: ${{ steps.versions.outputs.npmVersion }}
- run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
-
- - name: Build ${{ env.APP_NAME }}
- # Skip if no package.json
- if: ${{ steps.versions.outputs.nodeVersion }}
- run: |
- cd ${{ env.APP_NAME }}
- npm ci
- npm run build
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
-
- - name: Log in to GitHub Container Registry
- uses: docker/login-action@v3
- with:
- registry: ghcr.io
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Available platforms
- run: echo ${{ steps.buildx.outputs.platforms }}
-
- - name: Install xmlstarlet
- run: sudo apt-get update && sudo apt-get install -y xmlstarlet
-
- - name: Extract version from XML
- id: extract_version
- run: |
- cd ${{ env.APP_NAME }}
- VERSION=$(xmlstarlet sel -t -v "//image-tag" appinfo/info.xml)
- echo "VERSION=$VERSION" >> $GITHUB_ENV
-
- - name: Log version
- run: |
- echo "Extracted version: ${{ env.VERSION }}"
-
- - name: Build container image
- uses: docker/build-push-action@v5
- with:
- push: true
- context: ./${{ env.APP_NAME }}
- platforms: linux/amd64
- tags: ghcr.io/${{ github.repository_owner }}/${{ env.APP_NAME }}:${{ env.VERSION }}-cuda
- build-args: |
- BUILD_TYPE=cuda
diff --git a/.github/workflows/publish-docker-rocm.yml b/.github/workflows/publish-docker-rocm.yml
deleted file mode 100644
index f30cf9f..0000000
--- a/.github/workflows/publish-docker-rocm.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-name: Publish ROCM
-
-on:
- workflow_dispatch:
-
-jobs:
- push_to_registry:
- name: Build image
- runs-on: ubuntu-latest
- if: ${{ github.repository_owner == 'cloud-py-api' }}
- permissions:
- packages: write
- contents: read
- steps:
- - name: Set app env
- run: |
- # Split and keep last
- echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
- echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV
-
- - name: Checkout
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
- with:
- path: ${{ env.APP_NAME }}
-
- - name: Read package.json node and npm engines version
- uses: skjnldsv/read-package-engines-version-actions@0ce2ed60f6df073a62a77c0a4958dd0fc68e32e7 # v2.1
- id: versions
- # Continue if no package.json
- continue-on-error: true
- with:
- path: ${{ env.APP_NAME }}
- fallbackNode: "^20"
- fallbackNpm: "^10"
-
- - name: Set up node ${{ steps.versions.outputs.nodeVersion }}
- # Skip if no package.json
- if: ${{ steps.versions.outputs.nodeVersion }}
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
- with:
- node-version: ${{ steps.versions.outputs.nodeVersion }}
-
- - name: Set up npm ${{ steps.versions.outputs.npmVersion }}
- # Skip if no package.json
- if: ${{ steps.versions.outputs.npmVersion }}
- run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
-
- - name: Build ${{ env.APP_NAME }}
- # Skip if no package.json
- if: ${{ steps.versions.outputs.nodeVersion }}
- run: |
- cd ${{ env.APP_NAME }}
- npm ci
- npm run build
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
-
- - name: Log in to GitHub Container Registry
- uses: docker/login-action@v3
- with:
- registry: ghcr.io
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Available platforms
- run: echo ${{ steps.buildx.outputs.platforms }}
-
- - name: Install xmlstarlet
- run: sudo apt-get update && sudo apt-get install -y xmlstarlet
-
- - name: Extract version from XML
- id: extract_version
- run: |
- cd ${{ env.APP_NAME }}
- VERSION=$(xmlstarlet sel -t -v "//image-tag" appinfo/info.xml)
- echo "VERSION=$VERSION" >> $GITHUB_ENV
-
- - name: Log version
- run: |
- echo "Extracted version: ${{ env.VERSION }}"
-
- - name: Build container image
- uses: docker/build-push-action@v5
- with:
- push: true
- context: ./${{ env.APP_NAME }}
- platforms: linux/amd64
- tags: ghcr.io/${{ github.repository_owner }}/${{ env.APP_NAME }}:${{ env.VERSION }}-rocm
- build-args: |
- BUILD_TYPE=rocm
diff --git a/.gitignore b/.gitignore
index b49db7f..50d0866 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,7 @@ yarn-error.log*
.marginalia
ex_app/js/
+ex_app/js_harp/
build/
coverage/
vendor
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2e3e3ee..2fe602f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,7 @@
All notable changes to this project will be documented in this file.
-## [1.3.0 - 2025-03-xx]
+## [1.3.0 - 2025-03-30]
This release contains breaking changes, first you need to uninstall old app **with its data removal** and after that install this version.
@@ -12,11 +12,11 @@ This release contains breaking changes, first you need to uninstall old app **wi
- **Optional** remote token decoding using HuggingFace for some flows were added.
- `Surprise Me` - new feature to use LLM to create a random prompt.
- Many useful small UI additions(`Export flow`, `Editing flow` actions).
-- Added support for `HaRP` deploy type - successor of `DSP`(Nextcloud 32+ only).
+- Added support for `HaRP` deploy type - successor of `DockerSocketProxy`(Nextcloud 32+ only).
## Changes
-- Visionatrix service has been updated from version `1.11.1` to `2.0.1`.
+- Visionatrix service has been updated from version `1.11.1` to `2.1.0`.
- Now Visionatrix **correctly stores all models and configs** in the configured ExApp storage and no more breaking changes expected.
## Fixes
diff --git a/Dockerfile b/Dockerfile
index 3e584cf..feb3ba6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -12,9 +12,25 @@ ENV VIX_SERVER_FULL_MODELS="1"
RUN apt-get update && apt-get install -y git \
python3-dev python3-setuptools netcat-traditional \
libxml2-dev libxslt1-dev zlib1g-dev g++ \
- ffmpeg libsm6 libxext6 lsb-release sudo wget procps nano xmlstarlet && \
+ ffmpeg libsm6 libxext6 lsb-release sudo wget procps nano xmlstarlet curl && \
apt-get autoclean
+# HaRP: download and install FRP client
+RUN set -ex; \
+ ARCH=$(uname -m); \
+ if [ "$ARCH" = "aarch64" ]; then \
+ FRP_URL="https://raw.githubusercontent.com/nextcloud/HaRP/main/exapps_dev/frp_0.61.1_linux_arm64.tar.gz"; \
+ else \
+ FRP_URL="https://raw.githubusercontent.com/nextcloud/HaRP/main/exapps_dev/frp_0.61.1_linux_amd64.tar.gz"; \
+ fi; \
+ echo "Downloading FRP client from $FRP_URL"; \
+ curl -L "$FRP_URL" -o /tmp/frp.tar.gz; \
+ tar -C /tmp -xzf /tmp/frp.tar.gz; \
+ mv /tmp/frp_0.61.1_linux_* /tmp/frp; \
+ cp /tmp/frp/frpc /usr/local/bin/frpc; \
+ chmod +x /usr/local/bin/frpc; \
+ rm -rf /tmp/frp /tmp/frp.tar.gz
+
ADD ex_app_scripts/common_pgsql.sh /ex_app_scripts/
RUN chmod +x /ex_app_scripts/common_pgsql.sh
@@ -29,9 +45,11 @@ RUN VISIONATRIX_VERSION=$(xmlstarlet sel -t -v "//image-tag" /info.xml) && \
git checkout tags/v$VISIONATRIX_VERSION && \
rm /info.xml
-RUN cd /Visionatrix && python3 -m venv venv && venv/bin/python -m pip install -U pip && rm -rf ~/.cache/pip
+RUN --mount=type=cache,target=/root/.cache/pip \
+ cd /Visionatrix && python3 -m venv venv && venv/bin/python -m pip install -U pip
-RUN cd /Visionatrix && \
+RUN --mount=type=cache,target=/root/.cache/pip \
+ cd /Visionatrix && \
ARCH=$(uname -m) && \
if [ "$ARCH" = "aarch64" ]; then \
echo "Installing PyTorch for ARM64"; \
@@ -42,15 +60,14 @@ RUN cd /Visionatrix && \
venv/bin/python -m pip install torch==2.6.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu; \
else \
venv/bin/python -m pip install torch==2.6.0 torchvision torchaudio; \
- fi && \
- rm -rf ~/.cache/pip
+ fi
-RUN cd /Visionatrix && \
+RUN --mount=type=cache,target=/root/.cache/pip \
+ cd /Visionatrix && \
venv/bin/python -m pip install "psycopg[binary]" greenlet && \
venv/bin/python -m pip install . && \
venv/bin/python -m visionatrix install && \
- rm visionatrix.db && \
- rm -rf ~/.cache/pip
+ rm visionatrix.db
# Setup nodejs and npm for building the front-end client
RUN apt-get update && \
@@ -65,12 +82,14 @@ RUN cd /Visionatrix && \
rm -rf visionatrix/client && \
cd web && \
npm ci && \
+ NUXT_APP_BASE_URL="/exapps/visionatrix/" NEXTCLOUD_INTEGRATION=true npm run build && \
+ cp -r .output/public ../visionatrix/client_harp && \
NUXT_APP_BASE_URL="/index.php/apps/app_api/proxy/visionatrix/" NEXTCLOUD_INTEGRATION=true npm run build && \
cp -r .output/public ../visionatrix/client && \
rm -rf node_modules
# Remove nodejs and npm and clean cache
- RUN apt-get remove -y nodejs npm && apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* && rm -rf ~/.cache
+RUN apt-get remove -y nodejs npm && apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* && rm -rf ~/.cache
# Setup ExApp dependencies
COPY ex_app_scripts/init_pgsql.sh /ex_app_scripts/init_pgsql.sh
@@ -79,11 +98,13 @@ COPY ex_app_scripts/entrypoint.sh /ex_app_scripts/entrypoint.sh
RUN chmod +x /ex_app_scripts/*.sh
COPY requirements.txt /
-RUN python3 -m pip install -r /requirements.txt && rm -rf ~/.cache && rm /requirements.txt
+RUN --mount=type=cache,target=/root/.cache/pip \
+ python3 -m pip install -r /requirements.txt && rm /requirements.txt
ADD /ex_app/cs[s] /ex_app/css
ADD /ex_app/im[g] /ex_app/img
ADD /ex_app/j[s] /ex_app/js
+ADD /ex_app/js_har[p] /ex_app/js_harp
ADD /ex_app/l10[n] /ex_app/l10n
ADD /ex_app/li[b] /ex_app/lib
diff --git a/Makefile b/Makefile
index cabc4c2..991e785 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,8 @@ APP_ID := visionatrix
APP_NAME := Visionatrix
APP_VERSION := $$(xmlstarlet sel -t -v "//version" appinfo/info.xml)
VISIONATRIX_VERSION := $$(xmlstarlet sel -t -v "//image-tag" appinfo/info.xml)
-JSON_INFO := "{\"id\":\"$(APP_ID)\",\"name\":\"$(APP_NAME)\",\"daemon_config_name\":\"manual_install\",\"version\":\"$(APP_VERSION)\",\"secret\":\"12345\",\"port\":24000, \"routes\": [{\"url\":\".*\",\"verb\":\"GET, POST, PUT, DELETE\",\"access_level\":1,\"headers_to_exclude\":[]}], \"translations_folder\":\"\/tmp\/vix_l10n\"}"
+JSON_INFO := "{\"id\":\"$(APP_ID)\",\"name\":\"$(APP_NAME)\",\"daemon_config_name\":\"manual_install\",\"version\":\"$(APP_VERSION)\",\"secret\":\"12345\",\"port\":23700, \"routes\": [{\"url\":\".*\",\"verb\":\"GET, POST, PUT, DELETE\",\"access_level\":1,\"headers_to_exclude\":[]}], \"translations_folder\":\"\/tmp\/vix_l10n\"}"
+JSON_INFO_HARP := "{\"id\":\"$(APP_ID)\",\"name\":\"$(APP_NAME)\",\"daemon_config_name\":\"manual_install_harp\",\"version\":\"$(APP_VERSION)\",\"secret\":\"12345\",\"port\":23700, \"routes\": [{\"url\":\".*\",\"verb\":\"GET, POST, PUT, DELETE\",\"access_level\":1,\"headers_to_exclude\":[]}], \"translations_folder\":\"\/tmp\/vix_l10n\"}"
.PHONY: help
@@ -27,6 +28,7 @@ help:
@echo " "
@echo " register30 performs registration of running $(APP_NAME) into the 'manual_install' deploy daemon."
@echo " register performs registration of running $(APP_NAME) into the 'manual_install' deploy daemon."
+ @echo " register_harp performs registration of running $(APP_NAME) into the 'manual_install_harp' deploy daemon."
@echo " "
@echo " L10N (for manual translation):"
@echo " translation_templates extract translation strings from sources"
@@ -35,21 +37,18 @@ help:
.PHONY: build-push-cpu
build-push-cpu:
- npm ci && npm run build
docker login ghcr.io
- docker buildx build --push --platform linux/amd64 --tag ghcr.io/cloud-py-api/$(APP_ID):$(VISIONATRIX_VERSION) --build-arg BUILD_TYPE=cpu .
+ DOCKER_BUILDKIT=1 docker buildx build --progress=plain --push --platform linux/amd64 --tag ghcr.io/cloud-py-api/$(APP_ID):$(VISIONATRIX_VERSION) --build-arg BUILD_TYPE=cpu .
.PHONY: build-push-cuda
build-push-cuda:
- npm ci && npm run build
docker login ghcr.io
- docker buildx build --push --platform linux/amd64 --tag ghcr.io/cloud-py-api/$(APP_ID):$(VISIONATRIX_VERSION)-cuda --build-arg BUILD_TYPE=cuda .
+ DOCKER_BUILDKIT=1 docker buildx build --progress=plain --push --platform linux/amd64 --tag ghcr.io/cloud-py-api/$(APP_ID):$(VISIONATRIX_VERSION)-cuda --build-arg BUILD_TYPE=cuda .
.PHONY: build-push-rocm
build-push-rocm:
- npm ci && npm run build
docker login ghcr.io
- docker buildx build --push --platform linux/amd64 --tag ghcr.io/cloud-py-api/$(APP_ID):$(VISIONATRIX_VERSION)-rocm --build-arg BUILD_TYPE=rocm .
+ DOCKER_BUILDKIT=1 docker buildx build --progress=plain --push --platform linux/amd64 --tag ghcr.io/cloud-py-api/$(APP_ID):$(VISIONATRIX_VERSION)-rocm --build-arg BUILD_TYPE=rocm .
.PHONY: run30
run30:
@@ -75,6 +74,12 @@ register:
docker exec master-nextcloud-1 rm -rf /tmp/vix_l10n && docker cp ex_app/l10n master-nextcloud-1:/tmp/vix_l10n
docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register $(APP_ID) manual_install --json-info $(JSON_INFO) --wait-finish
+.PHONY: register_harp
+register_harp:
+ docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:unregister $(APP_ID) --silent --force || true
+ docker exec master-nextcloud-1 rm -rf /tmp/vix_l10n && docker cp ex_app/l10n master-nextcloud-1:/tmp/vix_l10n
+ docker exec master-nextcloud-1 sudo -u www-data php occ app_api:app:register $(APP_ID) manual_install_harp --json-info $(JSON_INFO_HARP) --wait-finish
+
.PHONY: translation_templates
translation_templates:
./translationtool.phar create-pot-files
@@ -86,3 +91,9 @@ convert_translations_nc:
.PHONY: convert_to_locale
convert_to_locale:
./scripts/convert_to_locale.sh
+
+.PHONY: js
+js:
+ rm -rf ex_app/js ex_app/js_harp
+ HARP_ENABLED=1 npm run build && mv ex_app/js ex_app/js_harp
+ npm run build
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 3ab8d2f..40d8775 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -49,13 +49,13 @@ Share your custom workflows, big or small. For guidance on creating AI workflows
https://raw.githubusercontent.com/cloud-py-api/visionatrix/main/screenshots/visionatrix_3_light.jpg
https://raw.githubusercontent.com/cloud-py-api/visionatrix/main/screenshots/visionatrix_4_light.jpg
-
+
ghcr.io
cloud-py-api/visionatrix
- 2.0.1.dev0
+ 2.1.0
diff --git a/ex_app/lib/main.py b/ex_app/lib/main.py
index 663551f..45421fc 100644
--- a/ex_app/lib/main.py
+++ b/ex_app/lib/main.py
@@ -33,16 +33,17 @@
# ---------Start of configuration values for manual deploy---------
# Uncommenting the following lines may be useful when installing manually.
-
+#
# xml_path = Path(__file__).resolve().parent / "../../appinfo/info.xml"
# os.environ["APP_VERSION"] = ET.parse(xml_path).getroot().find(".//image-tag").text
#
# os.environ["NEXTCLOUD_URL"] = "http://nextcloud.local/index.php"
# os.environ["APP_HOST"] = "0.0.0.0"
-# os.environ["APP_PORT"] = "24000"
+# os.environ["APP_PORT"] = "23700"
# os.environ["APP_ID"] = "visionatrix"
# os.environ["APP_SECRET"] = "12345" # noqa
# os.environ["NC_DEV_SKIP_RUN"] = "1"
+# os.environ["HP_SHARED_KEY"] = "1" # uncomment ONLY for "manual-install" with HaRP
# ---------Enf of configuration values for manual deploy---------
SUPERUSER_NAME = "visionatrix_admin"
@@ -63,11 +64,12 @@
current_translator.set(translation(os.getenv("APP_ID"), LOCALE_DIR, languages=["en"], fallback=True))
ENABLED_FLAG = NextcloudApp().enabled_state
-
+HARP_ENABLED = bool(os.environ.get("HP_SHARED_KEY"))
INSTALLED_FLOWS = []
PROJECT_ROOT_FOLDER = Path(__file__).parent.parent.parent
STATIC_FRONTEND_FOLDER = PROJECT_ROOT_FOLDER.joinpath("../Visionatrix/visionatrix/client")
+STATIC_FRONTEND_FOLDER_HARP = PROJECT_ROOT_FOLDER.joinpath("../Visionatrix/visionatrix/client_harp")
STATIC_FRONTEND_PRESENT = STATIC_FRONTEND_FOLDER.is_dir()
print("[DEBUG]: PROJECT_ROOT_FOLDER=", PROJECT_ROOT_FOLDER, flush=True)
print("[DEBUG]: STATIC_FRONTEND_PRESENT=", STATIC_FRONTEND_PRESENT, flush=True)
@@ -109,11 +111,17 @@ def enabled_handler(enabled: bool, nc: NextcloudApp) -> str:
ENABLED_FLAG = enabled
if enabled:
LOGGER.info("Hello from %s", nc.app_cfg.app_name)
- nc.ui.resources.set_script("top_menu", "visionatrix", "ex_app/js/visionatrix-main")
+ if HARP_ENABLED:
+ nc.ui.resources.set_script("top_menu", "visionatrix", "ex_app/js_harp/visionatrix-main")
+ else:
+ nc.ui.resources.set_script("top_menu", "visionatrix", "ex_app/js/visionatrix-main")
nc.ui.top_menu.register("visionatrix", "Visionatrix", "ex_app/img/app.svg")
else:
LOGGER.info("Bye bye from %s", nc.app_cfg.app_name)
- nc.ui.resources.delete_script("top_menu", "visionatrix", "ex_app/js/visionatrix-main")
+ if HARP_ENABLED:
+ nc.ui.resources.delete_script("top_menu", "visionatrix", "ex_app/js_harp/visionatrix-main")
+ else:
+ nc.ui.resources.delete_script("top_menu", "visionatrix", "ex_app/js/visionatrix-main")
nc.ui.top_menu.unregister("visionatrix")
return ""
@@ -136,7 +144,7 @@ def enabled_callback(enabled: bool, nc: typing.Annotated[NextcloudApp, Depends(n
async def proxy_request_to_service(request: Request, path: str, path_prefix: str = ""):
async with httpx.AsyncClient() as client:
- url = f"{SERVICE_URL}{path_prefix}/{path}"
+ url = f"{SERVICE_URL}{path_prefix}{path}" if path.startswith("/") else f"{SERVICE_URL}{path_prefix}/{path}"
headers = {key: value for key, value in request.headers.items() if key.lower() not in ("host", "cookie")}
if request.method == "GET":
response = await client.get(
@@ -237,10 +245,16 @@ async def proxy_frontend_requests(request: Request, path: str):
if path.startswith("ex_app"):
file_server_path = PROJECT_ROOT_FOLDER.joinpath(path)
elif STATIC_FRONTEND_PRESENT:
- if not path:
- file_server_path = STATIC_FRONTEND_FOLDER.joinpath("index.html")
- elif STATIC_FRONTEND_FOLDER.joinpath(path).is_file():
- file_server_path = STATIC_FRONTEND_FOLDER.joinpath(path)
+ if HARP_ENABLED:
+ if not path:
+ file_server_path = STATIC_FRONTEND_FOLDER_HARP.joinpath("index.html")
+ elif STATIC_FRONTEND_FOLDER_HARP.joinpath(path).is_file():
+ file_server_path = STATIC_FRONTEND_FOLDER_HARP.joinpath(path)
+ else:
+ if not path:
+ file_server_path = STATIC_FRONTEND_FOLDER.joinpath("index.html")
+ elif STATIC_FRONTEND_FOLDER.joinpath(path).is_file():
+ file_server_path = STATIC_FRONTEND_FOLDER.joinpath(path)
if file_server_path:
LOGGER.debug("proxy_FRONTEND_requests: Returning: %s", file_server_path)
@@ -387,7 +401,7 @@ def start_visionatrix() -> None:
while True: # Let's wait until Visionatrix opens the port.
with contextlib.suppress(httpx.ReadError, httpx.ConnectError, httpx.RemoteProtocolError):
- r = httpx.get(SERVICE_URL)
+ r = httpx.get(SERVICE_URL + "/vapi/other/whoami")
if r.status_code in (200, 204, 401, 403):
break
sleep(5)
diff --git a/ex_app/src/constants/AppAPI.js b/ex_app/src/constants/AppAPI.js
index 005ca44..9d0bbed 100644
--- a/ex_app/src/constants/AppAPI.js
+++ b/ex_app/src/constants/AppAPI.js
@@ -1,4 +1,4 @@
export const EX_APP_ID = 'visionatrix'
export const EX_APP_MENU_ENTRY_NAME = 'visionatrix'
-export const APP_API_PROXY_URL_PREFIX = '/apps/app_api/proxy'
export const APP_API_ROUTER_BASE = '/apps/app_api/embedded'
+export const APP_API_PROXY_URL_PREFIX = process.env.HARP_ENABLED ? '/exapps' : '/apps/app_api/proxy'
diff --git a/ex_app/src/views/IframeView.vue b/ex_app/src/views/IframeView.vue
index 0fba751..6a8278d 100644
--- a/ex_app/src/views/IframeView.vue
+++ b/ex_app/src/views/IframeView.vue
@@ -40,10 +40,12 @@ export default {
NcLoadingIcon,
},
data() {
+ const baseUrl = generateUrl(`${APP_API_PROXY_URL_PREFIX}/${EX_APP_ID}/`, {}, { noRewrite: true })
+ const iframeSrcUrl = process.env.HARP_ENABLED ? baseUrl.replace('/index.php', '') : baseUrl
return {
error: null,
loading: true,
- iframeSrc: generateUrl(`${APP_API_PROXY_URL_PREFIX}/${EX_APP_ID}/`, {}, { noRewrite: true }),
+ iframeSrc: iframeSrcUrl,
}
},
mounted() {
diff --git a/ex_app_scripts/entrypoint.sh b/ex_app_scripts/entrypoint.sh
index fe4cd27..58f7b1b 100644
--- a/ex_app_scripts/entrypoint.sh
+++ b/ex_app_scripts/entrypoint.sh
@@ -1,5 +1,61 @@
#!/bin/sh
+set -e
+
+# Only create a config file if HP_SHARED_KEY is set.
+if [ -n "$HP_SHARED_KEY" ]; then
+ echo "HP_SHARED_KEY is set, creating /frpc.toml configuration file..."
+ if [ -d "/certs/frp" ]; then
+ echo "Found /certs/frp directory. Creating configuration with TLS certificates."
+ cat < /frpc.toml
+serverAddr = "$HP_FRP_ADDRESS"
+serverPort = $HP_FRP_PORT
+
+transport.tls.enable = true
+transport.tls.certFile = "/certs/frp/client.crt"
+transport.tls.keyFile = "/certs/frp/client.key"
+transport.tls.trustedCaFile = "/certs/frp/ca.crt"
+transport.tls.serverName = "harp.nc"
+
+metadatas.token = "$HP_SHARED_KEY"
+
+[[proxies]]
+remotePort = $APP_PORT
+type = "tcp"
+name = "$APP_ID"
+[proxies.plugin]
+type = "unix_domain_socket"
+unixPath = "/tmp/exapp.sock"
+EOF
+ else
+ echo "Directory /certs/frp not found. Creating configuration without TLS certificates."
+ cat < /frpc.toml
+serverAddr = "$HP_FRP_ADDRESS"
+serverPort = $HP_FRP_PORT
+
+transport.tls.enable = false
+
+metadatas.token = "$HP_SHARED_KEY"
+
+[[proxies]]
+remotePort = $APP_PORT
+type = "tcp"
+name = "$APP_ID"
+[proxies.plugin]
+type = "unix_domain_socket"
+unixPath = "/tmp/exapp.sock"
+EOF
+ fi
+else
+ echo "HP_SHARED_KEY is not set. Skipping FRP configuration."
+fi
+
+# If we have a configuration file and the shared key is present, start the FRP client
+if [ -f /frpc.toml ] && [ -n "$HP_SHARED_KEY" ]; then
+ echo "Starting frpc in the background..."
+ frpc -c /frpc.toml &
+fi
+
# Read environment variables
. /etc/environment
diff --git a/package-lock.json b/package-lock.json
index b6edcef..5d7c25d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -33,7 +33,9 @@
"@nextcloud/stylelint-config": "^3.0.1",
"@nextcloud/webpack-vue-config": "^6.2.0",
"eslint-webpack-plugin": "^4.2.0",
- "stylelint-webpack-plugin": "^5.0.1"
+ "stylelint-webpack-plugin": "^5.0.1",
+ "webpack": "^5.98.0",
+ "webpack-cli": "^6.0.1"
},
"engines": {
"node": "^20.0.0",
@@ -1744,14 +1746,13 @@
}
},
"node_modules/@discoveryjs/json-ext": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
- "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz",
+ "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
- "node": ">=10.0.0"
+ "node": ">=14.17.0"
}
},
"node_modules/@dual-bundle/import-meta-resolve": {
@@ -2049,7 +2050,6 @@
"integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -2065,7 +2065,6 @@
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6.0.0"
}
@@ -2076,7 +2075,6 @@
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6.0.0"
}
@@ -2087,7 +2085,6 @@
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
@@ -2098,8 +2095,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
@@ -2107,7 +2103,6 @@
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -3219,7 +3214,6 @@
"integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/eslint": "*",
"@types/estree": "*"
@@ -4029,7 +4023,6 @@
"integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/helper-numbers": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2"
@@ -4040,24 +4033,21 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
"integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-api-error": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
"integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-buffer": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
"integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-numbers": {
"version": "1.13.2",
@@ -4065,7 +4055,6 @@
"integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/floating-point-hex-parser": "1.13.2",
"@webassemblyjs/helper-api-error": "1.13.2",
@@ -4077,8 +4066,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
"integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.14.1",
@@ -4086,7 +4074,6 @@
"integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -4100,7 +4087,6 @@
"integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
@@ -4111,7 +4097,6 @@
"integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@xtuc/long": "4.2.2"
}
@@ -4121,8 +4106,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
"integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@webassemblyjs/wasm-edit": {
"version": "1.14.1",
@@ -4130,7 +4114,6 @@
"integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -4148,7 +4131,6 @@
"integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
@@ -4163,7 +4145,6 @@
"integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -4177,7 +4158,6 @@
"integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-api-error": "1.13.2",
@@ -4193,55 +4173,51 @@
"integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webpack-cli/configtest": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
- "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz",
+ "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
- "node": ">=14.15.0"
+ "node": ">=18.12.0"
},
"peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "webpack": "^5.82.0",
+ "webpack-cli": "6.x.x"
}
},
"node_modules/@webpack-cli/info": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
- "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz",
+ "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
- "node": ">=14.15.0"
+ "node": ">=18.12.0"
},
"peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "webpack": "^5.82.0",
+ "webpack-cli": "6.x.x"
}
},
"node_modules/@webpack-cli/serve": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
- "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz",
+ "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
- "node": ">=14.15.0"
+ "node": ">=18.12.0"
},
"peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "webpack": "^5.82.0",
+ "webpack-cli": "6.x.x"
},
"peerDependenciesMeta": {
"webpack-dev-server": {
@@ -4254,16 +4230,14 @@
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
"dev": true,
- "license": "BSD-3-Clause",
- "peer": true
+ "license": "BSD-3-Clause"
},
"node_modules/@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true,
- "license": "Apache-2.0",
- "peer": true
+ "license": "Apache-2.0"
},
"node_modules/abort-controller": {
"version": "3.0.0",
@@ -4311,7 +4285,6 @@
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -4390,17 +4363,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
"node_modules/ansi-html-community": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
@@ -5134,7 +5096,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001688",
"electron-to-chromium": "^1.5.73",
@@ -5179,8 +5140,7 @@
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/buffer-xor": {
"version": "1.0.3",
@@ -5383,8 +5343,7 @@
"url": "https://github.com/sponsors/ai"
}
],
- "license": "CC-BY-4.0",
- "peer": true
+ "license": "CC-BY-4.0"
},
"node_modules/ccount": {
"version": "2.0.1",
@@ -5464,7 +5423,6 @@
"integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6.0"
}
@@ -5521,7 +5479,6 @@
"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"is-plain-object": "^2.0.4",
"kind-of": "^6.0.2",
@@ -5537,7 +5494,6 @@
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"isobject": "^3.0.1"
},
@@ -5578,8 +5534,7 @@
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/combined-stream": {
"version": "1.0.8",
@@ -5608,8 +5563,7 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/comment-parser": {
"version": "1.4.1",
@@ -5903,7 +5857,6 @@
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -6525,8 +6478,7 @@
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.84.tgz",
"integrity": "sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==",
"dev": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/elliptic": {
"version": "6.6.1",
@@ -6602,7 +6554,6 @@
"integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
@@ -6642,7 +6593,6 @@
"integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"envinfo": "dist/cli.js"
},
@@ -6755,8 +6705,7 @@
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
"integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
@@ -6825,7 +6774,6 @@
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -7417,7 +7365,6 @@
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
@@ -7626,7 +7573,6 @@
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"estraverse": "^5.2.0"
},
@@ -7640,7 +7586,6 @@
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"engines": {
"node": ">=4.0"
}
@@ -7651,7 +7596,6 @@
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"engines": {
"node": ">=4.0"
}
@@ -7701,7 +7645,6 @@
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.8.x"
}
@@ -7906,7 +7849,6 @@
"integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 4.9.1"
}
@@ -8066,7 +8008,6 @@
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
"dev": true,
"license": "BSD-3-Clause",
- "peer": true,
"bin": {
"flat": "cli.js"
}
@@ -8241,7 +8182,6 @@
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -8406,8 +8346,7 @@
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"dev": true,
- "license": "BSD-2-Clause",
- "peer": true
+ "license": "BSD-2-Clause"
},
"node_modules/glob/node_modules/brace-expansion": {
"version": "1.1.11",
@@ -8701,7 +8640,6 @@
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -9125,7 +9063,6 @@
"integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
@@ -9146,7 +9083,6 @@
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -9161,7 +9097,6 @@
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -9175,7 +9110,6 @@
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"p-try": "^2.0.0"
},
@@ -9192,7 +9126,6 @@
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -9206,7 +9139,6 @@
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"find-up": "^4.0.0"
},
@@ -9282,7 +9214,6 @@
"integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=10.13.0"
}
@@ -9492,7 +9423,6 @@
"integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"hasown": "^2.0.2"
},
@@ -9955,8 +9885,7 @@
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/isobject": {
"version": "3.0.1",
@@ -9964,7 +9893,6 @@
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -10079,8 +10007,7 @@
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
@@ -10129,7 +10056,6 @@
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -10205,7 +10131,6 @@
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6.11.5"
}
@@ -11500,8 +11425,7 @@
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/nested-property": {
"version": "4.0.0",
@@ -11619,8 +11543,7 @@
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -11964,7 +11887,6 @@
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -12055,7 +11977,6 @@
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=8"
}
@@ -12077,7 +11998,6 @@
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=8"
}
@@ -12087,8 +12007,7 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/path-posix": {
"version": "1.0.0",
@@ -12699,7 +12618,6 @@
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"safe-buffer": "^5.1.0"
}
@@ -12783,7 +12701,6 @@
"integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"resolve": "^1.20.0"
},
@@ -13200,7 +13117,6 @@
"integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"is-core-module": "^2.16.0",
"path-parse": "^1.0.7",
@@ -13222,7 +13138,6 @@
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"resolve-from": "^5.0.0"
},
@@ -13236,7 +13151,6 @@
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=8"
}
@@ -13404,8 +13318,7 @@
"url": "https://feross.org/support"
}
],
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/safe-push-apply": {
"version": "1.0.0",
@@ -13669,7 +13582,6 @@
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"randombytes": "^2.1.0"
}
@@ -13874,7 +13786,6 @@
"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"kind-of": "^6.0.2"
},
@@ -13888,7 +13799,6 @@
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -13902,7 +13812,6 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=8"
}
@@ -14083,7 +13992,6 @@
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -14095,7 +14003,6 @@
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -14879,7 +14786,6 @@
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 0.4"
},
@@ -14950,7 +14856,6 @@
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -14961,7 +14866,6 @@
"integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@@ -14981,7 +14885,6 @@
"integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5",
@@ -15017,7 +14920,6 @@
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
@@ -15033,7 +14935,6 @@
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -15627,7 +15528,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"escalade": "^3.2.0",
"picocolors": "^1.1.1"
@@ -16031,7 +15931,6 @@
"integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
@@ -16108,12 +16007,11 @@
}
},
"node_modules/webpack": {
- "version": "5.97.1",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz",
- "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==",
+ "version": "5.98.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz",
+ "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.6",
@@ -16133,9 +16031,9 @@
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
+ "schema-utils": "^4.3.0",
"tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.10",
+ "terser-webpack-plugin": "^5.3.11",
"watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
@@ -16156,44 +16054,40 @@
}
},
"node_modules/webpack-cli": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
- "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz",
+ "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^2.1.1",
- "@webpack-cli/info": "^2.0.2",
- "@webpack-cli/serve": "^2.0.5",
+ "@discoveryjs/json-ext": "^0.6.1",
+ "@webpack-cli/configtest": "^3.0.1",
+ "@webpack-cli/info": "^3.0.1",
+ "@webpack-cli/serve": "^3.0.1",
"colorette": "^2.0.14",
- "commander": "^10.0.1",
+ "commander": "^12.1.0",
"cross-spawn": "^7.0.3",
- "envinfo": "^7.7.3",
+ "envinfo": "^7.14.0",
"fastest-levenshtein": "^1.0.12",
"import-local": "^3.0.2",
"interpret": "^3.1.1",
"rechoir": "^0.8.0",
- "webpack-merge": "^5.7.3"
+ "webpack-merge": "^6.0.1"
},
"bin": {
"webpack-cli": "bin/cli.js"
},
"engines": {
- "node": ">=14.15.0"
+ "node": ">=18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "webpack": "5.x.x"
+ "webpack": "^5.82.0"
},
"peerDependenciesMeta": {
- "@webpack-cli/generators": {
- "optional": true
- },
"webpack-bundle-analyzer": {
"optional": true
},
@@ -16203,14 +16097,13 @@
}
},
"node_modules/webpack-cli/node_modules/commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
- "node": ">=14"
+ "node": ">=18"
}
},
"node_modules/webpack-dev-middleware": {
@@ -16357,19 +16250,18 @@
}
},
"node_modules/webpack-merge": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
- "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz",
+ "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"clone-deep": "^4.0.1",
"flat": "^5.0.2",
- "wildcard": "^2.0.0"
+ "wildcard": "^2.0.1"
},
"engines": {
- "node": ">=10.0.0"
+ "node": ">=18.0.0"
}
},
"node_modules/webpack-sources": {
@@ -16378,31 +16270,10 @@
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=10.13.0"
}
},
- "node_modules/webpack/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -16436,7 +16307,6 @@
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"isexe": "^2.0.0"
},
@@ -16544,8 +16414,7 @@
"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
"integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/word-wrap": {
"version": "1.2.5",
diff --git a/package.json b/package.json
index c41c246..254fab7 100755
--- a/package.json
+++ b/package.json
@@ -55,10 +55,12 @@
"@nextcloud/stylelint-config": "^3.0.1",
"@nextcloud/webpack-vue-config": "^6.2.0",
"eslint-webpack-plugin": "^4.2.0",
- "stylelint-webpack-plugin": "^5.0.1"
+ "stylelint-webpack-plugin": "^5.0.1",
+ "webpack": "^5.98.0",
+ "webpack-cli": "^6.0.1"
},
- "engines": {
- "node": "^20.0.0",
- "npm": "^10.0.0"
- }
+ "engines": {
+ "node": "^20.0.0",
+ "npm": "^10.0.0"
+ }
}
diff --git a/webpack.config.js b/webpack.config.js
index 7f958b0..988d51b 100755
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -3,6 +3,7 @@ const webpackConfig = require('@nextcloud/webpack-vue-config')
const webpackRules = require('@nextcloud/webpack-vue-config/rules')
const ESLintPlugin = require('eslint-webpack-plugin')
const StyleLintPlugin = require('stylelint-webpack-plugin')
+const webpack = require('webpack')
const buildMode = process.env.NODE_ENV
const isDev = buildMode === 'development'
@@ -26,7 +27,7 @@ webpackConfig.plugins.push(
extensions: ['js', 'vue'],
files: 'ex_app/src',
failOnError: !isDev,
- })
+ }),
)
webpackConfig.plugins.push(
@@ -36,6 +37,14 @@ webpackConfig.plugins.push(
}),
)
+webpackConfig.plugins.push(
+ new webpack.DefinePlugin({
+ 'process.env': {
+ HARP_ENABLED: JSON.stringify(process.env.HARP_ENABLED || ''),
+ },
+ }),
+)
+
webpackConfig.output = {
path: path.resolve(__dirname, 'ex_app/js'),
}