@networkpro/web 1.10.0 → 1.11.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.
- package/cspell.json +5 -0
- package/jsconfig.json +1 -15
- package/jsconfig.template.jsonc +32 -0
- package/netlify.toml +0 -1
- package/package.json +9 -9
- package/src/app.html +1 -1
- package/src/hooks.server.js +13 -0
- package/src/lib/components/Badges.svelte +6 -2
- package/src/lib/components/LegalNav.svelte +6 -1
- package/src/lib/components/MetaTags.svelte +8 -2
- package/src/lib/components/foss/FossItemContent.svelte +8 -6
- package/src/lib/components/layout/Footer.svelte +26 -46
- package/src/lib/index.js +27 -19
- package/src/lib/pages/AboutContent.svelte +17 -29
- package/src/lib/pages/FossContent.svelte +8 -13
- package/src/lib/pages/HomeContent.svelte +13 -25
- package/src/lib/pages/LicenseContent.svelte +69 -90
- package/src/lib/pages/PrivacyContent.svelte +102 -85
- package/src/lib/pages/PrivacyDashboard.svelte +79 -75
- package/src/lib/pages/TermsConditionsContent.svelte +13 -18
- package/src/lib/pages/TermsUseContent.svelte +17 -23
- package/src/lib/stores/posthog.js +115 -0
- package/src/lib/stores/trackingStatus.js +30 -0
- package/src/lib/types/appConstants.js +60 -0
- package/src/lib/types/fossTypes.js +17 -0
- package/src/lib/utils/privacy.js +47 -4
- package/src/lib/utils/trackingCookies.js +40 -10
- package/src/lib/utils/trackingStatus.js +18 -3
- package/src/routes/+layout.js +0 -2
- package/src/routes/+layout.svelte +36 -40
- package/static/offline.min.css +2 -3
- package/svelte.config.js +5 -2
- package/vite.config.js +2 -4
- package/src/lib/components/PostHog.svelte +0 -36
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",
|
|
@@ -28,6 +30,7 @@
|
|
|
28
30
|
"linksheet",
|
|
29
31
|
"Maricopa",
|
|
30
32
|
"mdsvex",
|
|
33
|
+
"navigations",
|
|
31
34
|
"neteng",
|
|
32
35
|
"netpro",
|
|
33
36
|
"netwk",
|
|
@@ -41,6 +44,8 @@
|
|
|
41
44
|
"ntfy",
|
|
42
45
|
"obtainium",
|
|
43
46
|
"posthog",
|
|
47
|
+
"prefs",
|
|
48
|
+
"reconsent",
|
|
44
49
|
"SIEM",
|
|
45
50
|
"SPDY",
|
|
46
51
|
"stylelintignore",
|
package/jsconfig.json
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/* =========================================================================
|
|
2
|
-
jsconfig.json
|
|
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
1
|
{
|
|
10
2
|
"extends": "./.svelte-kit/tsconfig.json",
|
|
11
3
|
"compilerOptions": {
|
|
@@ -19,12 +11,6 @@ This file is part of Network Pro.
|
|
|
19
11
|
"strict": true,
|
|
20
12
|
"moduleResolution": "bundler"
|
|
21
13
|
},
|
|
22
|
-
"exclude": ["vite.config.js"],
|
|
14
|
+
"exclude": ["vite.config.js"],
|
|
23
15
|
"include": ["src", "src/global.d.ts", "src/service-worker.js"]
|
|
24
|
-
|
|
25
|
-
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
|
|
26
|
-
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
|
|
27
|
-
|
|
28
|
-
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
|
|
29
|
-
// from the referenced tsconfig.json - TypeScript does not merge them in
|
|
30
16
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* =========================================================================
|
|
2
|
+
jsconfig.template.jsonc
|
|
3
|
+
|
|
4
|
+
NOTE: This file is for reference only and is not actively used by SvelteKit or tooling. SvelteKit uses the jsconfig.json file without comments for actual configuration.
|
|
5
|
+
|
|
6
|
+
Copyright © 2025 Network Pro Strategies (Network Pro™)
|
|
7
|
+
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
|
|
8
|
+
This file is part of Network Pro.
|
|
9
|
+
========================================================================= */
|
|
10
|
+
|
|
11
|
+
{
|
|
12
|
+
"extends": "./.svelte-kit/tsconfig.json",
|
|
13
|
+
"compilerOptions": {
|
|
14
|
+
"allowJs": true,
|
|
15
|
+
"checkJs": true,
|
|
16
|
+
"esModuleInterop": true,
|
|
17
|
+
"forceConsistentCasingInFileNames": true,
|
|
18
|
+
"resolveJsonModule": true,
|
|
19
|
+
"skipLibCheck": true,
|
|
20
|
+
"sourceMap": true,
|
|
21
|
+
"strict": true,
|
|
22
|
+
"moduleResolution": "bundler"
|
|
23
|
+
},
|
|
24
|
+
"exclude": ["vite.config.js"], // Exclude the config file if needed
|
|
25
|
+
"include": ["src", "src/global.d.ts", "src/service-worker.js"]
|
|
26
|
+
|
|
27
|
+
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
|
|
28
|
+
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
|
|
29
|
+
|
|
30
|
+
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
|
|
31
|
+
// from the referenced tsconfig.json - TypeScript does not merge them in
|
|
32
|
+
}
|
package/netlify.toml
CHANGED
package/package.json
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@networkpro/web",
|
|
3
3
|
"private": false,
|
|
4
|
-
"
|
|
5
|
-
"./.netlify/shims.js"
|
|
6
|
-
],
|
|
7
|
-
"version": "1.10.0",
|
|
4
|
+
"version": "1.11.0",
|
|
8
5
|
"description": "Locking Down Networks, Unlocking Confidence | Security, Networking, Privacy — Network Pro Strategies",
|
|
9
6
|
"keywords": [
|
|
10
7
|
"advisory",
|
|
@@ -47,6 +44,8 @@
|
|
|
47
44
|
"prepare": "svelte-kit sync || echo ''",
|
|
48
45
|
"check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json",
|
|
49
46
|
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json --watch",
|
|
47
|
+
"type-check": "svelte-check --tsconfig ./jsconfig.json",
|
|
48
|
+
"lint:types": "npm run type-check",
|
|
50
49
|
"check:env": "node scripts/checkEnv.js",
|
|
51
50
|
"check:node": "node scripts/checkNode.js",
|
|
52
51
|
"checkout": "npm run check:node && npm run test:all && npm run lint:all && npm run check",
|
|
@@ -78,7 +77,7 @@
|
|
|
78
77
|
},
|
|
79
78
|
"dependencies": {
|
|
80
79
|
"dompurify": "^3.2.6",
|
|
81
|
-
"posthog-js": "^1.249.
|
|
80
|
+
"posthog-js": "^1.249.2",
|
|
82
81
|
"semver": "^7.7.2",
|
|
83
82
|
"svelte": "5.33.14"
|
|
84
83
|
},
|
|
@@ -88,11 +87,11 @@
|
|
|
88
87
|
"@lhci/cli": "^0.14.0",
|
|
89
88
|
"@playwright/test": "^1.52.0",
|
|
90
89
|
"@sveltejs/adapter-netlify": "^5.0.2",
|
|
91
|
-
"@sveltejs/kit": "2.21.
|
|
92
|
-
"@sveltejs/vite-plugin-svelte": "5.0
|
|
90
|
+
"@sveltejs/kit": "2.21.2",
|
|
91
|
+
"@sveltejs/vite-plugin-svelte": "5.1.0",
|
|
93
92
|
"@testing-library/jest-dom": "^6.6.3",
|
|
94
93
|
"@testing-library/svelte": "^5.2.8",
|
|
95
|
-
"@vitest/coverage-v8": "^3.2.
|
|
94
|
+
"@vitest/coverage-v8": "^3.2.1",
|
|
96
95
|
"autoprefixer": "^10.4.21",
|
|
97
96
|
"browserslist": "^4.25.0",
|
|
98
97
|
"eslint": "^9.28.0",
|
|
@@ -119,7 +118,8 @@
|
|
|
119
118
|
"typescript": "^5.8.3",
|
|
120
119
|
"vite": "^6.3.5",
|
|
121
120
|
"vite-plugin-lightningcss": "^0.0.5",
|
|
122
|
-
"
|
|
121
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
122
|
+
"vitest": "^3.2.1"
|
|
123
123
|
},
|
|
124
124
|
"overrides": {
|
|
125
125
|
"@sveltejs/kit": {
|
package/src/app.html
CHANGED
package/src/hooks.server.js
CHANGED
|
@@ -91,3 +91,16 @@ export async function handle({ event, resolve }) {
|
|
|
91
91
|
|
|
92
92
|
return response;
|
|
93
93
|
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* SvelteKit server-side error handler to log SSR errors.
|
|
97
|
+
* @type {import('@sveltejs/kit').HandleServerError}
|
|
98
|
+
*/
|
|
99
|
+
export function handleError({ error, event }) {
|
|
100
|
+
console.error("🔴 SSR Error in route:", event.url.pathname);
|
|
101
|
+
console.error(error);
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
message: "A server-side error occurred",
|
|
105
|
+
};
|
|
106
|
+
}
|
|
@@ -10,10 +10,15 @@ This file is part of Network Pro.
|
|
|
10
10
|
import { base } from "$app/paths";
|
|
11
11
|
// Import badges for licenses
|
|
12
12
|
import { ccBadge, gplBadge } from "$lib";
|
|
13
|
+
import { CONSTANTS } from "$lib";
|
|
13
14
|
|
|
14
15
|
// Log the base path to verify its value
|
|
15
16
|
//console.log("Base path:", base);
|
|
16
17
|
|
|
18
|
+
console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
19
|
+
|
|
20
|
+
const { PAGE } = CONSTANTS;
|
|
21
|
+
|
|
17
22
|
const ccbyLink = `${base}/license#cc-by`;
|
|
18
23
|
const gplLink = `${base}/license#gnu-gpl`;
|
|
19
24
|
|
|
@@ -51,14 +56,13 @@ This file is part of Network Pro.
|
|
|
51
56
|
</script>
|
|
52
57
|
|
|
53
58
|
<!-- BEGIN BADGES -->
|
|
54
|
-
<!-- Updated 2025-05-15 02:12:35 by SunDevil311 -->
|
|
55
59
|
<div class="bnav2-wrap">
|
|
56
60
|
<table class="bnav2">
|
|
57
61
|
<tbody>
|
|
58
62
|
<tr>
|
|
59
63
|
{#each badges as badge}
|
|
60
64
|
<td class="bnav2-nav">
|
|
61
|
-
<a href={badge.href} target=
|
|
65
|
+
<a href={badge.href} target={PAGE.SELF}>
|
|
62
66
|
<img
|
|
63
67
|
decoding="async"
|
|
64
68
|
loading="lazy"
|
|
@@ -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 { PAGE } = CONSTANTS;
|
|
19
|
+
|
|
15
20
|
const termsLink = `${base}/terms-of-use`;
|
|
16
21
|
const privacyLink = `${base}/privacy`;
|
|
17
22
|
const licenseLink = `${base}/license`;
|
|
@@ -62,7 +67,7 @@ This file is part of Network Pro.
|
|
|
62
67
|
<tr>
|
|
63
68
|
{#each row as link}
|
|
64
69
|
<td class="bnav-cell" colspan={link.colspan || 1}>
|
|
65
|
-
<a href={link.href} target=
|
|
70
|
+
<a href={link.href} target={PAGE.SELF}>
|
|
66
71
|
{link.text}
|
|
67
72
|
</a>
|
|
68
73
|
</td>
|
|
@@ -10,10 +10,16 @@ This file is part of Network Pro.
|
|
|
10
10
|
export let title;
|
|
11
11
|
export let description;
|
|
12
12
|
|
|
13
|
+
import { CONSTANTS } from "$lib";
|
|
14
|
+
|
|
15
|
+
console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
16
|
+
|
|
17
|
+
const { COMPANY_INFO, LINKS } = CONSTANTS;
|
|
18
|
+
|
|
13
19
|
// Static shared values
|
|
14
|
-
const ogUrl =
|
|
20
|
+
const ogUrl = LINKS.HOME;
|
|
15
21
|
const ogImg = "/img/banner-og-1200x630.png";
|
|
16
|
-
const companyName =
|
|
22
|
+
const companyName = COMPANY_INFO.NAME;
|
|
17
23
|
const twitterAct = "@NetEng_Pro";
|
|
18
24
|
</script>
|
|
19
25
|
|
|
@@ -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
|
-
|
|
20
|
-
|
|
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 {
|
|
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 {
|
|
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=
|
|
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
|
|
36
|
+
* Icon used in a license object.
|
|
29
37
|
* @typedef {Object} Icon
|
|
30
|
-
* @property {string} src - The source
|
|
31
|
-
* @property {string} alt - The alt text for the
|
|
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 © {
|
|
96
|
+
Copyright © {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={
|
|
121
|
-
<strong>{
|
|
101
|
+
target={PAGE.BLANK}>
|
|
102
|
+
<strong>{COMPANY_INFO.NAME}</strong>
|
|
122
103
|
</a>
|
|
123
|
-
({
|
|
104
|
+
({COMPANY_INFO.APP_NAME}™)
|
|
124
105
|
</p>
|
|
125
106
|
|
|
126
107
|
<!-- Trademark Section -->
|
|
127
108
|
<p>
|
|
128
|
-
{
|
|
109
|
+
{COMPANY_INFO.APP_NAME}™, the shield logo, and the "{creatorSlogan}™"
|
|
129
110
|
slogan are
|
|
130
|
-
<a href={trademarkLink} target={
|
|
131
|
-
of {
|
|
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={
|
|
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={
|
|
131
|
+
target={PAGE.BLANK}
|
|
151
132
|
rel={relLicense}
|
|
152
133
|
style="display: inline-block">
|
|
153
134
|
<img
|
|
@@ -166,16 +147,15 @@ This file is part of Network Pro.
|
|
|
166
147
|
{/each}
|
|
167
148
|
{/if}
|
|
168
149
|
{:else}
|
|
169
|
-
<a href={license.url} target={
|
|
150
|
+
<a href={license.url} target={PAGE.SELF} rel={relLicense}>
|
|
170
151
|
<strong>{license.type}</strong>
|
|
171
|
-
</a
|
|
172
|
-
|
|
173
|
-
<a {rel} href={license.externalUrl} target={targetBlank}
|
|
152
|
+
</a>, as published by the
|
|
153
|
+
<a rel={PAGE.REL} href={license.externalUrl} target={PAGE.BLANK}
|
|
174
154
|
>{license.description}</a
|
|
175
|
-
>, either version 3 of the License
|
|
155
|
+
>, either version 3 of the License or (at your option) any later
|
|
176
156
|
version.
|
|
177
157
|
{/if}
|
|
178
|
-
{index < licenses.length - 1 ? "
|
|
158
|
+
{index < licenses.length - 1 ? " and the " : ""}
|
|
179
159
|
{/each}
|
|
180
160
|
</p>
|
|
181
161
|
</div>
|
package/src/lib/index.js
CHANGED
|
@@ -13,7 +13,7 @@ This file is part of Network Pro.
|
|
|
13
13
|
* @description Main export point for library components, utilities, and assets
|
|
14
14
|
* @module src/lib
|
|
15
15
|
* @author SunDevil311
|
|
16
|
-
* @updated 2025-06-
|
|
16
|
+
* @updated 2025-06-03
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
// Re-export images from dedicated images.js file
|
|
@@ -32,25 +32,33 @@ export * from "./images.js";
|
|
|
32
32
|
// export { default as Button } from './components/Button.svelte';
|
|
33
33
|
// export { default as Card } from './components/Card.svelte';
|
|
34
34
|
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
* COMPANY: string,
|
|
38
|
-
* APP_NAME: string,
|
|
39
|
-
* COPYRIGHT_YEAR: string,
|
|
40
|
-
* CONTACT_EMAIL: string,
|
|
41
|
-
* SECURE_EMAIL: string,
|
|
42
|
-
* PRIVACY_EMAIL: string,
|
|
43
|
-
* PHONE: string,
|
|
44
|
-
* }} AppConstants
|
|
45
|
-
*/
|
|
35
|
+
/** @typedef {import('./types/appConstants.js').AppConstants} AppConstants */
|
|
36
|
+
|
|
46
37
|
|
|
47
38
|
/** @type {AppConstants} */
|
|
48
39
|
export const CONSTANTS = {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
40
|
+
COMPANY_INFO: {
|
|
41
|
+
NAME: "Network Pro Strategies",
|
|
42
|
+
APP_NAME: "Network Pro",
|
|
43
|
+
YEAR: "2025",
|
|
44
|
+
},
|
|
45
|
+
CONTACT: {
|
|
46
|
+
EMAIL: "support (at) neteng.pro",
|
|
47
|
+
SECURE: "contact (at) s.neteng.pro",
|
|
48
|
+
PRIVACY: "privacy (at) netwk.pro",
|
|
49
|
+
PHONE: "(623) 252-4350",
|
|
50
|
+
},
|
|
51
|
+
PAGE: {
|
|
52
|
+
BLANK: "_blank",
|
|
53
|
+
REL: "noopener noreferrer",
|
|
54
|
+
SELF: "_self",
|
|
55
|
+
},
|
|
56
|
+
NAV: {
|
|
57
|
+
BACKTOP: "Back to top",
|
|
58
|
+
HREFTOP: "#top",
|
|
59
|
+
},
|
|
60
|
+
LINKS: {
|
|
61
|
+
HOME: "https://netwk.pro",
|
|
62
|
+
BLOG: "https://blog.netwk.pro",
|
|
63
|
+
},
|
|
56
64
|
};
|
|
@@ -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 {
|
|
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 {
|
|
112
|
+
<a rel={PAGE.REL} href={navLinks[0].href} target={navLinks[0].target}>
|
|
125
113
|
{navLinks[0].label}</a
|
|
126
114
|
>: <code>{navLinks[0].text}</code>
|
|
127
115
|
</span>
|
|
128
116
|
</section>
|
|
129
117
|
|
|
130
118
|
<section id="page-title">
|
|
131
|
-
<h1>About {APP_NAME}™</h1>
|
|
119
|
+
<h1>About {COMPANY_INFO.APP_NAME}™</h1>
|
|
132
120
|
<p>
|
|
133
|
-
<strong>{
|
|
121
|
+
<strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}™)</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>
|
|
152
140
|
<span class="visited">HTML</span> |
|
|
153
|
-
<a href={navLinks[1].href} target={
|
|
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>{
|
|
159
|
-
security, cybersecurity, and digital privacy consulting with
|
|
160
|
-
credibility, and care. We believe that real security doesn't have to
|
|
161
|
-
the cost of user autonomy, and that privacy-minded solutions can be
|
|
162
|
-
practical and powerful.
|
|
146
|
+
At <strong>{COMPANY_INFO.NAME} ({COMPANY_INFO.APP_NAME}™)</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=
|
|
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 {
|
|
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={
|
|
241
|
+
target={PAGE.BLANK}
|
|
254
242
|
>asc <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 {
|
|
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={
|
|
266
|
+
target={PAGE.BLANK}
|
|
279
267
|
>asc <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={
|
|
304
|
+
target={PAGE.BLANK}>
|
|
317
305
|
<strong
|
|
318
306
|
>vcf <span class="fas fa-file-arrow-down"></span></strong>
|
|
319
307
|
</a>
|