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)