@networkpro/web 1.21.0 → 1.22.0

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.
Files changed (43) hide show
  1. package/.editorconfig +1 -3
  2. package/.env.template +0 -2
  3. package/.gitattributes +0 -2
  4. package/.markdownlint.mjs +1 -1
  5. package/.prettierignore +0 -2
  6. package/.stylelintignore +0 -2
  7. package/CHANGELOG.md +89 -1
  8. package/package.json +8 -8
  9. package/src/app.html +1 -12
  10. package/src/lib/components/Logo.svelte +2 -7
  11. package/src/lib/components/layout/HeaderDefault.svelte +2 -3
  12. package/src/lib/data/fossData.js +8 -0
  13. package/src/lib/data/pgpKeys.js +82 -0
  14. package/src/lib/images.js +46 -17
  15. package/src/lib/index.js +8 -2
  16. package/src/lib/pages/AboutContent.svelte +97 -100
  17. package/src/lib/pages/HomeContent.svelte +11 -8
  18. package/src/lib/pages/PGPContent.svelte +19 -40
  19. package/src/lib/pages/ServicesContent.svelte +5 -2
  20. package/src/lib/styles/css/default.css +1 -1
  21. package/src/lib/styles/global.min.css +1 -1
  22. package/src/lib/types/appConstants.js +6 -3
  23. package/src/routes/relay-[slug]/[...catchall]/+server.js +68 -0
  24. package/src/service-worker.js +3 -11
  25. package/static/icon-about.png +0 -0
  26. package/static/manifest.json +17 -4
  27. package/static/pgp/support@netwk.pro.asc +77 -0
  28. package/static/sitemap.xml +5 -5
  29. package/stylelint.config.js +0 -6
  30. package/src/lib/img/qr/pgp-github.png +0 -0
  31. package/src/lib/img/qr/pgp-github.webp +0 -0
  32. package/static/pgp/pgp-contact.png +0 -0
  33. package/static/pgp/pgp-contact.webp +0 -0
  34. package/static/pgp/pgp-github.png +0 -0
  35. package/static/pgp/pgp-github.webp +0 -0
  36. package/static/pgp/pgp-security.png +0 -0
  37. package/static/pgp/pgp-security.webp +0 -0
  38. package/static/pgp/pgp-support.png +0 -0
  39. package/static/pgp/pgp-support.webp +0 -0
  40. package/static/pgp/support@neteng.pro.asc +0 -47
  41. package/static/pgp/vcard.png +0 -0
  42. package/static/pgp/vcard.webp +0 -0
  43. /package/{static → src/lib}/img/powered-by-proton.svg +0 -0
package/.editorconfig CHANGED
@@ -1,4 +1,3 @@
1
- # ==========================================================================
2
1
  # .editorconfig
3
2
  #
4
3
  # Copyright © 2025 Network Pro Strategies (Network Pro™)
@@ -8,7 +7,6 @@
8
7
  # EditorConfig helps developers define and maintain consistent
9
8
  # coding styles between different editors and IDEs
10
9
  # See http://editorconfig.org/ for full details
11
- # ==========================================================================
12
10
 
13
11
  ; top-most EditorConfig file
14
12
  root = true
@@ -36,7 +34,7 @@ indent_size = 2
36
34
  indent_size = 2
37
35
 
38
36
  ; JavaScript files -
39
- [*.{mjs,js,ts}]
37
+ [*.{mjs,cjs,js,ts}]
40
38
  curly_bracket_next_line = true
41
39
  quote_type = single
42
40
 
package/.env.template CHANGED
@@ -1,10 +1,8 @@
1
- # ==========================================================================
2
1
  # .env.template
3
2
  #
4
3
  # Copyright © 2025 Network Pro Strategies (Network Pro™)
5
4
  # Environment template for Network Pro
6
5
  # Rename to `.env` (or `.env.local`) and customize as needed
7
- # ==========================================================================
8
6
 
9
7
  # Custom environment mode for scripts and tooling
10
8
  # One of: dev, test, ci, preview, prod
package/.gitattributes CHANGED
@@ -1,4 +1,3 @@
1
- # ==========================================================================
2
1
  # .gitattributes
3
2
  #
4
3
  # Copyright © 2025 Network Pro Strategies (Network Pro™)
@@ -14,7 +13,6 @@
14
13
  # binary These files are binary and should be left untouched.
