@networkpro/web 1.10.0 → 1.10.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/cspell.json CHANGED
@@ -6,6 +6,7 @@
6
6
  "anonymization",
7
7
  "autocapture",
8
8
  "autorun",
9
+ "BACKTOP",
9
10
  "beforeinstallprompt",
10
11
  "bootentry",
11
12
  "ccby",
@@ -19,6 +20,7 @@
19
20
  "geolocation",
20
21
  "heliboard",
21
22
  "homescreen",
23
+ "HREFTOP",
22
24
  "Izzy",
23
25
  "lhci",
24
26
  "lifecycles",
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "sideEffects": [
5
5
  "./.netlify/shims.js"
6
6
  ],
7
- "version": "1.10.0",
7
+ "version": "1.10.1",
8
8
  "description": "Locking Down Networks, Unlocking Confidence | Security, Networking, Privacy — Network Pro Strategies",
9
9
  "keywords": [
10
10
  "advisory",
@@ -15,9 +15,11 @@ This file is part of Network Pro.
15
15
  import FossFeatures from "$lib/components/foss/FossFeatures.svelte";
16
16
  // Import directly from $lib by way of image utility
17
17
  import { obtainiumPng, obtainiumWbp } from "$lib";
18
+ import { CONSTANTS } from "$lib";
18
19
 
19
- /** @type {"noopener noreferrer"} */
20
- const rel = "noopener noreferrer";
20
+ console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
21
+
22
+ const { PAGE, NAV } = CONSTANTS;
21
23
 
22
24
  /** @type {string} */
23
25
  const obtainiumLink =
@@ -107,7 +109,7 @@ This file is part of Network Pro.
107
109
  <!-- Special handling for LinkSheet's Obtainium link -->
108
110
  {#if fossItem.id === "linksheet"}
109
111
  <div class="linksheet-entry">
110
- <a {rel} href={obtainiumLink} target="_blank">
112
+ <a rel={PAGE.REL} href={obtainiumLink} target={PAGE.BLANK}>
111
113
  <picture>
112
114
  <source srcset={obtainiumWbp} type="image/webp" />
113
115
  <img
@@ -125,8 +127,8 @@ This file is part of Network Pro.
125
127
  ></span>
126
128
  <a
127
129
  href="/assets/bin/linksheet.json"
128
- download
129
130
  type="application/json"
131
+ download
130
132
  style="margin-left: 8px;"
131
133
  target="_blank">
132
134
  Obtainium App Config
@@ -142,7 +144,7 @@ This file is part of Network Pro.
142
144
  <div class="linksheet-entry">
143
145
  {#if !hideLabels && label && href}
144
146
  <strong>{label}:</strong>
145
- <a {rel} {href} target="_blank">{href}</a>
147
+ <a rel={PAGE.REL} {href} target={PAGE.BLANK}>{href}</a>
146
148
  {/if}
147
149
  </div>
148
150
  {/if}
@@ -151,6 +153,6 @@ This file is part of Network Pro.
151
153
 
152
154
  <div class="spacer"></div>
153
155
 
154
- <span class="small-text"><a href="#top">Back to top</a></span>
156
+ <span class="small-text"><a href={NAV.HREFTOP}>{NAV.BACKTOP}</a></span>
155
157
  </section>
156
158
  <!-- END FOSS ITEMS -->
@@ -17,18 +17,26 @@ This file is part of Network Pro.
17
17
  // Log the base path to verify its value
18
18
  //console.log("Base path:", base);
19
19
 
20
- console.log(CONSTANTS.APP_NAME);
20
+ console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
21
+
22
+ const { COMPANY_INFO, CONTACT, PAGE, NAV } = CONSTANTS;
21
23
 
22
24
  // Dynamic links for licensing and trademark
23
25
  const ccbyLink = `${base}/license#cc-by`;
24
26
  const gnugplLink = `${base}/license#gnu-gpl`;
25
27
  const trademarkLink = `${base}/license#trademark`;
26
28
 
29
+ /** @type {string} */
30
+ const creatorUrl = "https://netwk.pro";
31
+
32
+ /** @type {string} */
33
+ const creatorSlogan = "Locking Down Networks...";
34
+
27
35
  /**
28
- * Icon details object.
36
+ * Icon used in a license object.
29
37
  * @typedef {Object} Icon
30
- * @property {string} src - The source URL of the icon image.
31
- * @property {string} alt - The alt text for the icon image.
38
+ * @property {string} src - The image source path or URL.
39
+ * @property {string} alt - The alt text for the image.
32
40
  */
33
41
 
34
42
  /**
@@ -41,15 +49,6 @@ This file is part of Network Pro.
41
49
  * @property {Icon[]} [icons] - An array of icon objects for representing the license visually.
42
50
  */
43
51
 
44
- /** @type {string} */
45
- const creatorUrl = "https://netwk.pro";
46
-
47
- /** @type {string} */
48
- const creatorSlogan = "Privacy Made Practical";
49
-
50
- /**
51
- * @type {License[]}
52
- */
53
52
  const licenses = [
54
53
  {
55
54
  type: "CC BY 4.0",
@@ -83,52 +82,34 @@ This file is part of Network Pro.
83
82
  "xmlns:dct": "http://purl.org/dc/terms/",
84
83
  };
85
84
 
86
- /**
87
- * Relation attributes for external links.
88
- * @type {string}
89
- */
90
- const rel = "noopener noreferrer";
91
-
92
85
  /**
93
86
  * Relation attributes for license links.
94
87
  * @type {string}
95
88
  */
96
89
  const relLicense = "license noopener noreferrer";
97
-
98
- /**
99
- * Target attribute for opening links in the same tab.
100
- * @type {string}
101
- */
102
- const targetSelf = "_self";
103
-
104
- /**
105
- * Target attribute for opening links in a new tab.
106
- * @type {string}
107
- */
108
- const targetBlank = "_blank";
109
90
  </script>
110
91
 
111
92
  <!-- BEGIN FOOTER -->
112
93
  <div class="copyright" {...namespaceAttributes}>
113
94
  <!-- Copyright Section -->
114
95
  <p>
115
- Copyright &copy; {CONSTANTS.COPYRIGHT_YEAR}<br />
96
+ Copyright &copy; {COMPANY_INFO.YEAR}<br />
116
97
  <a
117
98
  rel="cc:attributionURL dct:creator"
118
99
  property="cc:attributionName"
119
100
  href={creatorUrl}
120
- target={targetBlank}>
121
- <strong>{CONSTANTS.COMPANY}</strong>
101
+ target={PAGE.BLANK}>
102
+ <strong>{COMPANY_INFO.NAME}</strong>
122
103
  </a>
123
- ({CONSTANTS.APP_NAME}&trade;)
104
+ ({COMPANY_INFO.APP_NAME}&trade;)
124
105
  </p>
125
106
 
126
107
  <!-- Trademark Section -->
127
108
  <p>
128
- {CONSTANTS.APP_NAME}&trade;, the shield logo, and the "{creatorSlogan}"
109
+ {COMPANY_INFO.APP_NAME}&trade;, the shield logo, and the "{creatorSlogan}&trade;"
129
110
  slogan are
130
- <a href={trademarkLink} target={targetSelf}>trademarks</a>
131
- of {CONSTANTS.COMPANY}.
111
+ <a href={trademarkLink} target={PAGE.SELF}>trademarks</a>
112
+ of {COMPANY_INFO.NAME}.
132
113
  </p>
133
114
 
134
115
  <!-- Licensing Section -->
@@ -138,7 +119,7 @@ This file is part of Network Pro.
138
119
  {#if license.type === "CC BY 4.0"}
139
120
  <a
140
121
  href={license.url}
141
- target={targetSelf}
122
+ target={PAGE.SELF}
142
123
  rel={relLicense}
143
124
  style="display: inline-block">
144
125
  <strong>{license.type}</strong>
@@ -147,7 +128,7 @@ This file is part of Network Pro.
147
128
  {#each license.icons as icon}
148
129
  <a
149
130
  href={license.externalUrl}
150
- target={targetBlank}
131
+ target={PAGE.BLANK}
151
132
  rel={relLicense}
152
133
  style="display: inline-block">
153
134
  <img
@@ -166,11 +147,11 @@ This file is part of Network Pro.
166
147
  {/each}
167
148
  {/if}
168
149
  {:else}
169
- <a href={license.url} target={targetSelf} rel={relLicense}>
150
+ <a href={license.url} target={PAGE.SELF} rel={relLicense}>
170
151
  <strong>{license.type}</strong>
171
152
  </a>
172
153
  , as published by the
173
- <a {rel} href={license.externalUrl} target={targetBlank}
154
+ <a rel={PAGE.REL} href={license.externalUrl} target={PAGE.BLANK}
174
155
  >{license.description}</a
175
156
  >, either version 3 of the License, or (at your option) any later
176
157
  version.
package/src/lib/index.js CHANGED
@@ -34,23 +34,57 @@ export * from "./images.js";
34
34
 
35
35
  /**
36
36
  * @typedef {{
37
- * COMPANY: string,
37
+ * NAME: string,
38
38
  * APP_NAME: string,
39
- * COPYRIGHT_YEAR: string,
40
- * CONTACT_EMAIL: string,
41
- * SECURE_EMAIL: string,
42
- * PRIVACY_EMAIL: string,
43
- * PHONE: string,
39
+ * YEAR: string
40
+ * }} CompanyInfo
41
+ *
42
+ * @typedef {{
43
+ * EMAIL: string,
44
+ * SECURE: string,
45
+ * PRIVACY: string,
46
+ * PHONE: string
47
+ * }} ContactInfo
48
+ *
49
+ * @typedef {{
50
+ * BLANK: string,
51
+ * SELF: string,
52
+ * REL: string
53
+ * }} PageTargets
54
+ *
55
+ * @typedef {{
56
+ * BACKTOP: string,
57
+ * HREFTOP: string
58
+ * }} NavigationLabels
59
+ *
60
+ * @typedef {{
61
+ * COMPANY_INFO: CompanyInfo,
62
+ * CONTACT: ContactInfo,
63
+ * PAGE: PageTargets,
64
+ * NAV: NavigationLabels
44
65
  * }} AppConstants
45
66
  */
46
67
 
47
68
  /** @type {AppConstants} */
48
69
  export const CONSTANTS = {
49
- COMPANY: "Network Pro Strategies",
50
- APP_NAME: "Network Pro",
51
- COPYRIGHT_YEAR: "2025",
52
- CONTACT_EMAIL: "support (at) neteng.pro",
53
- SECURE_EMAIL: "contact (at) s.neteng.pro",
54
- PRIVACY_EMAIL: "privacy (at) netwk.pro",
55
- PHONE: "(623) 252-4350"
70
+ COMPANY_INFO: {
71
+ NAME: "Network Pro Strategies",
72
+ APP_NAME: "Network Pro",
73
+ YEAR: "2025",
74
+ },
75
+ CONTACT: {
76
+ EMAIL: "support (at) neteng.pro",
77
+ SECURE: "contact (at) s.neteng.pro",
78
+ PRIVACY: "privacy (at) netwk.pro",
79
+ PHONE: "(623) 252-4350",
80
+ },
81
+ PAGE: {
82
+ BLANK: "_blank",
83
+ REL: "noopener noreferrer",
84
+ SELF: "_self",
85
+ },
86
+ NAV: {
87
+ BACKTOP: "Back to top",
88
+ HREFTOP: "#top",
89
+ },
56
90
  };
@@ -14,9 +14,9 @@ This file is part of Network Pro.
14
14
  // Log the base path to verify its value
15
15
  //console.log("Base path:", base);
16
16
 
17
- console.log(CONSTANTS.APP_NAME);
17
+ console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
18
18
 
19
- const { COMPANY, APP_NAME } = CONSTANTS;
19
+ const { COMPANY_INFO, PAGE } = CONSTANTS;
20
20
 
21
21
  /**
22
22
  * URL to the Contact Form route, using the base path
@@ -24,12 +24,6 @@ This file is part of Network Pro.
24
24
  */
25
25
  const contactLink = `${base}/contact`;
26
26
 
27
- /**
28
- * Security attribute for external links
29
- * @type {string}
30
- */
31
- const rel = "noopener noreferrer";
32
-
33
27
  /**
34
28
  * HTML attribute for async image decoding
35
29
  * @type {"async" | "sync" | "auto"}
@@ -48,12 +42,6 @@ This file is part of Network Pro.
48
42
  */
49
43
  const hrStyle = "hr-styled";
50
44
 
51
- /**
52
- * Target attribute for opening links in new tab
53
- * @type {string}
54
- */
55
- const tgtBlank = "_blank";
56
-
57
45
  /**
58
46
  * Navigation links for the page
59
47
  * @type {Array<{
@@ -121,16 +109,16 @@ This file is part of Network Pro.
121
109
  <!-- BEGIN TITLE -->
122
110
  <section id="top">
123
111
  <span class="small-text">
124
- <a {rel} href={navLinks[0].href} target={navLinks[0].target}>
112
+ <a rel={PAGE.REL} href={navLinks[0].href} target={navLinks[0].target}>
125
113
  {navLinks[0].label}</a
126
114
  >: &nbsp;<code>{navLinks[0].text}</code>
127
115
  </span>
128
116
  </section>
129
117
 
130
118
  <section id="page-title">
131
- <h1>About {APP_NAME}&trade;</h1>
119
+ <h1>About {COMPANY_INFO.APP_NAME}&trade;</h1>
132
120
  <p>
133
- <strong>{COMPANY} ({APP_NAME}&trade;)</strong>
121
+ <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>
134
122
  <br />
135
123
  <em>Remote-First Cybersecurity & Privacy Consulting</em>
136
124
  </p>
@@ -150,16 +138,16 @@ This file is part of Network Pro.
150
138
  <sup>
151
139
  <strong>Formats:</strong>&nbsp;
152
140
  <span class="visited">HTML</span> |
153
- <a href={navLinks[1].href} target={tgtBlank}>{navLinks[1].label}</a>
141
+ <a href={navLinks[1].href} target={PAGE.BLANK}>{navLinks[1].label}</a>
154
142
  </sup>
155
143
  </p>
156
144
 
157
145
  <p>
158
- At <strong>{COMPANY} ({APP_NAME}&trade;)</strong>, we deliver network
159
- security, cybersecurity, and digital privacy consulting with clarity,
160
- credibility, and care. We believe that real security doesn't have to come at
161
- the cost of user autonomy, and that privacy-minded solutions can be both
162
- practical and powerful.
146
+ At <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}&trade;)</strong>, we
147
+ deliver network security, cybersecurity, and digital privacy consulting with
148
+ clarity, credibility, and care. We believe that real security doesn't have to
149
+ come at the cost of user autonomy, and that privacy-minded solutions can be
150
+ both practical and powerful.
163
151
  </p>
164
152
 
165
153
  <p>
@@ -211,7 +199,7 @@ This file is part of Network Pro.
211
199
  <div class="spacer"></div>
212
200
 
213
201
  <p>
214
- <a href={contactLink} target="_self">Let's connect</a>
202
+ <a rel={PAGE.REL} href={contactLink} target={PAGE.BLANK}>Let's connect</a>
215
203
  to discuss how we can help secure and strengthen your business today.
216
204
  </p>
217
205
 
@@ -241,7 +229,7 @@ This file is part of Network Pro.
241
229
  alt={`PGP Key - ${pgpKeys[0].label}`} />
242
230
  </td>
243
231
  <td class="pgp-col2">
244
- <a {rel} href={pgpKeys[0].keySearch} target={tgtBlank}>
232
+ <a rel={PAGE.REL} href={pgpKeys[0].keySearch} target={PAGE.BLANK}>
245
233
  <strong>{pgpKeys[0].label}</strong>
246
234
  </a>
247
235
  <p
@@ -250,7 +238,7 @@ This file is part of Network Pro.
250
238
  href={contactAssets.supportAsc}
251
239
  type="application/pgp-keys"
252
240
  download
253
- target={tgtBlank}
241
+ target={PAGE.BLANK}
254
242
  >asc &nbsp;<span class="fas fa-file-arrow-down"></span></a
255
243
  ></strong>
256
244
  </p>
@@ -266,7 +254,7 @@ This file is part of Network Pro.
266
254
  <!-- Row 1 (Second row) has its columns swapped -->
267
255
  <tr>
268
256
  <td class="pgp-col1">
269
- <a {rel} href={pgpKeys[1].keySearch} target={tgtBlank}>
257
+ <a rel={PAGE.REL} href={pgpKeys[1].keySearch} target={PAGE.BLANK}>
270
258
  <strong>{pgpKeys[1].label}</strong>
271
259
  </a>
272
260
  <p>
@@ -275,7 +263,7 @@ This file is part of Network Pro.
275
263
  href={contactAssets.contactAsc}
276
264
  type="application/pgp-keys"
277
265
  download
278
- target={tgtBlank}
266
+ target={PAGE.BLANK}
279
267
  >asc &nbsp;<span class="fas fa-file-arrow-down"></span></a
280
268
  ></strong>
281
269
  </p>
@@ -313,7 +301,7 @@ This file is part of Network Pro.
313
301
  href={contactAssets.vcf}
314
302
  type="text/vcard"
315
303
  download
316
- target={tgtBlank}>
304
+ target={PAGE.BLANK}>
317
305
  <strong
318
306
  >vcf &nbsp;<span class="fas fa-file-arrow-down"></span></strong>
319
307
  </a>
@@ -9,6 +9,11 @@ This file is part of Network Pro.
9
9
  <script>
10
10
  import { fossData } from "$lib/data/fossData.js";
11
11
  import FossItemContent from "$lib/components/foss/FossItemContent.svelte";
12
+ import { CONSTANTS } from "$lib";
13
+
14
+ console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
15
+
16
+ const { PAGE } = CONSTANTS;
12
17
 
13
18
  /**
14
19
  * Process the FOSS data
@@ -48,24 +53,14 @@ This file is part of Network Pro.
48
53
  title: "FOSS Spotlight",
49
54
  lastUpdated: "May 30, 2025",
50
55
  };
51
-
52
- /** @type {any} */
53
- const constants = {
54
- classSmall: "small-text",
55
- rel: "noopener noreferrer",
56
- backTop: "Back to top",
57
- hrefTop: "#top",
58
- targetSelf: "_self",
59
- targetBlank: "_blank",
60
- };
61
56
  </script>
62
57
 
63
58
  <section id="top">
64
- <span class={constants.classSmall}>
59
+ <span class="small-text">
65
60
  <a
66
- rel={constants.rel}
61
+ rel={PAGE.REL}
67
62
  href="https://spdx.dev/learn/handling-license-info"
68
- target={constants.targetBlank}>
63
+ target={PAGE.BLANK}>
69
64
  SPDX License Identifier
70
65
  </a>: &nbsp;<code>CC-BY-4.0 OR GPL-3.0-or-later</code>
71
66
  </span>
@@ -8,10 +8,15 @@ This file is part of Network Pro.
8
8
 
9
9
  <script>
10
10
  import { base } from "$app/paths";
11
+ import { CONSTANTS } from "$lib";
11
12
 
12
13
  // Log the base path to verify its value
13
14
  //console.log("Base path:", base);
14
15
 
16
+ console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
17
+
18
+ const { COMPANY_INFO, PAGE, NAV } = CONSTANTS;
19
+
15
20
  /**
16
21
  * URL to the FOSS Spotlight page, using the base path
17
22
  * @type {string}
@@ -41,31 +46,13 @@ This file is part of Network Pro.
41
46
  * @type {string}
42
47
  */
43
48
  const classLarge = "large-text-center";
44
-
45
- /**
46
- * Relation attribute for external links.
47
- * @type {string}
48
- */
49
- const rel = "noopener noreferrer";
50
-
51
- /**
52
- * Target attribute to open links in a new tab.
53
- * @type {string}
54
- */
55
- const targetBlank = "_blank";
56
-
57
- /**
58
- * Target attribute to open links in the same tab.
59
- * @type {string}
60
- */
61
- const targetSelf = "_self";
62
49
  </script>
63
50
 
64
51
  <!-- BEGIN HOME CONTENT -->
65
52
  <h3 class={classIndex}>🔒 Practical Cybersecurity. Trusted Expertise.</h3>
66
53
 
67
54
  <p class={classCenter}>
68
- At <strong>Network Pro&trade;</strong>, we specialize in network security,
55
+ At <strong>{COMPANY_INFO.NAME}</strong>, we specialize in network security,
69
56
  cybersecurity, and digital privacy consulting that meets today's real-world
70
57
  demands. Our remote-first approach combines technical depth with practical
71
58
  solutions—leveraging a strategic mix of open source and proprietary
@@ -82,7 +69,7 @@ This file is part of Network Pro.
82
69
  📡
83
70
  <em>
84
71
  <strong>Stay informed:</strong> Follow our
85
- <a href={blogLink} target={targetSelf}>blog</a>
72
+ <a href={blogLink} target={PAGE.SELF}>blog</a>
86
73
  and social channels for actionable insights, implementation guides, and the latest
87
74
  cybersecurity developments.
88
75
  </em>
@@ -94,13 +81,13 @@ This file is part of Network Pro.
94
81
 
95
82
  <p class={classLarge}>
96
83
  <strong>
97
- <a href={blogLink} target={targetSelf}>Network Pro Blog</a>
84
+ <a href={blogLink} target={PAGE.SELF}>{COMPANY_INFO.APP_NAME} Blog</a>
98
85
  </strong>
99
86
  </p>
100
87
 
101
88
  <p class={classLarge}>
102
89
  <strong>
103
- <a href={spotlightLink} target={targetSelf}>FOSS Spotlight</a>
90
+ <a href={spotlightLink} target={PAGE.SELF}>FOSS Spotlight</a>
104
91
  </strong>
105
92
  </p>
106
93
 
@@ -109,12 +96,13 @@ This file is part of Network Pro.
109
96
  <p class={classCenter}>
110
97
  <em>
111
98
  Join us on
112
- <a {rel} href="https://discord.neteng.pro" target={targetBlank}>Discord</a>
99
+ <a rel={PAGE.REL} href="https://discord.neteng.pro" target={PAGE.BLANK}
100
+ >Discord</a>
113
101
  or in
114
102
  <a
115
- {rel}
103
+ rel={PAGE.REL}
116
104
  href="https://github.com/netwk-pro/netwk-pro.github.io/discussions"
117
- target={targetBlank}>GitHub Discussions</a
105
+ target={PAGE.BLANK}>GitHub Discussions</a
118
106
  >!
119
107
  </em>
120
108
  </p>