@networkpro/web 1.24.2 → 1.24.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,37 @@
1
+ # .github/workflows/branch-guard.yml
2
+ #
3
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
4
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ # This file is part of Network Pro
6
+ #
7
+ # Warns if commits are pushed directly to master/main instead of via PR.
8
+ # Does NOT block the commit — it just posts a workflow summary and log warning.
9
+
10
+ name: Branch Guard
11
+
12
+ on:
13
+ push:
14
+ branches:
15
+ - master
16
+ - main
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ jobs:
22
+ warn-direct-commit:
23
+ runs-on: ubuntu-24.04
24
+ steps:
25
+ - name: Check commit source
26
+ run: |
27
+ # Only trigger warning if commit wasn't from a merge or bot
28
+ if [[ "${{ github.event.head_commit.message }}" != *"Merge pull request"* ]] && \
29
+ [[ "${{ github.actor }}" != "dependabot[bot]" ]]; then
30
+ echo "::warning ::⚠️ Direct commit to ${GITHUB_REF##*/} by $GITHUB_ACTOR."
31
+ echo "### ⚠️ Direct Commit Detected" >> $GITHUB_STEP_SUMMARY
32
+ echo "A commit was pushed directly to \`${GITHUB_REF##*/}\` by **${GITHUB_ACTOR}**." >> $GITHUB_STEP_SUMMARY
33
+ echo "" >> $GITHUB_STEP_SUMMARY
34
+ echo "💡 It's recommended to use pull requests for traceability and CI validation." >> $GITHUB_STEP_SUMMARY
35
+ else
36
+ echo "✅ Merge or bot commit detected — no action needed."
37
+ fi
@@ -58,6 +58,10 @@ jobs:
58
58
  - name: Install jq
59
59
  run: sudo apt-get install -y jq
60
60
 
61
+ - name: Run npm audit
62
+ run: npm audit --audit-level=moderate
63
+ continue-on-error: true
64
+
61
65
  - name: Run JSDoc lint check
62
66
  id: jsdoc_lint
63
67
  continue-on-error: true
@@ -0,0 +1,95 @@
1
+ # .github/workflows/probely-scan.yml
2
+ #
3
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
4
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ # This file is part of Network Pro
6
+
7
+ name: Weekly DAST Scan (Probely)
8
+
9
+ on:
10
+ schedule:
11
+ - cron: '0 9 * * 2' # Every Tuesday, 9 AM UTC
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ dast-scan:
16
+ runs-on: ubuntu-24.04
17
+ permissions:
18
+ contents: read
19
+ actions: read
20
+ id-token: none
21
+
22
+ env:
23
+ PROBELY_API_KEY: ${{ secrets.PROBELY_API_KEY }}
24
+ TARGET_ID: 3by8xa6kzArN
25
+ API_BASE: https://api.probely.com/v2 # Always include /v2
26
+ MAX_WAIT_MINUTES: 60 # configurable
27
+
28
+ steps:
29
+ - name: Start Probely Scan
30
+ id: start-scan
31
+ run: |
32
+ echo "🧪 Triggering Probely scan for target $TARGET_ID ..."
33
+ response=$(curl -s -X POST "$API_BASE/targets/$TARGET_ID/scans/" \
34
+ -H "Authorization: JWT $PROBELY_API_KEY" \
35
+ -H "Content-Type: application/json" \
36
+ -d '{}')
37
+
38
+ echo "Raw API response:"
39
+ echo "$response" | jq .
40
+
41
+ scan_id=$(echo "$response" | jq -r '.id // empty')
42
+
43
+ if [ -z "$scan_id" ]; then
44
+ echo "::error ::Failed to start scan — check API key, target ID, or base URL."
45
+ exit 1
46
+ fi
47
+
48
+ echo "scan_id=$scan_id" >> $GITHUB_ENV
49
+ echo "✅ Scan started with ID: $scan_id"
50
+
51
+ - name: Wait for Scan Completion
52
+ run: |
53
+ echo "⏳ Waiting for scan $scan_id to complete..."
54
+ elapsed=0
55
+ while [ $elapsed -lt $((MAX_WAIT_MINUTES * 60)) ]; do
56
+ status=$(curl -s "$API_BASE/scans/$scan_id/" \
57
+ -H "Authorization: JWT $PROBELY_API_KEY" | jq -r '.status // empty')
58
+
59
+ echo "⏱️ Status: $status (elapsed $elapsed sec)"
60
+
61
+ if [ "$status" = "completed" ]; then
62
+ echo "✅ Scan completed successfully."
63
+ break
64
+ elif [ "$status" = "failed" ]; then
65
+ echo "::error ::Scan failed."
66
+ exit 1
67
+ fi
68
+
69
+ sleep 60
70
+ elapsed=$((elapsed + 60))
71
+ done
72
+
73
+ if [ "$status" != "completed" ]; then
74
+ echo "::error ::Scan did not complete in time ($MAX_WAIT_MINUTES min timeout)."
75
+ exit 1
76
+ fi
77
+
78
+ - name: Download Probely HTML Report
79
+ run: |
80
+ echo "📥 Downloading report for scan $scan_id ..."
81
+ curl -s "$API_BASE/scans/$scan_id/report/" \
82
+ -H "Authorization: JWT $PROBELY_API_KEY" \
83
+ -o probely-report.html
84
+
85
+ if [ ! -s probely-report.html ]; then
86
+ echo "::error ::Report file is empty or missing."
87
+ exit 1
88
+ fi
89
+ echo "✅ Report saved as probely-report.html"
90
+
91
+ - name: Upload report artifact
92
+ uses: actions/upload-artifact@v5
93
+ with:
94
+ name: probely-report
95
+ path: probely-report.html
@@ -19,6 +19,8 @@ jobs:
19
19
  contents: read