15
14
  #
16
15
  # Note that binary is a macro for -text -diff.
17
- # ==========================================================================
18
16
 
19
17
  ## AUTO-DETECT
20
18
  ## Handle line endings automatically for files detected as
package/.markdownlint.mjs CHANGED
@@ -6,7 +6,7 @@ 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
- import noSmartQuotes from './.md-smart-quotes.js'; // adjust path as needed
9
+ import noSmartQuotes from './.md-smart-quotes.js';
10
10
 
11
11
  export default {
12
12
  // Enable all default rules, then override below
package/.prettierignore CHANGED
@@ -1,10 +1,8 @@
1
- # ==========================================================================
2
1
  # .prettierignore
3
2
  #
4
3
  # Copyright © 2025 Network Pro Strategies (Network Pro™)
5
4
  # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
5
  # This file is part of Network Pro.
7
- # ==========================================================================
8
6
 
9
7
  # Custom ignores
10
8
  .markdownlint.jsonc
package/.stylelintignore CHANGED
@@ -1,10 +1,8 @@
1
- # ==========================================================================
2
1
  # .stylelintignore
3
2
  #
4
3
  # Copyright © 2025 Network Pro Strategies (Network Pro™)
5
4
  # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
5
  # This file is part of Network Pro.
7
- # ==========================================================================
8
6
 
9
7
  # Report files and test results
10
8
  playwright-report
package/CHANGELOG.md CHANGED
@@ -22,6 +22,92 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
22
22
 
23
23
  ---
24
24
 
25
+ ## [1.22.0] - 2025-10-20
26
+
27
+ ### Added
28
+
29
+ - Introduced **dynamic QR code image imports** using `import.meta.glob` in `src/lib/images.js`.
30
+ - Implemented new `getQR()` helper function for streamlined QR lookups.
31
+ - Added `QR_IMAGES` registry for centralized QR asset management.
32
+ - Created dedicated PGP key data module (`src/lib/data/pgpKeys.js`) with dynamic QR bindings.
33
+ - Added new app constants (`EMAIL_LINK`, `SECURE_LINK`, `PRIVACY_LINK`) to:
34
+ - `src/lib/index.js`
35
+ - `src/lib/types/appConstants.js`
36
+ - Re-exported `src/lib/data/pgpKeys.js` from `src/lib/index.js`.
37
+ - Added favicon and manifest entry for `icon-about.png`.
38
+ - Introduced updated **contact assets block** in `AboutContent.svelte` with enhanced typing.
39
+ - Exported `src/lib/img/powered-by-proton.svg` from `src/lib/images.js`.
40
+ - Added missing JSDoc annotation to `src/lib/data/fossData.js`.
41
+ - Added updated PGP key for `support@netwk.pro` (previously `support@neteng.pro`).
42
+
43
+ ### Changed
44
+
45
+ - Bumped project version to `v1.22.0`.
46
+ - Updated generator metadata in `src/app.html` to reflect **SvelteKit 2.47.2**.
47
+ - Refactored **PGPContent.svelte** to use the `getQR()` helper and dynamic QR registry.
48
+ - Refactored **AboutContent.svelte** to use the centralized `PGP_KEYS` dataset and app constants.
49
+ - Split PGP key fingerprints into two lines for improved readability.
50
+ - Enhanced **images.js** with support for eager QR image imports.
51
+ - Replaced static PGP imports with automated dynamic resolution.
52
+ - Updated **manifest.json** to reference the new app icon.
53
+ - Revised layout and text consistency for PGP and contact sections in **AboutContent.svelte**.
54
+ - Updated type definitions in `src/lib/types/appConstants.js` for `CONTACT` constants.
55
+ - Cleaned up unused imports and improved inline JSDoc typings throughout the app.
56
+ - Updated asset references in `IGNORE_PATHS` and `REQUIRED_ASSETS` in `src/service-worker.js`.
57
+ - Added spacing adjustments to the tagline in **Logo.svelte**.
58
+ - Updated **HeaderDefault.svelte** to reference the global constant for the **Blog** link.
59
+ - Revised text and app constant usage in **HomeContent.svelte**.
60
+ - Updated the contact section and **Effective Date** in **ServicesContent.svelte**.
61
+ - Rebuilt `src/lib/styles/global.min.css` using **LightningCSS**.
62
+ - Refreshed `_Last Modified_` timestamps in `static/sitemap.xml`.
63
+
64
+ ### Fixed
65
+
66
+ - Fixed SSR error caused by missing `getQR` reference during page load.
67
+ - Corrected destructuring of `CONTACT` constants during SSR initialization.
68
+ - Fixed fingerprint rendering fallback when fingerprint type was non-array.
69
+ - Adjusted QR image alignment and eager/lazy decoding behavior.
70
+
71
+ ### Removed
72
+
73
+ - Deleted outdated static assets from `static/pgp`, replaced with dynamically loaded QR images.
74
+ - Removed redundant manual image imports from legacy sections of `images.js`.
75
+ - Removed unnecessary comment block from the `<head>` section of `src/app.html`.
76
+ - Removed `font-weight: bold` property from the `.fingerprint` CSS class in `src/lib/styles/css/default.css`.
77
+
78
+ ### 🧩 Technical Notes
79
+
80
+ - Updated `vite` from `v7.1.10` → `v7.1.11` to address **CVE-2025-62522**.
81
+ - Updated dependencies for SvelteKit `2.47.2` compatibility:
82
+ - `@sveltejs/kit`, `svelte`, `vite`, and `eslint`-related plugins.
83
+ - Cleaned up build cache and service worker registration logic in `src/service-worker.js`.
84
+
85
+ ---
86
+
87
+ ## [1.21.1] - 2025-10-17
88
+
89
+ ### Added
90
+
91
+ - Introduced universal relay mock handler at `src/routes/relay-[slug]/[...catchall]/+server.js` to consolidate test-only endpoints such as `flags`, `config`, and `config.js`.
92
+ - Added fallback support for `GET`, `HEAD`, and `OPTIONS` methods within the catchall relay handler.
93
+
94
+ ### Changed
95
+
96
+ - Bumped project version to `v1.21.1`.
97
+ - Standardized header in various files:
98
+ - `.editorconfig`
99
+ - `.env.template`
100
+ - `.gitattributes`
101
+ - `.gitignore`
102
+ - `.prettierignore`
103
+ - `.stylelintignore`
104
+
105
+ ### Removed
106
+
107
+ - Deleted unneeded comments in `stylelint.config.js` and `.markdownlint.mjs`.
108
+
109
+ ---
110
+
25
111
  ## [1.21.0] - 2025-10-17
26
112
 
27
113
  ### Added
@@ -1145,7 +1231,9 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
1145
1231
 
1146
1232
  <!-- Link references -->
1147
1233
 
1148
- [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.21.0...HEAD
1234
+ [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.22.0...HEAD
1235
+ [1.22.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.22.0
1236
+ [1.21.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.21.1
1149
1237
  [1.21.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.21.0
1150
1238
  [1.20.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.20.0
1151
1239
  [1.19.0]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.19.0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
3
  "private": false,
4
- "version": "1.21.0",
4
+ "version": "1.22.0",
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.276.0",
81
+ "posthog-js": "^1.278.0",
82
82
  "semver": "^7.7.3",
83
- "svelte": "5.40.2"
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.1",
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.4",
101
- "eslint-plugin-svelte": "^3.12.4",
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.3.3",
116
+ "svelte-eslint-parser": "^1.4.0",
117
117
  "svelte-preprocess": "^6.0.3",
118
118
  "typescript": "^5.9.3",
119
- "vite": "^7.1.10",
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.1" />
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">{tagline}</h2>
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: blogLink,
48
+ href: LINKS.BLOG,
50
49
  target: PAGE.SELF,
51
50
  external: false,
52
51
  },
@@ -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-06-16
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
- // Import QR code images
60
- import pgpContactPng from '$lib/img/qr/pgp-contact.png';
61
- import pgpContactWbp from '$lib/img/qr/pgp-contact.webp';
62
- import pgpSecurityPng from '$lib/img/qr/pgp-security.png';
63
- import pgpSecurityWbp from '$lib/img/qr/pgp-security.webp';
64
- import pgpSupportPng from '$lib/img/qr/pgp-support.png';
65
- import pgpSupportWbp from '$lib/img/qr/pgp-support.webp';
66
- import vcfPng from '$lib/img/qr/vcard.png';
67
- import vcfWbp from '$lib/img/qr/vcard.webp';
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, pgpContactPng,
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-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) neteng.pro',
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: {