diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml
index 75bbd51..61f14fc 100644
--- a/.github/workflows/build-and-deploy.yml
+++ b/.github/workflows/build-and-deploy.yml
@@ -13,40 +13,19 @@ on:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
+ actions: read
contents: read
pages: write
id-token: write
# Allow one concurrent deployment
concurrency:
- group: 'build-and-publish'
+ group: 'pages'
cancel-in-progress: true
jobs:
check-codeql:
- name: Check CodeQL Analysis
- runs-on: ubuntu-24.04
- # Continue workflow even if this job fails due to inability to find and/or check CodeQL workflow
- continue-on-error: true
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up GitHub CLI
- run: sudo apt-get install gh
-
- - name: Check CodeQL Workflow
- env:
- GH_TOKEN: ${{ secrets.NWPRO_ACTION }}
- run: |
- gh run list --workflow "CodeQL" --json conclusion --jq '.[0].conclusion' > codeql_status.txt
- CODEQL_STATUS=$(cat codeql_status.txt)
- if [[ "$CODEQL_STATUS" != "success" ]]; then
- echo "CodeQL Analysis did not succeed. Exiting..."
- exit 1
- fi
- rm codeql_status.txt
+ uses: ./.github/workflows/check-codeql.yml
build:
needs: check-codeql
@@ -61,11 +40,15 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v4
with:
- node-version: lts/*
- check-latest: true
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
+ - name: Upgrade npm
+ run: |
+ corepack enable
+ npm install -g npm@11.4.2
+
- name: Setup Pages
uses: actions/configure-pages@v5
@@ -78,18 +61,8 @@ jobs:
with:
python-version: '3.13'
- - name: Install MkDocs and plugins
- run: |
- pip install mkdocs mkdocs-material mkdocs-material-extensions mkdocs-get-deps
-
- - name: Freeze Python dependencies (for diagnostics)
- run: pip freeze > freeze.txt
-
- - name: Upload pip freeze snapshot
- uses: actions/upload-artifact@v4
- with:
- name: pip-freeze-ci
- path: freeze.txt
+ - name: Install Python dependencies
+ run: pip install -r requirements.txt
# Strict mode disabled for mkdocs-material
- name: Build MkDocs documentation
diff --git a/.github/workflows/check-codeql.yml b/.github/workflows/check-codeql.yml
new file mode 100644
index 0000000..11acc5f
--- /dev/null
+++ b/.github/workflows/check-codeql.yml
@@ -0,0 +1,40 @@
+# .github/workflows/check-codeql.yml
+#
+# Copyright © 2025 Network Pro Strategies (Network Pro™)
+# SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
+# This file is part of Network Pro
+
+name: CodeQL Status Check
+
+permissions:
+ actions: read
+ contents: read
+
+on:
+ workflow_call:
+
+jobs:
+ check:
+ name: Check CodeQL Status
+ runs-on: ubuntu-24.04
+
+ steps:
+ - name: Check CodeQL Workflow
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ gh --version
+
+ if ! gh run list --repo "${GITHUB_REPOSITORY}" --workflow "CodeQL" --limit 1 --json conclusion --jq '.[0].conclusion' > codeql_status.txt; then
+ echo "::error title=CodeQL Check Failed::Could not retrieve CodeQL run status. Blocking deployment."
+ exit 1
+ fi
+
+ CODEQL_STATUS=$(cat codeql_status.txt)
+ echo "CodeQL status: $CODEQL_STATUS"
+ if [[ "$CODEQL_STATUS" != "success" ]]; then
+ echo "::error title=CodeQL Check Failed::Latest CodeQL run did not succeed. Blocking deployment."
+ exit 1
+ fi
+
+ rm -f codeql_status.txt
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 58db034..e4402ef 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -37,11 +37,15 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@v4
with:
- node-version: lts/*
- check-latest: true
+ node-version: 24
cache: npm
cache-dependency-path: package-lock.json
+ - name: Upgrade npm
+ run: |
+ corepack enable
+ npm install -g npm@11.4.2
+
- name: Install Node.js dependencies
run: npm ci
@@ -51,9 +55,8 @@ jobs:
with:
python-version: '3.13'
- - name: Install MkDocs and plugins
- run: |
- pip install mkdocs mkdocs-material mkdocs-material-extensions mkdocs-get-deps
+ - name: Install Python dependencies
+ run: pip install -r requirements.txt
- name: Build MkDocs documentation
run: mkdocs build
@@ -83,11 +86,15 @@ jobs:
- name: Set up Node.js for npmjs
uses: actions/setup-node@v4
with:
- node-version: lts/*
- check-latest: true
+ node-version: 24
registry-url: https://registry.npmjs.org/
cache: npm
+ - name: Upgrade npm
+ run: |
+ corepack enable
+ npm install -g npm@11.4.2
+
- name: Set up Git user
run: |
git config --global user.email "github@sl.neteng.cc"
@@ -112,11 +119,15 @@ jobs:
- name: Set up Node.js for GPR
uses: actions/setup-node@v4
with:
- node-version: lts/*
- check-latest: true
+ node-version: 24
registry-url: https://npm.pkg.github.com/
cache: npm
+ - name: Upgrade npm
+ run: |
+ corepack enable
+ npm install -g npm@11.4.2
+
- name: Set up Git user
run: |
git config --global user.email "github@sl.neteng.cc"
diff --git a/.gitignore b/.gitignore
index 091c550..fa06a4a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -328,6 +328,7 @@ pyrightconfig.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
+!.vscode/customData.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
diff --git a/.npmrc b/.npmrc
deleted file mode 100644
index 809b1ae..0000000
--- a/.npmrc
+++ /dev/null
@@ -1,5 +0,0 @@
-@networkpro:registry=https://registry.npmjs.org/
-//registry.npmjs.org/:_authToken=${NPM_NETPRO}
-
-@netwk-pro:registry=https://npm.pkg.github.com/
-//npm.pkg.github.com/:_authToken=${GH_PAT}
diff --git a/.vscode/customData.json b/.vscode/customData.json
new file mode 100644
index 0000000..97fe504
--- /dev/null
+++ b/.vscode/customData.json
@@ -0,0 +1,69 @@
+{
+ "version": 1,
+ "selectors": [
+ {
+ "name": ".fas",
+ "description": "FontAwesome v6 solid icon class"
+ },
+ {
+ "name": ".fa-solid",
+ "description": "FontAwesome old solid icon class"
+ },
+ {
+ "name": ".fab",
+ "description": "FontAwesome v6 brand icon class"
+ },
+ {
+ "name": ".fa-brands",
+ "description": "FontAwsome old brand icon class"
+ },
+ {
+ "name": ".fa-square-instagram",
+ "description": "FontAwesome brands Instagram icon class"
+ },
+ {
+ "name": ".fa-square-github",
+ "description": "FontAwesome brands GitHub icon class"
+ },
+ {
+ "name": ".fa-linkedin",
+ "description": "FontAwesome brands LinkedIn icon class"
+ },
+ {
+ "name": ".fa-square-facebook",
+ "description": "FontAwesome brands Facebook icon class"
+ },
+ {
+ "name": ".fa-mastodon",
+ "description": "FontAwesome brands Pinterest icon class"
+ },
+ {
+ "name": ".fa-arrow-up-right",
+ "description": "FontAwesome arrow up right icon class"
+ },
+ {
+ "name": ".fa-arrow-up-right-from-square",
+ "description": "FontAwesome arrow up right from square icon class"
+ },
+ {
+ "name": ".fa-2x",
+ "description": "FontAwesome 2x extra large icon size class"
+ },
+ {
+ "name": ".fa-lg",
+ "description": "FontAwesome large icon size class"
+ },
+ {
+ "name": ".fa-sm",
+ "description": "FontAwesome small icon size class"
+ },
+ {
+ "name": ".fa-xs",
+ "description": "FontAwesome extra small icon size class"
+ },
+ {
+ "name": ".fa-2xs",
+ "description": "FontAwesome 2x extra small icon size class"
+ }
+ ]
+}
diff --git a/README.md b/README.md
index f2519de..3748acc 100644
--- a/README.md
+++ b/README.md
@@ -6,8 +6,8 @@ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
This file is part of Network Pro.
====================================================================== -->
-[SPDX-License-Identifier](https://spdx.dev/learn/handling-license-info/):
-`CC-BY-4.0 OR GPL-3.0-or-later`
+[SPDX-License-Identifier](https://spdx.dev/learn/handling-license-info/):
+`CC-BY-4.0 OR GPL-3.0-or-later`
diff --git a/package-lock.json b/package-lock.json
index d767ffb..327a466 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,26 +1,26 @@
{
"name": "@networkpro/docs",
- "version": "1.1.4",
+ "version": "1.1.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@networkpro/docs",
- "version": "1.1.4",
+ "version": "1.1.5",
"license": "CC-BY-4.0 OR GPL-3.0-or-later",
"devDependencies": {
- "@eslint/js": "^9.28.0",
+ "@eslint/js": "^9.30.1",
"@eslint/json": "^0.12.0",
"autoprefixer": "^10.4.21",
- "browserslist": "^4.25.0",
- "eslint": "^9.28.0",
+ "browserslist": "^4.25.1",
+ "eslint": "^9.30.1",
"eslint-config-prettier": "^10.1.5",
- "globals": "^16.2.0",
+ "globals": "^16.3.0",
"markdownlint": "^0.38.0",
"markdownlint-cli2": "^0.18.1",
- "postcss": "^8.5.4",
- "prettier": "3.5.3",
- "stylelint": "^16.20.0",
+ "postcss": "^8.5.6",
+ "prettier": "3.6.2",
+ "stylelint": "^16.21.0",
"stylelint-config-html": "^1.1.0",
"stylelint-config-recommended": "^16.0.0",
"stylelint-order": "^7.0.0"
@@ -202,9 +202,9 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.20.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
- "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
+ "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -217,9 +217,9 @@
}
},
"node_modules/@eslint/config-helpers": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
- "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
+ "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -277,9 +277,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.28.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz",
- "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==",
+ "version": "9.30.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz",
+ "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -684,9 +684,9 @@
"license": "MIT"
},
"node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "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": {
@@ -708,9 +708,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.25.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
- "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
+ "version": "4.25.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
+ "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
"dev": true,
"funding": [
{
@@ -728,8 +728,8 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001718",
- "electron-to-chromium": "^1.5.160",
+ "caniuse-lite": "^1.0.30001726",
+ "electron-to-chromium": "^1.5.173",
"node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.3"
},
@@ -766,20 +766,20 @@
}
},
"node_modules/cacheable": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.0.tgz",
- "integrity": "sha512-SSgQTAnhd7WlJXnGlIi4jJJOiHzgnM5wRMEPaXAU4kECTAMpBoYKoZ9i5zHmclIEZbxcu3j7yY/CF8DTmwIsHg==",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.1.tgz",
+ "integrity": "sha512-Fa2BZY0CS9F0PFc/6aVA6tgpOdw+hmv9dkZOlHXII5v5Hw+meJBIWDcPrG9q/dXxGcNbym5t77fzmawrBQfTmQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "hookified": "^1.8.2",
- "keyv": "^5.3.3"
+ "hookified": "^1.10.0",
+ "keyv": "^5.3.4"
}
},
"node_modules/cacheable/node_modules/keyv": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz",
- "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==",
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.4.tgz",
+ "integrity": "sha512-ypEvQvInNpUe+u+w8BIcPkQvEqXquyyibWE/1NB5T2BTzIpS5cGEV1LZskDzPSTvNAaT4+5FutvzlvnkxOSKlw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -797,9 +797,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001721",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz",
- "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==",
+ "version": "1.0.30001726",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz",
+ "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==",
"dev": true,
"funding": [
{
@@ -1009,9 +1009,9 @@
}
},
"node_modules/decode-named-character-reference": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz",
- "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
+ "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1140,9 +1140,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.165",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz",
- "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==",
+ "version": "1.5.178",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.178.tgz",
+ "integrity": "sha512-wObbz/ar3Bc6e4X5vf0iO8xTN8YAjN/tgiAOJLr7yjYFtP9wAjq8Mb5h0yn6kResir+VYx2DXBj9NNobs0ETSA==",
"dev": true,
"license": "ISC"
},
@@ -1210,19 +1210,19 @@
}
},
"node_modules/eslint": {
- "version": "9.28.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz",
- "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==",
+ "version": "9.30.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz",
+ "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.20.0",
- "@eslint/config-helpers": "^0.2.1",
+ "@eslint/config-array": "^0.21.0",
+ "@eslint/config-helpers": "^0.3.0",
"@eslint/core": "^0.14.0",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.28.0",
+ "@eslint/js": "9.30.1",
"@eslint/plugin-kit": "^0.3.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
@@ -1234,9 +1234,9 @@
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.3.0",
- "eslint-visitor-keys": "^4.2.0",
- "espree": "^10.3.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
"esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -1287,9 +1287,9 @@
}
},
"node_modules/eslint-scope": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
- "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -1304,9 +1304,9 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -1330,29 +1330,42 @@
}
},
"node_modules/eslint/node_modules/@eslint/plugin-kit": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
- "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz",
+ "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.14.0",
+ "@eslint/core": "^0.15.1",
"levn": "^0.4.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
+ "node_modules/eslint/node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
+ "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
"node_modules/espree": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
- "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.14.0",
+ "acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.0"
+ "eslint-visitor-keys": "^4.2.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1628,9 +1641,9 @@
}
},
"node_modules/globals": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz",
- "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==",
+ "version": "16.3.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz",
+ "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1689,9 +1702,9 @@
}
},
"node_modules/hookified": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.1.tgz",
- "integrity": "sha512-u3pxtGhKjcSXnGm1CX6aXS9xew535j3lkOCegbA6jdyh0BaAjTbXI4aslKstCr6zUNtoCxFGFKwjbSHdGrMB8g==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.10.0.tgz",
+ "integrity": "sha512-dJw0492Iddsj56U1JsSTm9E/0B/29a1AuoSLRAte8vQg/kaTGF3IgjEWT8c8yG4cC10+HisE1x5QAwR0Xwc+DA==",
"dev": true,
"license": "MIT"
},
@@ -2003,9 +2016,9 @@
}
},
"node_modules/known-css-properties": {
- "version": "0.36.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
- "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
+ "version": "0.37.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz",
+ "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==",
"dev": true,
"license": "MIT"
},
@@ -2976,9 +2989,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.4",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz",
- "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==",
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dev": true,
"funding": [
{
@@ -3088,9 +3101,9 @@
}
},
"node_modules/prettier": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
- "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
+ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
"dev": true,
"license": "MIT",
"bin": {
@@ -3318,9 +3331,9 @@
}
},
"node_modules/stylelint": {
- "version": "16.20.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.20.0.tgz",
- "integrity": "sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==",
+ "version": "16.21.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.21.0.tgz",
+ "integrity": "sha512-ki3PpJGG7xhm3WtINoWGnlvqAmbqSexoRMbEMJzlwewSIOqPRKPlq452c22xAdEJISVi80r+I7KL9GPUiwFgbg==",
"dev": true,
"funding": [
{
@@ -3334,9 +3347,9 @@
],
"license": "MIT",
"dependencies": {
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "@csstools/media-query-list-parser": "^4.0.2",
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4",
+ "@csstools/media-query-list-parser": "^4.0.3",
"@csstools/selector-specificity": "^5.0.0",
"@dual-bundle/import-meta-resolve": "^4.1.0",
"balanced-match": "^2.0.0",
@@ -3347,21 +3360,21 @@
"debug": "^4.4.1",
"fast-glob": "^3.3.3",
"fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^10.1.0",
+ "file-entry-cache": "^10.1.1",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.3.1",
- "ignore": "^7.0.4",
+ "ignore": "^7.0.5",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.36.0",
+ "known-css-properties": "^0.37.0",
"mathml-tag-names": "^2.1.3",
"meow": "^13.2.0",
"micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
"picocolors": "^1.1.1",
- "postcss": "^8.5.3",
+ "postcss": "^8.5.5",
"postcss-resolve-nested-selector": "^0.1.6",
"postcss-safe-parser": "^7.0.1",
"postcss-selector-parser": "^7.1.0",
@@ -3455,15 +3468,15 @@
}
},
"node_modules/stylelint/node_modules/flat-cache": {
- "version": "6.1.10",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.10.tgz",
- "integrity": "sha512-B6/v1f0NwjxzmeOhzfXPGWpKBVA207LS7lehaVKQnFrVktcFRfkzjZZ2gwj2i1TkEUMQht7ZMJbABUT5N+V1Nw==",
+ "version": "6.1.11",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.11.tgz",
+ "integrity": "sha512-zfOAns94mp7bHG/vCn9Ru2eDCmIxVQ5dELUHKjHfDEOJmHNzE+uGa6208kfkgmtym4a0FFjEuFksCXFacbVhSg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "cacheable": "^1.10.0",
+ "cacheable": "^1.10.1",
"flatted": "^3.3.3",
- "hookified": "^1.9.1"
+ "hookified": "^1.10.0"
}
},
"node_modules/stylelint/node_modules/globby": {
diff --git a/package.json b/package.json
index 7eeba87..342eef4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@networkpro/docs",
- "version": "1.1.4",
+ "version": "1.1.5",
"description": "The documentation portal for Network Pro Strategies (Network Pro™)",
"keywords": [
"android",
@@ -46,18 +46,18 @@
"upgrade": "npx npm-check-updates -u"
},
"devDependencies": {
- "@eslint/js": "^9.28.0",
+ "@eslint/js": "^9.30.1",
"@eslint/json": "^0.12.0",
"autoprefixer": "^10.4.21",
- "browserslist": "^4.25.0",
- "eslint": "^9.28.0",
+ "browserslist": "^4.25.1",
+ "eslint": "^9.30.1",
"eslint-config-prettier": "^10.1.5",
- "globals": "^16.2.0",
+ "globals": "^16.3.0",
"markdownlint": "^0.38.0",
"markdownlint-cli2": "^0.18.1",
- "postcss": "^8.5.4",
- "prettier": "3.5.3",
- "stylelint": "^16.20.0",
+ "postcss": "^8.5.6",
+ "prettier": "3.6.2",
+ "stylelint": "^16.21.0",
"stylelint-config-html": "^1.1.0",
"stylelint-config-recommended": "^16.0.0",
"stylelint-order": "^7.0.0"
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..8fcadad
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,4 @@
+mkdocs==1.6.1
+mkdocs-material==9.6.14
+mkdocs-material-extensions==1.3.1
+mkdocs-get-deps==0.2.0
diff --git a/src/privacy.md b/src/privacy.md
index 36ebe5f..5e2d206 100644
--- a/src/privacy.md
+++ b/src/privacy.md
@@ -1,7 +1,7 @@
---
date:
created: 2025-04-18
- updated: 2025-06-02
+ updated: 2025-06-30
title: Privacy Policy
summary: The Privacy Policy established by Network Pro Strategies.
authors:
@@ -24,7 +24,7 @@ tags:
# Privacy Policy
**Network Pro Strategies**
-**Effective Date:** June 2, 2025
+**Effective Date:** June 30, 2025
**Official Version Notice**
This document is provided for convenience only. In the event of any discrepancy,
@@ -38,7 +38,7 @@ the authoritative version is the one published at
3. [Web Analytics and Tracking](#tracking)
4. [Payment Information](#payment)
5. [Use of Information](#use)
-6. [Data Sharing](#sharing)
+6. [Legal Requests and Data Disclosure](#legal)
7. [Data Security](#security)
8. [User Rights](#rights)
9. [Third-Party Links](#third-party)
@@ -133,26 +133,35 @@ Information is used to:
[Back to top](#top)
-
-
-## 6. Data Sharing
-
-We do not sell personal information. However, we may share personal and business
-information under the following circumstances:
-
-- **With Service Providers:** We may share your information with carefully
- selected third-party vendors. These providers support essential aspects of our
- operations—including, but not limited to, payment processing, data analytics,
- and customer support services. All such partnerships are structured to uphold
- our core principles of _transparency, self-hosting, and prioritizing user
- privacy across all infrastructure and data flows_.
-- **Legal Compliance:** We may disclose information if required to do so by
- applicable law, regulation, legal process, or enforceable governmental
- request, including subpoenas or court orders.
-- **Business Transfers:** In connection with a merger, acquisition, asset sale,
- or similar corporate transaction, we may disclose or transfer personal
- information, provided that reasonable steps are taken to ensure continued
- confidentiality and compliance with applicable privacy laws.
+
+
+## 6. Legal Requests and Data Disclosure
+
+We do not sell personal or business information. We disclose such data only when
+required by law, and under limited, clearly defined circumstances:
+
+- **Legal Compliance:** We may disclose information in response to a valid legal
+ process—such as a subpoena, court order, or other binding legal request issued
+ under applicable law. We do not voluntarily provide user data to government
+ entities or third parties without a legal obligation to do so.
+- **Review and Notice:** Each request for user data is reviewed to ensure it is
+ lawful, specific, and properly served. Unless prohibited by law, we will
+ notify affected users before disclosing any information.
+- **Service Providers:** We may share personal or business information with
+ trusted third-party vendors who support essential business functions (e.g.,
+ payment processing, analytics, customer support). All such partnerships are
+ governed by strict data protection terms and structured to uphold our core
+ principles of _transparency and user privacy_.
+- **Business Transfers:** In the event of a merger, acquisition, or sale of
+ assets, personal and business information may be transferred _only if the
+ receiving party provides written assurances_ that: (a) the information will
+ not be sold or misused, (b) it will be handled in a manner consistent with our
+ privacy commitments, and (c) appropriate technical and contractual safeguards
+ are in place to protect it.
+
+Our policy is to require proper legal documentation and to scrutinize all
+requests on a case-by-case basis. Outside these clearly defined situations, we
+do not share, sell, or otherwise provide access to user information.
[Back to top](#top)