20
20
  security-events: write
21
21
  issues: write
22
+ env:
23
+ CODEQL_ACTION_ANALYSIS_KEY: gitleaks
22
24
  steps:
23
25
  # ---------------------------------------------------------------------
24
26
  # Checkout the full repo history (needed for Gitleaks to scan all commits)
package/CHANGELOG.md CHANGED
@@ -22,6 +22,85 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
22
22
 
23
23
  ---
24
24
 
25
+ ## [1.24.5]
26
+
27
+ ### Added
28
+
29
+ - Introduced **Branch Guard workflow** (`.github/workflows/branch-guard.yml`) to automatically enforce branch protection policies.
30
+ - Ensures consistent branch naming conventions.
31
+ - Blocks direct pushes to protected branches (e.g., `master`, `main`, and `release/*`).
32
+ - Provides early validation for pull requests and feature branches to maintain repository integrity.
33
+ - Introduced comprehensive pre-push checks for code consistency and style compliance.
34
+ - Added optional `simple-git-hooks` configuration to automate local linting before commits or pushes.
35
+ - Implemented `lint:all` script using `npm-run-all` for efficient, parallel execution of linters.
36
+ - Ensures **ESLint**, **Stylelint**, **Markdownlint**, and **Prettier** all run before code is committed, improving codebase hygiene and preventing formatting drift.
37
+ - Designed for **developer-side speed and reliability**, running linters in parallel while deferring `format` (Prettier) until after lint checks complete for safety.
38
+ - Added **hybrid linting configuration**:
39
+ - Parallel execution for static lint tasks (`eslint`, `stylelint`, `markdownlint`).
40
+ - Sequential Prettier formatting step for deterministic, race-free execution.
41
+
42
+ ### Changed
43
+
44
+ - Reorganized local linting commands for clarity and consistency, consolidating redundant sequential scripts into the `lint:all` aggregator.
45
+ - Improved developer experience with faster pre-push validations and clearer script naming conventions.
46
+ - Bumped project version to `v1.24.5`.
47
+
48
+ ### Developer Experience
49
+
50
+ - Enhanced local development workflow by introducing **fast, parallel linting** and **optional pre-commit hooks**, reducing turnaround time for style and quality checks.
51
+ - Simplified npm scripts for readability and maintainability by adopting `npm-run-all` as the central task runner.
52
+
53
+ ### Notes
54
+
55
+ - For instructions on installing and configuring the new dependencies, please see the **[Editor Configuration](https://github.com/netwk-pro/netwk-pro.github.io/wiki/Editor-Configuration#automation)** section of the [Wiki](https://github.com/netwk-pro/netwk-pro.github.io/wiki).
56
+
57
+ ---
58
+
59
+ ## [1.24.4]
60
+
61
+ ### Documentation
62
+
63
+ - Added a **Continuous Security & Dependency Checks** section to `README.md`, outlining the automated vulnerability and dependency analysis integrated into CI/CD workflows.
64
+
65
+ ### Added
66
+
67
+ - Introduced **non-blocking** `npm audit` **step** in the `build-and-publish.yml` workflow to automatically detect known vulnerabilities during dependency installation.
68
+ - Introduced **[Probely](https://probely.com/) Dynamic Application Security Testing (DAST)** integration via a new GitHub Actions workflow at `.github/workflows/probely-scan.yml`.
69
+ - Executes **weekly automated scans** of the `audit.netwk.pro` environment every Tuesday at 09:00 UTC.
70
+ - Authenticates securely using a scoped **API key** stored in GitHub Secrets (`PROBELY_API_KEY`).
71
+ - Polls the Probely API for scan completion and retrieves the full **HTML vulnerability report**.
72
+ - Uploads reports as workflow **artifacts** for maintainers to review.
73
+ - Includes a 60-minute timeout and supports manual triggering via `workflow_dispatch`.
74
+ - Configured for **read-only testing** against non-production environments to safely identify potential web and API vulnerabilities.
75
+ - Future updates will introduce automated issue creation and alerting for high-severity findings.
76
+
77
+ ### Changed
78
+
79
+ - Updated `static/robots.txt` to exclude redirect routes and sensitive/internal endpoints (e.g., `/api`, `/relay-*`, `/consultation`, `/contact`, `/status`, etc.) from automated crawlers and vulnerability scanners.
80
+ - Bumped project version to `v1.24.4`.
81
+
82
+ ### Security
83
+
84
+ - Enhanced continuous security coverage through the addition of **Probely DAST** for dynamic web and API vulnerability testing.
85
+ - Maintained and improved **GitLeaks** secret scanning across pull requests and scheduled full-history scans.
86
+ - Together, these workflows now provide full-spectrum coverage across **SAST** (static analysis) and **DAST** (dynamic analysis) layers within the CI/CD pipeline.
87
+
88
+ ---
89
+
90
+ ## [1.24.3]
91
+
92
+ ### Changed
93
+
94
+ - Bumped project version to `v1.24.3`.
95
+ - Updated `.github/workflows/secret-scan.yml` to utilize a unique `CODEQL_ACTION_ANALYSIS_KEY` to avoid conflicts with CodeQL.
96
+ - Updated `static/robots.txt` to disallow crawling of the `/api` route.
97
+
98
+ ### Fixed
99
+
100
+ - Corrected naming of `static/7cbb39ce-750b-43da-83b8-8980e5554d4d.txt`.
101
+
102
+ ---
103
+
25
104
  ## [1.24.2]
26
105
 
27
106
  ### Added
@@ -88,6 +167,12 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
88
167
  - `globals` `^16.4.0` → `^16.5.0`
89
168
  - `posthog-js` `^1.282.0` → `^1.284.0`
90
169
 
170
+ ### Security
171
+
172
+ - Added **automated SAST scanning** via GitLeaks to prevent secrets and credentials from being committed.
173
+ - Implemented **security event reporting** via GitHub’s Code Scanning interface (SARIF upload supported).
174
+ - Configured **automated notifications** for detected leaks via GitHub Issues and optional ntfy alerts.
175
+
91
176
  ---
92
177
 
93
178
  ## [1.23.0] - 2025-10-30
@@ -199,7 +284,7 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
199
284
  - Updated the text of `ServicesContent.svelte`.
200
285
  - Increased default Playwright test timeouts for navigation-sensitive suites (Desktop and Mobile) to improve stability under CI latency conditions.
201
286
  - Implemented `Promise.all()` pattern for combined click and navigation waits, reducing flakiness in route transition tests.
202
- - Updated the `'about' link` navigation tests in both Desktop and Mobile scenarios to include:
287
+ - Updated the `about` link navigation tests in both Desktop and Mobile scenarios to include:
203
288
  - Explicit `page.waitForLoadState('domcontentloaded')` calls before assertions.
204
289
  - Extended per-suite timeouts (`90s`) using `test.setTimeout(90000)` for reliability on slower environments.
205
290
  - Added fallback `waitForURL('\*\*/about', { timeout: 60000 })` to ensure deterministic routing checks.
@@ -1430,7 +1515,10 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
1430
1515
 
1431
1516
  <!-- Link references -->
1432
1517
 
1433
- [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.24.2...HEAD
1518
+ [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.24.5...HEAD
1519
+ [1.24.5]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.24.5
1520
+ [1.24.4]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.24.4
1521
+ [1.24.3]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.24.3
1434
1522
  [1.24.2]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.24.2
1435
1523
  [1.24.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.24.1
1436
1524
  [1.24.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.24.0
package/README.md CHANGED
@@ -36,6 +36,7 @@ All infrastructure and data flows are designed with **maximum transparency, self
36
36
  - [Repository Structure](#structure)
37
37
  - [Getting Started](#getting-started)
38
38
  - [Configuration](#configuration)
39
+ - [Security & Dependency Checks](#security)
39
40
  - [Service Worker Utilities](#sw-utilities)
40
41
  - [Debug Mode](#debug)
41
42
  - [CSP Report Handler](#cspreport)
@@ -190,8 +191,6 @@ To implement a strict nonce-based CSP in the future:
190
191
 
191
192
  Note: Strict CSP adoption may require restructuring third-party integrations and deeper framework coordination.
192
193
 
193
- > 💡 The `[headers]` block in `netlify.toml` has been deprecated — all headers are now set dynamically from within SvelteKit.
194
-
195
194
  &nbsp;
196
195
 
197
196
  ### 🧭 `hooks.client.ts`
@@ -208,6 +207,27 @@ Client-side PWA logic (such as handling the `beforeinstallprompt` event, checkin
208
207
 
209
208
  ---
210
209
 
210
+ <section id="security">
211
+
212
+ ## 🧩 Continuous Security & Dependency Checks
213
+
214
+ Network Pro&trade; automatically performs dependency and vulnerability checks as part of its CI/CD pipeline:
215
+
216
+ - **GitLeaks Secret Scanning** — detects potential secrets and credentials in commits, pull requests, and full-history scans.
217
+ - **CodeQL Analysis** — runs static code scanning to detect code-level vulnerabilities.
218
+ - **Probely DAST Scans** — executes weekly external scans on the audit deployment (`audit.netwk.pro`) to identify web application vulnerabilities.
219
+ - **npm Audit** — runs during the build phase to detect known vulnerabilities in installed dependencies (`npm audit --audit-level=moderate`).
220
+ - **Dependabot** — automatically monitors and updates outdated dependencies via pull requests.
221
+ - **ESLint, Prettier, etc. (Local)** — enforces code quality and consistency during local development before commits.
222
+
223
+ Each tool is configured to run in a safe, non-production environment to ensure reliability and protect sensitive data.
224
+
225
+ </section>
226
+
227
+ <sub>[Back to top](#top)</sub>
228
+
229
+ ---
230
+
211
231
  <section id="sw-utilities">
212
232
 
213
233
  ## ⚙️ Service Worker Utilities
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
3
  "private": false,
4
- "version": "1.24.2",
4
+ "version": "1.24.5",
5
5
  "description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
6
6
  "keywords": [
7
7
  "advisory",
@@ -41,16 +41,16 @@
41
41
  "build:vercel": "vercel build",
42
42
  "preview": "vite preview",
43
43
  "css:bundle": "node scripts/bundleCss.js",
44
- "prepare": "svelte-kit sync || echo ''",
44
+ "prepare": "svelte-kit sync && npx simple-git-hooks || echo ''",
45
45
  "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json",
46
46
  "check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch",
47
47
  "type-check": "svelte-check --tsconfig ./jsconfig.json",
48
48
  "lint:types": "npm run type-check",
49
49
  "check:env": "node scripts/checkEnv.js",
50
50
  "check:node": "node scripts/checkNode.js",
51
- "checkout": "npm run check:node && npm run test:all && npm run lint:all && npm run check",
51
+ "checkout": "npm-run-all check:node test:all lint:all check",
52
52
  "verify": "npm run checkout",
53
- "delete": "rm -rf build .svelte-kit node_modules package-lock.json",
53
+ "delete": "rm -rf .svelte-kit node_modules package-lock.json",
54
54
  "clean": "npm run delete && npm cache clean --force && npm install",
55
55
  "upgrade": "ncu -u --format group --color",
56
56
  "check:updates": "ncu --format group --color",
@@ -69,14 +69,18 @@
69
69
  "lint:jsdoc": "eslint . --ext .js,.cjs,.mjs,.svelte --max-warnings=0",
70
70
  "lint:css": "stylelint \"**/*.{css,svelte}\" --ignore-path .stylelintignore",
71
71
  "lint:md": "npx markdownlint-cli2 \"**/*.{md,markdown}\" \"#node_modules/**\" \"#playwright-report/**\" \"#test-results/**\"",
72
- "lint:all": "npm run lint && npm run lint:md && npm run lint:css && npm run format",
73
72
  "format": "prettier --check .",
74
73
  "format:fix": "prettier --write .",
74
+ "lint:all": "npm-run-all --parallel --print-label lint lint:md lint:css --sequential format",
75
75
  "lhci": "lhci",
76
76
  "lhci:run": "lhci autorun --config=.lighthouserc.cjs",
77
77
  "audit:coverage": "vitest run tests/internal/auditCoverage.test.js",
78
78
  "postinstall": "npm run check:node"
79
79
  },
80
+ "simple-git-hooks": {
81
+ "pre-commit": "if [ \"$CI\" = \"true\" ]; then exit 0; else npm run lint:all; fi",
82
+ "pre-push": "if [ \"$CI\" = \"true\" ]; then exit 0; else npm run checkout; fi"
83
+ },
80
84
  "dependencies": {
81
85
  "dompurify": "^3.3.0",
82
86
  "posthog-js": "^1.284.0",
@@ -105,10 +109,12 @@
105
109
  "lightningcss": "^1.30.2",
106
110
  "markdownlint": "^0.39.0",
107
111
  "markdownlint-cli2": "^0.18.1",
112
+ "npm-run-all": "^4.1.5",
108
113
  "playwright": "^1.56.1",
109
114
  "postcss": "^8.5.6",
110
115
  "prettier": "3.6.2",
111
116
  "prettier-plugin-svelte": "^3.4.0",
117
+ "simple-git-hooks": "^2.13.1",
112
118
  "stylelint": "^16.25.0",
113
119
  "stylelint-config-html": "^1.1.0",
114
120
  "stylelint-config-recommended": "^17.0.0",
package/static/robots.txt CHANGED
@@ -17,12 +17,34 @@ Disallow: /coverage/
17
17
  Disallow: /build/
18
18
  Disallow: /.lighthouseci/
19
19
 
20
- # Disallow stub routes that redirect externally
20
+ # --- Dynamic / redirect handlers
21
+ Disallow: /relay-
22
+ Disallow: /api/
23
+ Disallow: /api/mock-csp
24
+
25
+ # --- Stub and form routes
21
26
  Disallow: /contact
22
27
  Disallow: /privacy-rights
23
28
  Disallow: /consultation
24
29
  Disallow: /links
25
30
  Disallow: /posts
31
+ Disallow: /privacy-rights
32
+
33
+ # --- Error / system routes
34
+ Disallow: /..404
35
+ Disallow: /status
36
+
37
+ # --- Optional: service utilities or PWA
38
+ Disallow: /service-worker
39
+ Disallow: /service-worker.js
40
+ Disallow: /service-worker.d.ts
41
+
42
+ # --- Futureproof catch-alls
43
+ Disallow: /admin
44
+ Disallow: /preview
45
+ Disallow: /redirect
46
+ Disallow: /mock-csp
47
+ Disallow: /csp
26
48
 
27
49
  # Allow everything else
28
50
  Allow: /