@networkpro/web 1.21.1 → 1.22.1
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.
- package/CHANGELOG.md +102 -2
- package/README.md +3 -10
- package/package.json +8 -8
- package/src/app.html +1 -12
- package/src/lib/components/Logo.svelte +2 -7
- package/src/lib/components/layout/HeaderDefault.svelte +2 -3
- package/src/lib/data/fossData.js +8 -0
- package/src/lib/data/pgpKeys.js +82 -0
- package/src/lib/images.js +46 -17
- package/src/lib/index.js +8 -2
- package/src/lib/pages/AboutContent.svelte +107 -111
- package/src/lib/pages/FossContent.svelte +1 -1
- package/src/lib/pages/HomeContent.svelte +11 -8
- package/src/lib/pages/LicenseContent.svelte +1 -1
- package/src/lib/pages/PGPContent.svelte +19 -40
- package/src/lib/pages/PrivacyContent.svelte +6 -3
- package/src/lib/pages/PrivacyDashboard.svelte +5 -2
- package/src/lib/pages/ServicesContent.svelte +7 -4
- package/src/lib/pages/TermsConditionsContent.svelte +1 -1
- package/src/lib/pages/TermsUseContent.svelte +3 -3
- package/src/lib/styles/css/default.css +1 -1
- package/src/lib/styles/global.min.css +1 -1
- package/src/lib/types/appConstants.js +6 -3
- package/src/service-worker.js +3 -11
- package/static/icon-about.png +0 -0
- package/static/manifest.json +17 -4
- package/static/pgp/support@netwk.pro.asc +77 -0
- package/static/sitemap.xml +5 -5
- package/tests/e2e/app.spec.js +8 -3
- package/tests/e2e/mobile.spec.js +12 -3
- package/src/lib/img/qr/pgp-github.png +0 -0
- package/src/lib/img/qr/pgp-github.webp +0 -0
- package/static/pgp/pgp-contact.png +0 -0
- package/static/pgp/pgp-contact.webp +0 -0
- package/static/pgp/pgp-github.png +0 -0
- package/static/pgp/pgp-github.webp +0 -0
- package/static/pgp/pgp-security.png +0 -0
- package/static/pgp/pgp-security.webp +0 -0
- package/static/pgp/pgp-support.png +0 -0
- package/static/pgp/pgp-support.webp +0 -0
- package/static/pgp/support@neteng.pro.asc +0 -47
- package/static/pgp/vcard.png +0 -0
- package/static/pgp/vcard.webp +0 -0
- /package/{static → src/lib}/img/powered-by-proton.svg +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -22,6 +22,104 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
|
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
+
## [1.22.1] - 2025-10-21
|
|
26
|
+
|
|
27
|
+
### Documentation
|
|
28
|
+
|
|
29
|
+
- Updated directory structure and **static/pgp** section of `README.md`.
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- Bumped project version to `v1.22.1`.
|
|
34
|
+
- Updated the text and layout of `AboutContent.svelte`.
|
|
35
|
+
- Added a link to the privacy email address in `PrivacyContent.svelte` and `PrivacyDashboard.svelte` for easier access.
|
|
36
|
+
- Updated the text of `ServicesContent.svelte`.
|
|
37
|
+
- Increased default Playwright test timeouts for navigation-sensitive suites (Desktop and Mobile) to improve stability under CI latency conditions.
|
|
38
|
+
- Implemented `Promise.all()` pattern for combined click and navigation waits, reducing flakiness in route transition tests.
|
|
39
|
+
- Updated the `'about' link'\*\* navigation tests in both Desktop and Mobile scenarios to include:
|
|
40
|
+
- Explicit `page.waitForLoadState('domcontentloaded')` calls before assertions.
|
|
41
|
+
- Extended per-suite timeouts (`90s`) using `test.setTimeout(90000)` for reliability on slower environments.
|
|
42
|
+
- Added fallback `waitForURL('\*\*/about', { timeout: 60000 })` to ensure deterministic routing checks.
|
|
43
|
+
- Adjusted test structure for consistency across device profiles and browsers.
|
|
44
|
+
- Verified local runs remain performant while increasing tolerance for **CI network latency**.
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- Corrected `TermsUseContent.svelte` to reflect hosting by Vercel, not Netlify.
|
|
49
|
+
- Corrected license identifier syntax on the following pages:
|
|
50
|
+
- `AboutContent.svelte`
|
|
51
|
+
- `FossContent.svelte`
|
|
52
|
+
- `LicenseContent.svelte`
|
|
53
|
+
- `PrivacyContent.svelte`
|
|
54
|
+
- `PrivacyDashboard.svelte`
|
|
55
|
+
- `ServicesContent.svelte`
|
|
56
|
+
- `TermsConditionsContent.svelte`
|
|
57
|
+
- `TermsUseContent.svelte`
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## [1.22.0] - 2025-10-20
|
|
62
|
+
|
|
63
|
+
### Added
|
|
64
|
+
|
|
65
|
+
- Introduced **dynamic QR code image imports** using `import.meta.glob` in `src/lib/images.js`.
|
|
66
|
+
- Implemented new `getQR()` helper function for streamlined QR lookups.
|
|
67
|
+
- Added `QR_IMAGES` registry for centralized QR asset management.
|
|
68
|
+
- Created dedicated PGP key data module (`src/lib/data/pgpKeys.js`) with dynamic QR bindings.
|
|
69
|
+
- Added new app constants (`EMAIL_LINK`, `SECURE_LINK`, `PRIVACY_LINK`) to:
|
|
70
|
+
- `src/lib/index.js`
|
|
71
|
+
- `src/lib/types/appConstants.js`
|
|
72
|
+
- Re-exported `src/lib/data/pgpKeys.js` from `src/lib/index.js`.
|
|
73
|
+
- Added favicon and manifest entry for `icon-about.png`.
|
|
74
|
+
- Introduced updated **contact assets block** in `AboutContent.svelte` with enhanced typing.
|
|
75
|
+
- Exported `src/lib/img/powered-by-proton.svg` from `src/lib/images.js`.
|
|
76
|
+
- Added missing JSDoc annotation to `src/lib/data/fossData.js`.
|
|
77
|
+
- Added updated PGP key for `support@netwk.pro` (previously `support@neteng.pro`).
|
|
78
|
+
|
|
79
|
+
### Changed
|
|
80
|
+
|
|
81
|
+
- Bumped project version to `v1.22.0`.
|
|
82
|
+
- Updated generator metadata in `src/app.html` to reflect **SvelteKit 2.47.2**.
|
|
83
|
+
- Refactored **PGPContent.svelte** to use the `getQR()` helper and dynamic QR registry.
|
|
84
|
+
- Refactored **AboutContent.svelte** to use the centralized `PGP_KEYS` dataset and app constants.
|
|
85
|
+
- Split PGP key fingerprints into two lines for improved readability.
|
|
86
|
+
- Enhanced **images.js** with support for eager QR image imports.
|
|
87
|
+
- Replaced static PGP imports with automated dynamic resolution.
|
|
88
|
+
- Updated **manifest.json** to reference the new app icon.
|
|
89
|
+
- Revised layout and text consistency for PGP and contact sections in **AboutContent.svelte**.
|
|
90
|
+
- Updated type definitions in `src/lib/types/appConstants.js` for `CONTACT` constants.
|
|
91
|
+
- Cleaned up unused imports and improved inline JSDoc typings throughout the app.
|
|
92
|
+
- Updated asset references in `IGNORE_PATHS` and `REQUIRED_ASSETS` in `src/service-worker.js`.
|
|
93
|
+
- Added spacing adjustments to the tagline in **Logo.svelte**.
|
|
94
|
+
- Updated **HeaderDefault.svelte** to reference the global constant for the **Blog** link.
|
|
95
|
+
- Revised text and app constant usage in **HomeContent.svelte**.
|
|
96
|
+
- Updated the contact section and **Effective Date** in **ServicesContent.svelte**.
|
|
97
|
+
- Rebuilt `src/lib/styles/global.min.css` using **LightningCSS**.
|
|
98
|
+
- Refreshed `_Last Modified_` timestamps in `static/sitemap.xml`.
|
|
99
|
+
|
|
100
|
+
### Fixed
|
|
101
|
+
|
|
102
|
+
- Fixed SSR error caused by missing `getQR` reference during page load.
|
|
103
|
+
- Corrected destructuring of `CONTACT` constants during SSR initialization.
|
|
104
|
+
- Fixed fingerprint rendering fallback when fingerprint type was non-array.
|
|
105
|
+
- Adjusted QR image alignment and eager/lazy decoding behavior.
|
|
106
|
+
|
|
107
|
+
### Removed
|
|
108
|
+
|
|
109
|
+
- Deleted outdated static assets from `static/pgp`, replaced with dynamically loaded QR images.
|
|
110
|
+
- Removed redundant manual image imports from legacy sections of `images.js`.
|
|
111
|
+
- Removed unnecessary comment block from the `<head>` section of `src/app.html`.
|
|
112
|
+
- Removed `font-weight: bold` property from the `.fingerprint` CSS class in `src/lib/styles/css/default.css`.
|
|
113
|
+
|
|
114
|
+
### 🧩 Technical Notes
|
|
115
|
+
|
|
116
|
+
- Updated `vite` from `v7.1.10` → `v7.1.11` to address **CVE-2025-62522**.
|
|
117
|
+
- Updated dependencies for SvelteKit `2.47.2` compatibility:
|
|
118
|
+
- `@sveltejs/kit`, `svelte`, `vite`, and `eslint`-related plugins.
|
|
119
|
+
- Cleaned up build cache and service worker registration logic in `src/service-worker.js`.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
25
123
|
## [1.21.1] - 2025-10-17
|
|
26
124
|
|
|
27
125
|
### Added
|
|
@@ -1169,7 +1267,9 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
|
|
|
1169
1267
|
|
|
1170
1268
|
<!-- Link references -->
|
|
1171
1269
|
|
|
1172
|
-
[Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.
|
|
1270
|
+
[Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.22.1...HEAD
|
|
1271
|
+
[1.22.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.22.1
|
|
1272
|
+
[1.22.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.22.0
|
|
1173
1273
|
[1.21.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.21.1
|
|
1174
1274
|
[1.21.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.21.0
|
|
1175
1275
|
[1.20.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.20.0
|
|
@@ -1210,4 +1310,4 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
|
|
|
1210
1310
|
[1.12.3]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.3
|
|
1211
1311
|
[1.12.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.1
|
|
1212
1312
|
|
|
1213
|
-
<!-- cspell:ignore qrcode cryptom otphelp -->
|
|
1313
|
+
<!-- cspell:ignore qrcode cryptom otphelp domcontentloaded -->
|
package/README.md
CHANGED
|
@@ -83,7 +83,7 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog
|
|
|
83
83
|
│ ├── hooks.server.js # Injects CSP headers and permissions policy
|
|
84
84
|
│ └── service-worker.js # Custom PWA service worker
|
|
85
85
|
├── static/ # Public assets served at site root
|
|
86
|
-
│ ├── pgp/ # PGP keys
|
|
86
|
+
│ ├── pgp/ # PGP keys
|
|
87
87
|
│ ├── disableSw.js # Service worker bypass (via ?nosw param)
|
|
88
88
|
│ ├── manifest.json # PWA metadata
|
|
89
89
|
│ ├── robots.txt # SEO: allow/disallow crawlers
|
|
@@ -106,26 +106,19 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog
|
|
|
106
106
|
|
|
107
107
|
### 🔐 `static/pgp/` Directory Structure
|
|
108
108
|
|
|
109
|
-
This directory contains public PGP key files
|
|
109
|
+
This directory contains public PGP key files. Their corresponding QR code images are now loaded dynamically from `src/lib/img/qr`. A dynamic QR code import utility in `src/lib/images.js` allows these files to be imported directly from `$lib`.
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
112
|
static/
|
|
113
113
|
├── pgp/
|
|
114
114
|
│ ├── contact@s.neteng.pro.asc # Public key for secure email
|
|
115
|
-
│ ├── pgp-contact.png # QR code (PNG) for secure email key
|
|
116
|
-
│ ├── pgp-contact.webp # Optimized WebP version of the QR code
|
|
117
|
-
│ ├── pgp-security.png # QR code (PNG) for security contact key
|
|
118
|
-
│ ├── pgp-security.webp # WebP version of the security QR code
|
|
119
|
-
│ ├── pgp-support.png # QR code (PNG) for support key
|
|
120
|
-
│ ├── pgp-support.webp # WebP version of the support QR code
|
|
121
115
|
│ ├── security@s.neteng.pro.asc # Public key for security contact
|
|
122
116
|
│ ├── support@neteng.pro.asc # Public key for general support
|
|
123
117
|
└── ...
|
|
124
118
|
```
|
|
125
119
|
|
|
126
120
|
- `.asc` files are **excluded from service worker precaching** but served directly via the `/pgp/[key]` route.
|
|
127
|
-
- QR code images are **served
|
|
128
|
-
- **WebP versions** are also used in the `/pgp` route, while the `/about` route imports **dynamic equivalents** from `src/lib/img/qr`.
|
|
121
|
+
- QR code images—including WebP and PNG versions—are **served dynamically** from `src/lib/img/qr` using `<picture>` elements.
|
|
129
122
|
- This route does **not use fallback rendering**; only explicitly defined files are available and expected to resolve.
|
|
130
123
|
- A dynamic `[key]/+server.js` handler under `src/routes/pgp/` serves the `.asc` files with appropriate `Content-Type` and download headers.
|
|
131
124
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@networkpro/web",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.22.1",
|
|
5
5
|
"description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"advisory",
|
|
@@ -78,9 +78,9 @@
|
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
80
|
"dompurify": "^3.3.0",
|
|
81
|
-
"posthog-js": "^1.
|
|
81
|
+
"posthog-js": "^1.278.0",
|
|
82
82
|
"semver": "^7.7.3",
|
|
83
|
-
"svelte": "5.
|
|
83
|
+
"svelte": "5.41.1"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
86
|
"@eslint/compat": "^1.4.0",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"@lhci/cli": "^0.15.1",
|
|
89
89
|
"@playwright/test": "^1.56.1",
|
|
90
90
|
"@sveltejs/adapter-vercel": "^6.0.0",
|
|
91
|
-
"@sveltejs/kit": "2.47.
|
|
91
|
+
"@sveltejs/kit": "2.47.2",
|
|
92
92
|
"@sveltejs/vite-plugin-svelte": "^6.2.1",
|
|
93
93
|
"@testing-library/jest-dom": "^6.9.1",
|
|
94
94
|
"@testing-library/svelte": "^5.2.8",
|
|
@@ -97,8 +97,8 @@
|
|
|
97
97
|
"browserslist": "^4.26.3",
|
|
98
98
|
"eslint": "^9.38.0",
|
|
99
99
|
"eslint-config-prettier": "^10.1.8",
|
|
100
|
-
"eslint-plugin-jsdoc": "^61.1.
|
|
101
|
-
"eslint-plugin-svelte": "^3.12.
|
|
100
|
+
"eslint-plugin-jsdoc": "^61.1.5",
|
|
101
|
+
"eslint-plugin-svelte": "^3.12.5",
|
|
102
102
|
"globals": "^16.4.0",
|
|
103
103
|
"jsdom": "26.1.0",
|
|
104
104
|
"lightningcss": "^1.30.2",
|
|
@@ -113,10 +113,10 @@
|
|
|
113
113
|
"stylelint-config-recommended": "^17.0.0",
|
|
114
114
|
"stylelint-order": "^7.0.0",
|
|
115
115
|
"svelte-check": "^4.3.3",
|
|
116
|
-
"svelte-eslint-parser": "^1.
|
|
116
|
+
"svelte-eslint-parser": "^1.4.0",
|
|
117
117
|
"svelte-preprocess": "^6.0.3",
|
|
118
118
|
"typescript": "^5.9.3",
|
|
119
|
-
"vite": "^7.1.
|
|
119
|
+
"vite": "^7.1.11",
|
|
120
120
|
"vite-plugin-lightningcss": "^0.0.5",
|
|
121
121
|
"vite-tsconfig-paths": "^5.1.4",
|
|
122
122
|
"vitest": "^3.2.4"
|
package/src/app.html
CHANGED
|
@@ -24,17 +24,6 @@
|
|
|
24
24
|
sizes="any"
|
|
25
25
|
type="image/x-icon" />
|
|
26
26
|
|
|
27
|
-
<!-- Preconnect to PostHog domains
|
|
28
|
-
<link
|
|
29
|
-
rel="preconnect"
|
|
30
|
-
href="https://us.i.posthog.com"
|
|
31
|
-
crossorigin="anonymous" />
|
|
32
|
-
<link
|
|
33
|
-
rel="preconnect"
|
|
34
|
-
href="https://us-assets.i.posthog.com"
|
|
35
|
-
crossorigin="anonymous" />
|
|
36
|
-
-->
|
|
37
|
-
|
|
38
27
|
<!-- Preload FontAwesome webfonts -->
|
|
39
28
|
<link
|
|
40
29
|
rel="preload"
|
|
@@ -64,7 +53,7 @@
|
|
|
64
53
|
content="bx4ham0zkpvzztzu213bhpt76m9siq" />
|
|
65
54
|
<!-- cspell:enable -->
|
|
66
55
|
|
|
67
|
-
<meta name="generator" content="SvelteKit 2.47.
|
|
56
|
+
<meta name="generator" content="SvelteKit 2.47.2" />
|
|
68
57
|
|
|
69
58
|
<script src="/disableSw.js"></script>
|
|
70
59
|
|
|
@@ -75,12 +75,6 @@ This file is part of Network Pro.
|
|
|
75
75
|
* @type {"high" | "low" | "auto"}
|
|
76
76
|
*/
|
|
77
77
|
export let fetchpriority = 'high';
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Tagline text to display.
|
|
81
|
-
* @type {string}
|
|
82
|
-
*/
|
|
83
|
-
export let tagline = 'Security | Networking | Privacy';
|
|
84
78
|
</script>
|
|
85
79
|
|
|
86
80
|
<!-- BEGIN LOGO AND SITE TITLE -->
|
|
@@ -107,6 +101,7 @@ This file is part of Network Pro.
|
|
|
107
101
|
<div class="spacer"></div>
|
|
108
102
|
|
|
109
103
|
{#if showTagline}
|
|
110
|
-
<h2 class="index-title2"
|
|
104
|
+
<h2 class="index-title2"
|
|
105
|
+
>{['Security', 'Networking', 'Privacy'].join(' \u00A0 | \u00A0 ')}</h2>
|
|
111
106
|
{/if}
|
|
112
107
|
<!-- END LOGO AND SITE TITLE -->
|
|
@@ -15,14 +15,13 @@ This file is part of Network Pro.
|
|
|
15
15
|
|
|
16
16
|
//console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
17
17
|
|
|
18
|
-
const { PAGE } = CONSTANTS;
|
|
18
|
+
const { PAGE, LINKS } = CONSTANTS;
|
|
19
19
|
|
|
20
20
|
const homeLink = base || '/';
|
|
21
21
|
const aboutLink = `${base}/about`;
|
|
22
22
|
const servLink = `${base}/services`;
|
|
23
23
|
const lhubLink = `${base}/links`;
|
|
24
24
|
const fossLink = `${base}/foss-spotlight`;
|
|
25
|
-
const blogLink = 'https://blog.netwk.pro';
|
|
26
25
|
const discussLink =
|
|
27
26
|
'https://github.com/netwk-pro/netwk-pro.github.io/discussions';
|
|
28
27
|
|
|
@@ -46,7 +45,7 @@ This file is part of Network Pro.
|
|
|
46
45
|
{ label: 'services', href: servLink, target: PAGE.SELF, external: false },
|
|
47
46
|
{
|
|
48
47
|
label: 'blog',
|
|
49
|
-
href:
|
|
48
|
+
href: LINKS.BLOG,
|
|
50
49
|
target: PAGE.SELF,
|
|
51
50
|
external: false,
|
|
52
51
|
},
|
package/src/lib/data/fossData.js
CHANGED
|
@@ -6,6 +6,14 @@ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
|
6
6
|
This file is part of Network Pro.
|
|
7
7
|
========================================================================== */
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* @file fossData.js
|
|
11
|
+
* @description Data for FOSS Spotlight route
|
|
12
|
+
* @module src/lib/data
|
|
13
|
+
* @author Scott Lopez
|
|
14
|
+
* @updated 2025-10-20
|
|
15
|
+
*/
|
|
16
|
+
|
|
9
17
|
// Import FOSS images
|
|
10
18
|
import { acodePng, acodeWbp, cryptomPng, cryptomWbp, eauthPng, eauthWbp, hboardPng, hboardWbp, lsheetPng, lsheetWbp, otphelpPng, otphelpWbp, pmxPng, pmxWbp, squirclePng, squircleWbp, tosPng, tosWbp, urlPng, urlWbp } from "$lib";
|
|
11
19
|
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
src/lib/data/pgpKeys.js
|
|
3
|
+
|
|
4
|
+
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
5
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
6
|
+
This file is part of Network Pro.
|
|
7
|
+
========================================================================== */
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @file pgpKeys.js
|
|
11
|
+
* @description Dedicated data module for PGP key definitions
|
|
12
|
+
* @module src/lib/data
|
|
13
|
+
* @author Scott Lopez
|
|
14
|
+
* @updated 2025-10-20
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { getQR } from '$lib';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @typedef {{ png?: string; webp?: string }} QrImagePair
|
|
21
|
+
*
|
|
22
|
+
* @typedef {QrImagePair & {
|
|
23
|
+
* id: string;
|
|
24
|
+
* name: string;
|
|
25
|
+
* email: string;
|
|
26
|
+
* fingerprint: string;
|
|
27
|
+
* opgp: string;
|
|
28
|
+
* file: string;
|
|
29
|
+
* }} PgpKeyEntry
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Base definitions for PGP keys. Each `id` must match a QR code image name
|
|
34
|
+
* (e.g. "pgp-support" → pgp-support.png / pgp-support.webp).
|
|
35
|
+
*
|
|
36
|
+
* @type {Array<{
|
|
37
|
+
* id: string;
|
|
38
|
+
* name: string;
|
|
39
|
+
* email: string;
|
|
40
|
+
* fingerprint: string;
|
|
41
|
+
* opgp: string;
|
|
42
|
+
* file: string;
|
|
43
|
+
* }>}
|
|
44
|
+
*/
|
|
45
|
+
const BASE_PGP_KEYS = [
|
|
46
|
+
{
|
|
47
|
+
id: 'pgp-support',
|
|
48
|
+
name: 'General Contact & Support',
|
|
49
|
+
email: 'support (at) netwk.pro',
|
|
50
|
+
fingerprint: '6590 B992 E2E3 EFF1 2738 7BCE 2AF0 93E9 DEC6 1BA0',
|
|
51
|
+
opgp: 'https://keys.openpgp.org/search?q=support%40netwk.pro',
|
|
52
|
+
file: '/pgp/support@netwk.pro.asc',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: 'pgp-contact',
|
|
56
|
+
name: 'Secure Email',
|
|
57
|
+
email: 'contact (at) s.neteng.pro',
|
|
58
|
+
fingerprint: 'DF11 8BAA 6C2D 9DCD EBDC 2DDC F993 7349 9495 F957',
|
|
59
|
+
opgp: 'https://keys.openpgp.org/search?q=contact%40s.neteng.pro',
|
|
60
|
+
file: '/pgp/contact@s.neteng.pro.asc',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'pgp-security',
|
|
64
|
+
name: 'Security Contact',
|
|
65
|
+
email: 'security (at) s.neteng.pro',
|
|
66
|
+
fingerprint: 'B7FE 1D4E 6CAB 3E71 4A9F DF6E 48CB 7290 C00D 0DA5',
|
|
67
|
+
opgp: 'https://keys.openpgp.org/search?q=security%40s.neteng.pro',
|
|
68
|
+
file: '/pgp/security@s.neteng.pro.asc',
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Full list of enriched PGP keys, each with dynamically resolved QR images.
|
|
74
|
+
*
|
|
75
|
+
* @type {PgpKeyEntry[]}
|
|
76
|
+
*/
|
|
77
|
+
export const PGP_KEYS = BASE_PGP_KEYS.map((entry) => ({
|
|
78
|
+
...entry,
|
|
79
|
+
...getQR(entry.id),
|
|
80
|
+
}));
|
|
81
|
+
|
|
82
|
+
// cspell:ignore EBDC
|
package/src/lib/images.js
CHANGED
|
@@ -13,7 +13,7 @@ This file is part of Network Pro.
|
|
|
13
13
|
* @description Provides convenient access to images in the src/lib/img directory
|
|
14
14
|
* @module src/lib
|
|
15
15
|
* @author Scott Lopez
|
|
16
|
-
* @updated 2025-
|
|
16
|
+
* @updated 2025-10-20
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
// Import favicon images
|
|
@@ -33,6 +33,7 @@ import bySvg from '$lib/img/by.svg';
|
|
|
33
33
|
import ccSvg from '$lib/img/cc.svg';
|
|
34
34
|
import obtainiumPng from '$lib/img/obtainium.png';
|
|
35
35
|
import obtainiumWbp from '$lib/img/obtainium.webp';
|
|
36
|
+
import protonPower from '$lib/img/powered-by-proton.svg';
|
|
36
37
|
|
|
37
38
|
// Import images for posts
|
|
38
39
|
import acodePng from '$lib/img/posts/acode.png';
|
|
@@ -56,15 +57,47 @@ import tosWbp from '$lib/img/posts/tosdr.webp';
|
|
|
56
57
|
import urlPng from '$lib/img/posts/urlcheck.png';
|
|
57
58
|
import urlWbp from '$lib/img/posts/urlcheck.webp';
|
|
58
59
|
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
import
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
60
|
+
// ================================================================
|
|
61
|
+
// Dynamic QR code image imports
|
|
62
|
+
// ================================================================
|
|
63
|
+
|
|
64
|
+
// Dynamically import all QR code images in src/lib/img/qr
|
|
65
|
+
const qrModules = import.meta.glob('$lib/img/qr/*.{png,webp}', { eager: true });
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Aggregated QR code image lookup.
|
|
69
|
+
* Example: QR_IMAGES['pgp-support'].png → blob URL
|
|
70
|
+
* @typedef {'png' | 'webp'} QRExtension
|
|
71
|
+
* @type {Record<string, { png?: string; webp?: string }>}
|
|
72
|
+
*/
|
|
73
|
+
export const QR_IMAGES = {};
|
|
74
|
+
|
|
75
|
+
// Populate QR_IMAGES
|
|
76
|
+
for (const [path, mod] of Object.entries(qrModules)) {
|
|
77
|
+
// Ensure we’re dealing with an ES module with a default export
|
|
78
|
+
const module = /** @type {{ default: string }} */ (mod);
|
|
79
|
+
|
|
80
|
+
const file = path.split('/').pop();
|
|
81
|
+
if (!file) continue; // file is possibly undefined
|
|
82
|
+
|
|
83
|
+
const [name, ext] = file.split('.');
|
|
84
|
+
if (!QR_IMAGES[name]) QR_IMAGES[name] = {};
|
|
85
|
+
|
|
86
|
+
if (ext === 'png' || ext === 'webp') {
|
|
87
|
+
QR_IMAGES[name][ext] = module.default;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Retrieve QR code image pair (png/webp) by name.
|
|
93
|
+
* Safely returns an empty object if not found.
|
|
94
|
+
*
|
|
95
|
+
* @param {string} name - Base filename (e.g., "pgp-support" or "vcard")
|
|
96
|
+
* @returns {{ png?: string; webp?: string }}
|
|
97
|
+
*/
|
|
98
|
+
export function getQR(name) {
|
|
99
|
+
return QR_IMAGES[name] ?? {};
|
|
100
|
+
}
|
|
68
101
|
|
|
69
102
|
// Re-export all imports
|
|
70
103
|
export {
|
|
@@ -87,19 +120,15 @@ export {
|
|
|
87
120
|
lsheetPng,
|
|
88
121
|
lsheetWbp, obtainiumPng,
|
|
89
122
|
obtainiumWbp, otphelpPng,
|
|
90
|
-
otphelpWbp,
|
|
91
|
-
pgpContactWbp, pgpSecurityPng,
|
|
92
|
-
pgpSecurityWbp, pgpSupportPng,
|
|
93
|
-
pgpSupportWbp, pmxPng,
|
|
123
|
+
otphelpWbp, pmxPng,
|
|
94
124
|
pmxWbp,
|
|
125
|
+
protonPower,
|
|
95
126
|
squirclePng,
|
|
96
127
|
squircleWbp,
|
|
97
128
|
tosPng,
|
|
98
129
|
tosWbp,
|
|
99
130
|
urlPng,
|
|
100
|
-
urlWbp
|
|
101
|
-
vcfPng,
|
|
102
|
-
vcfWbp
|
|
131
|
+
urlWbp
|
|
103
132
|
};
|
|
104
133
|
|
|
105
134
|
// cspell:ignore eauth hboard cryptom tosdr otphelp
|
package/src/lib/index.js
CHANGED
|
@@ -16,7 +16,7 @@ This file is part of Network Pro.
|
|
|
16
16
|
* and re-exported here for flat `$lib` imports.
|
|
17
17
|
* @module src/lib
|
|
18
18
|
* @author Scott Lopez
|
|
19
|
-
* @updated 2025-10-
|
|
19
|
+
* @updated 2025-10-20
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
// Re-export all images so they can be imported directly from `$lib`
|
|
@@ -30,6 +30,9 @@ export * from './components/index.js';
|
|
|
30
30
|
// Re-export all pages so they can be imported directly from `$lib`
|
|
31
31
|
export * from './pages/index.js';
|
|
32
32
|
|
|
33
|
+
// Re-export `pgpKeys` data so it can be imported directly from `$lib`
|
|
34
|
+
export { PGP_KEYS } from '$lib/data/pgpKeys.js';
|
|
35
|
+
|
|
33
36
|
// Export utility functions
|
|
34
37
|
// Uncomment and adjust these as needed for your project
|
|
35
38
|
// export * from './utils/formatting.js';
|
|
@@ -53,9 +56,12 @@ export const CONSTANTS = {
|
|
|
53
56
|
YEAR: '2025',
|
|
54
57
|
},
|
|
55
58
|
CONTACT: {
|
|
56
|
-
EMAIL: 'support (at)
|
|
59
|
+
EMAIL: 'support (at) netwk.pro',
|
|
60
|
+
EMAIL_LINK: 'support@netwk.pro',
|
|
57
61
|
SECURE: 'contact (at) s.neteng.pro',
|
|
62
|
+
SECURE_LINK: 'contact@s.neteng.pro',
|
|
58
63
|
PRIVACY: 'privacy (at) netwk.pro',
|
|
64
|
+
PRIVACY_LINK: 'privacy@netwk.pro',
|
|
59
65
|
PHONE: '(623) 252-4350',
|
|
60
66
|
},
|
|
61
67
|
PAGE: {
|