@networkpro/web 1.5.2 → 1.6.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 (108) hide show
  1. package/CODE_OF_CONDUCT.md +1 -0
  2. package/LICENSE.md +5 -39
  3. package/README.md +319 -39
  4. package/cspell.json +65 -0
  5. package/eslint.config.mjs +2 -1
  6. package/jsconfig.json +2 -1
  7. package/netlify-functions/cspReport.js +68 -0
  8. package/netlify.toml +17 -8
  9. package/package.json +52 -56
  10. package/playwright.config.js +21 -19
  11. package/postcss.config.mjs +1 -0
  12. package/scripts/auditScripts.js +1 -0
  13. package/scripts/bundleCss.js +1 -0
  14. package/scripts/checkEnv.js +1 -0
  15. package/scripts/checkNode.js +46 -19
  16. package/scripts/checkVersions.js +1 -0
  17. package/scripts/flattenHeaders.js +1 -0
  18. package/scripts/validateHeaders.js +1 -0
  19. package/src/app.d.ts +14 -3
  20. package/src/app.html +7 -49
  21. package/src/global.d.ts +1 -0
  22. package/src/hooks.client.ts +16 -7
  23. package/src/hooks.server.js +91 -0
  24. package/src/lib/components/Badges.svelte +1 -0
  25. package/src/lib/components/ContainerSection.svelte +1 -0
  26. package/src/lib/components/FullWidthSection.svelte +15 -1
  27. package/src/lib/components/LegalNav.svelte +1 -0
  28. package/src/lib/components/Logo.svelte +1 -0
  29. package/src/lib/components/MetaTags.svelte +1 -0
  30. package/src/lib/components/PWAInstallButton.svelte +1 -0
  31. package/src/lib/components/RedirectPage.svelte +20 -12
  32. package/src/lib/components/SocialMedia.svelte +1 -0
  33. package/src/lib/components/foss/FossFeatures.svelte +58 -4
  34. package/src/lib/components/foss/FossItemContent.svelte +2 -1
  35. package/src/lib/components/layout/Footer.svelte +4 -1
  36. package/src/lib/components/layout/HeaderDefault.svelte +2 -1
  37. package/src/lib/components/layout/HeaderHome.svelte +2 -1
  38. package/src/lib/data/fossData.js +271 -68
  39. package/src/lib/images.js +10 -1
  40. package/src/lib/img/logo-web.png +0 -0
  41. package/src/lib/img/logo-web.webp +0 -0
  42. package/src/lib/img/posts/eauth.png +0 -0
  43. package/src/lib/img/posts/eauth.webp +0 -0
  44. package/src/lib/index.js +1 -0
  45. package/src/lib/meta.js +1 -1
  46. package/src/lib/pages/AboutContent.svelte +1 -0
  47. package/src/lib/pages/FossContent.svelte +2 -1
  48. package/src/lib/pages/HomeContent.svelte +1 -0
  49. package/src/lib/pages/LicenseContent.svelte +33 -3
  50. package/src/lib/pages/PrivacyContent.svelte +33 -12
  51. package/src/lib/pages/TermsConditionsContent.svelte +3 -0
  52. package/src/lib/pages/TermsUseContent.svelte +3 -0
  53. package/src/lib/registerServiceWorker.js +35 -31
  54. package/src/lib/styles/css/default.css +1 -0
  55. package/src/lib/styles/css/global.css +1 -0
  56. package/src/lib/styles/css/normalize.css +1 -0
  57. package/src/lib/styles/css/offline.css +1 -0
  58. package/src/lib/styles/css/style.css +1 -0
  59. package/src/lib/styles/fa-global.css +1 -0
  60. package/src/lib/styles/global.min.css +1 -0
  61. package/src/lib/styles/index.js +2 -1
  62. package/src/lib/types/metadata.js +1 -0
  63. package/src/lib/unregisterServiceWorker.js +1 -0
  64. package/src/lib/utils/utm.js +1 -0
  65. package/src/routes/+error.svelte +1 -0
  66. package/src/routes/+layout.js +7 -1
  67. package/src/routes/+layout.svelte +8 -6
  68. package/src/routes/+page.server.js +1 -0
  69. package/src/routes/+page.svelte +1 -0
  70. package/src/routes/about/+page.server.js +1 -0
  71. package/src/routes/about/+page.svelte +1 -0
  72. package/src/routes/api/mock-csp/+server.js +22 -0
  73. package/src/routes/consultation/+page.svelte +1 -0
  74. package/src/routes/contact/+page.svelte +1 -0
  75. package/src/routes/foss-spotlight/+page.server.js +1 -0
  76. package/src/routes/foss-spotlight/+page.svelte +1 -0
  77. package/src/routes/license/+page.server.js +1 -0
  78. package/src/routes/license/+page.svelte +1 -0
  79. package/src/routes/privacy-policy/+page.server.js +1 -0
  80. package/src/routes/privacy-policy/+page.svelte +1 -0
  81. package/src/routes/privacy-rights/+page.svelte +1 -0
  82. package/src/routes/terms-conditions/+page.server.js +1 -0
  83. package/src/routes/terms-conditions/+page.svelte +1 -0
  84. package/src/routes/terms-of-use/+page.server.js +1 -0
  85. package/src/routes/terms-of-use/+page.svelte +1 -0
  86. package/src/service-worker.d.ts +8 -0
  87. package/src/service-worker.js +56 -28
  88. package/static/disableSw.js +12 -0
  89. package/static/docs/Home.md +63 -0
  90. package/static/docs/extensions.md +58 -0
  91. package/static/sitemap.xml +7 -7
  92. package/stylelint.config.js +4 -7
  93. package/svelte.config.js +1 -0
  94. package/tests/e2e/app.spec.js +59 -21
  95. package/tests/e2e/mobile.spec.js +50 -29
  96. package/tests/unit/auditScripts.test.js +1 -0
  97. package/tests/unit/checkEnv.test.js +1 -0
  98. package/tests/unit/checkVersions.test.js +1 -0
  99. package/tests/unit/cspReport.test.js +81 -0
  100. package/tests/unit/demo.test.js +1 -0
  101. package/tests/unit/routes/page.svelte.test.js +1 -0
  102. package/tests/unit/unregisterServiceWorker.test.js +1 -0
  103. package/tests/unit/utm.test.js +1 -0
  104. package/{tsconfig.custom.json → tsconfig.custom.jsonc} +2 -1
  105. package/vite.config.js +1 -0
  106. package/vitest.config.client.js +1 -0
  107. package/vitest.config.server.js +1 -0
  108. package/_headers +0 -9
@@ -1,10 +1,13 @@
1
1
  <!-- ==========================================================================
2
2
  src/lib/pages/PrivacyContent.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
7
8
 
9
+ <!-- cspell:ignore prights -->
10
+
8
11
  <script>
9
12
  import { base } from "$app/paths";
10
13
 
@@ -13,9 +16,11 @@ This file is part of Network Pro.
13
16
 
14
17
  /**
15
18
  * URL to the Privacy Rights Request Form redirect route, using the base path
19
+ * URL to the Contact Form redirect route, using the base path
16
20
  * @type {string}
17
21
  */
18
22
  const prightsLink = `${base}/privacy-rights`;
23
+ const contactLink = `${base}/contact`;
19
24
 
20
25
  /**
21
26
  * URL to the privacy policy in Markdown format
@@ -50,7 +55,7 @@ This file is part of Network Pro.
50
55
  email: "support (at) neteng.pro",
51
56
  secure: "contact (at) s.neteng.pro",
52
57
  phone: "(623) 252-4350",
53
- effectiveDate: "May 18, 2025",
58
+ effectiveDate: "May 23, 2025",
54
59
  };
55
60
 
56
61
  /**
@@ -179,14 +184,23 @@ This file is part of Network Pro.
179
184
  </p>
180
185
  <ul>
181
186
  <li
182
- ><strong>With Service Providers:</strong> Information is shared with trusted
183
- third-party vendors.</li>
187
+ ><strong>With Service Providers:</strong> We may share your
188
+ information with carefully selected third-party vendors under
189
+ enforceable, contractual agreements. These providers support essential
190
+ aspects of our operations&mdash;including, but not limited to, payment
191
+ processing, data analytics, and customer support services. All such
192
+ partnerships are structured to uphold our core principles of
193
+ <em>transparency, self-hosting, and prioritizing user privacy</em> across
194
+ all infrastructure and data flows.</li>
184
195
  <li
185
- ><strong>Legal Compliance:</strong> Disclosed as required by law or court
186
- order.</li>
196
+ ><strong>Legal Compliance:</strong> We may disclose information if required
197
+ to do so by applicable law, regulation, legal process, or enforceable governmental
198
+ request, including subpoenas or court orders.</li>
187
199
  <li
188
- ><strong>Business Transfers:</strong> Transferred in case of mergers or
189
- acquisitions.</li>
200
+ ><strong>Business Transfers:</strong> In connection with a merger, acquisition,
201
+ asset sale, or similar corporate transaction, we may disclose or transfer
202
+ personal information, provided that reasonable steps are taken to ensure
203
+ continued confidentiality and compliance with applicable privacy laws.</li>
190
204
  </ul>
191
205
  {:else if link.id === "security"}
192
206
  <p>
@@ -201,9 +215,11 @@ This file is part of Network Pro.
201
215
  <p><strong>Your Rights and Choices</strong></p>
202
216
  <ul>
203
217
  <li
204
- ><strong>Access, update, or delete</strong> your personal information.</li>
218
+ ><strong>Access, update, or delete</strong> your personal information,
219
+ subject to legal and contractual limitations.</li>
205
220
  <li
206
- ><strong>Restrict or object to processing</strong> under certain conditions.</li>
221
+ ><strong>Restrict or object to processing</strong> under certain conditions,
222
+ as permitted by law.</li>
207
223
  <li><strong>Opt out of direct marketing</strong></li>
208
224
  </ul>
209
225
  <p>
@@ -222,7 +238,8 @@ This file is part of Network Pro.
222
238
  <p>
223
239
  Network Pro Strategies offers informational content as a public service.
224
240
  No warranties are made regarding the accuracy or completeness of such
225
- content. Consulting services are governed by separate contracts.
241
+ content. Consulting services are governed by separate contracts. We
242
+ disclaim liability for third-party services integrated or referenced.
226
243
  </p>
227
244
  {:else if link.id === "changes"}
228
245
  <p>
@@ -230,11 +247,15 @@ This file is part of Network Pro.
230
247
  posting.
231
248
  </p>
232
249
  {:else if link.id === "contact"}
233
- <p>For questions, contact:</p>
250
+ <p
251
+ >For questions, please utilize our <a
252
+ rel={constants.rel}
253
+ href={contactLink}
254
+ target={constants.targetSelf}>Contact Form</a> or contact us directly:</p>
234
255
  <p>
235
256
  <strong>{contactInfo.company}</strong><br />
236
257
  📧 General Inquiries: <code>{contactInfo.email}</code><br />
237
- 🔐 Secure Contact: <code>{contactInfo.secure}</code><br />
258
+ 🔐 Secure Email: <code>{contactInfo.secure}</code><br />
238
259
  📞 Phone: {contactInfo.phone}
239
260
  </p>
240
261
  {/if}
@@ -1,10 +1,13 @@
1
1
  <!-- ==========================================================================
2
2
  src/lib/pages/TermsConditionsContent.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
7
8
 
9
+ <!-- cspell:ignore tandc -->
10
+
8
11
  <script>
9
12
  import { base } from "$app/paths";
10
13
 
@@ -1,10 +1,13 @@
1
1
  <!-- ==========================================================================
2
2
  src/lib/pages/TermsUseContent.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
7
8
 
9
+ <!-- cspell:ignore tandc -->
10
+
8
11
  <script>
9
12
  import { base } from "$app/paths";
10
13
 
@@ -1,70 +1,72 @@
1
1
  /* ==========================================================================
2
2
  src/lib/registerServiceWorker.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
7
8
 
9
+ // cspell:ignore nosw beforeinstallprompt
10
+
8
11
  /**
9
- * Registers the service worker and handles update lifecycle, install prompt, and
10
- * browser/environment compatibility checks. This supports offline usage and PWA behavior.
12
+ * Registers the service worker and handles update lifecycle, install prompt,
13
+ * and browser/environment compatibility checks. This supports offline usage
14
+ * and PWA behavior.
11
15
  */
12
16
  export function registerServiceWorker() {
13
- const disableSW =
14
- window?.__DISABLE_SW__ || location.search.includes("nosw");
17
+ const disableSW = window?.__DISABLE_SW__ || location.search.includes("nosw");
15
18
 
16
19
  if (disableSW) {
17
20
  console.warn("⚠️ Service Worker registration disabled via diagnostic mode.");
18
21
 
19
- if ('serviceWorker' in navigator) {
22
+ if ("serviceWorker" in navigator) {
20
23
  navigator.serviceWorker.getRegistrations().then((registrations) => {
21
- for (const registration of registrations) {
22
- registration.unregister().then((success) => {
24
+ registrations.forEach((reg) =>
25
+ reg.unregister().then((success) => {
23
26
  console.log("🧹 SW unregistered from registerServiceWorker.js:", success);
24
- });
25
- }
27
+ })
28
+ );
26
29
  });
27
30
  }
28
31
 
29
32
  return;
30
33
  }
31
34
 
32
- if ('serviceWorker' in navigator) {
33
- // Optional: skip for Firefox in dev
34
- const isFirefox = navigator.userAgent.includes('Firefox');
35
+ if ("serviceWorker" in navigator) {
36
+ const isFirefox = navigator.userAgent.includes("Firefox");
35
37
  const isDevelopment =
36
- location.hostname === 'localhost' || location.hostname === '127.0.0.1';
38
+ location.hostname === "localhost" || location.hostname === "127.0.0.1";
37
39
 
38
40
  if (isFirefox && isDevelopment) {
39
- console.log('🛑 SW registration skipped in Firefox development mode');
41
+ console.log("🛑 SW registration skipped in Firefox development mode");
40
42
  return;
41
43
  }
42
44
 
43
- window.addEventListener('load', () => {
45
+ window.addEventListener("load", () => {
44
46
  navigator.serviceWorker
45
- .register('service-worker.js')
47
+ .register("service-worker.js")
46
48
  .then((registration) => {
47
- console.log('✅ Service Worker registered with scope:', registration.scope);
49
+ console.log("✅ Service Worker registered with scope:", registration.scope);
48
50
 
49
- registration.addEventListener('updatefound', () => {
51
+ registration.addEventListener("updatefound", () => {
50
52
  const newWorker = registration.installing;
51
- console.log('[SW-CLIENT] New service worker installing...');
53
+ console.log("[SW-CLIENT] New service worker installing...");
52
54
 
53
55
  if (!newWorker) return;
54
56
 
55
57
  let updatePrompted = false;
56
58
 
57
- newWorker.addEventListener('statechange', () => {
58
- console.log('[SW-CLIENT] New worker state:', newWorker.state);
59
+ newWorker.addEventListener("statechange", () => {
60
+ console.log("[SW-CLIENT] New worker state:", newWorker.state);
59
61
 
60
62
  if (
61
- newWorker.state === 'installed' &&
63
+ newWorker.state === "installed" &&
62
64
  navigator.serviceWorker.controller &&
63
65
  !updatePrompted
64
66
  ) {
65
67
  updatePrompted = true;
66
- console.log('[SW-CLIENT] New SW installed. Prompting user to reload.');
67
- if (confirm('New content is available. Reload to update?')) {
68
+ console.log("[SW-CLIENT] New SW installed. Prompting user to reload.");
69
+ if (confirm("New content is available. Reload to update?")) {
68
70
  window.location.reload();
69
71
  }
70
72
  }
@@ -72,23 +74,25 @@ export function registerServiceWorker() {
72
74
  });
73
75
  })
74
76
  .catch((error) => {
75
- console.error('❌ Service Worker registration failed:', error);
77
+ console.error("❌ Service Worker registration failed:", error);
76
78
  });
77
79
 
78
80
  let refreshing = false;
79
- navigator.serviceWorker.addEventListener('controllerchange', () => {
80
- console.log('[SW-CLIENT] Controller changed.');
81
+ navigator.serviceWorker.addEventListener("controllerchange", () => {
82
+ console.log("[SW-CLIENT] Controller changed.");
81
83
  if (!refreshing) {
82
84
  refreshing = true;
83
85
  window.location.reload();
84
86
  }
85
87
  });
86
88
 
87
- window.addEventListener('beforeinstallprompt', (e) => {
89
+ window.addEventListener("beforeinstallprompt", (e) => {
88
90
  e.preventDefault();
89
- window.dispatchEvent(new CustomEvent('pwa-install-available', {
90
- detail: /** @type {BeforeInstallPromptEvent} */ (e)
91
- }));
91
+ window.dispatchEvent(
92
+ new CustomEvent("pwa-install-available", {
93
+ detail: /** @type {BeforeInstallPromptEvent} */ (e),
94
+ }),
95
+ );
92
96
  });
93
97
  });
94
98
  }
@@ -1,6 +1,7 @@
1
1
  /*! ==========================================================================
2
2
  src/lib/styles/default.css
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  /*! ==========================================================================
2
2
  src/lib/styles/css/global.css
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  /*! ==========================================================================
2
2
  src/lib/styles/normalize.css
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  =========================================================================== */
@@ -1,6 +1,7 @@
1
1
  /*! ==========================================================================
2
2
  src/lib/styles/css/offline.css
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  =========================================================================== */
@@ -1,6 +1,7 @@
1
1
  /*! ==========================================================================
2
2
  src/lib/styles/style.css
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  =========================================================================== */
@@ -1,6 +1,7 @@
1
1
  /*! ==========================================================================
2
2
  src/lib/styles/fa-global.css
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  /*! ==========================================================================
2
2
  src/lib/styles/global.min.css
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  =========================================================================== */
@@ -1,11 +1,12 @@
1
1
  /* ==========================================================================
2
2
  src/lib/styles/index.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
7
8
 
8
- // Import transformed and minified stylsheets
9
+ // Import transformed and minified stylesheets
9
10
  import "./global.min.css";
10
11
  import "./fa-global.css";
11
12
 
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/lib/types/metadata.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/lib/unregisterServiceWorker.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/lib/utils/utm.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/+error.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/routes/+layout.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -11,6 +12,8 @@ This file is part of Network Pro.
11
12
  * @property {string} description - The description of the page
12
13
  */
13
14
 
15
+ import { meta as routeMeta } from "$lib/meta.js"; // Import meta from $lib/meta.js and alias it
16
+
14
17
  /**
15
18
  * Fallback metadata to satisfy typing in +layout.svelte and +page.svelte.
16
19
  * Actual meta content is provided per-route via +page.server.js.
@@ -31,8 +34,11 @@ export const trailingSlash = "never";
31
34
  export function load({ url }) {
32
35
  const normalizedPathname = url.pathname.replace(/\/+$/, "") || "/";
33
36
 
37
+ // Check if meta data for the route exists in `meta.js`, otherwise use the fallback
38
+ const currentMeta = routeMeta[normalizedPathname] || fallbackMeta;
39
+
34
40
  return {
35
41
  pathname: normalizedPathname,
36
- meta: fallbackMeta, // Required to ensure meta always exists for typing
42
+ meta: currentMeta, // Return the meta data (either from the route or the fallback)
37
43
  };
38
44
  }
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/+layout.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -24,10 +25,6 @@ This file is part of Network Pro.
24
25
  import faviconSvg from "$lib/img/favicon.svg";
25
26
  import appleTouchIcon from "$lib/img/icon-180x180.png";
26
27
 
27
- onMount(() => {
28
- registerServiceWorker();
29
- });
30
-
31
28
  if (browser) {
32
29
  // Preload logo images
33
30
  [logoPng, logoWbp].forEach((src) => {
@@ -35,10 +32,15 @@ This file is part of Network Pro.
35
32
  img.src = src;
36
33
  });
37
34
 
38
- // Preload favicon SVG
39
- const touchImg = new Image();
40
35
  // Preload Apple Touch icon
36
+ const touchImg = new Image();
41
37
  touchImg.src = appleTouchIcon;
38
+
39
+ // Register the service worker only in the browser
40
+ onMount(() => {
41
+ console.log("[APP] onMount triggered in +layout.svelte");
42
+ registerServiceWorker();
43
+ });
42
44
  }
43
45
 
44
46
  // fallback values if data.meta not set
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/routes/+page.server.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/+page.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/routes/about/+page.server.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/about/+page.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -0,0 +1,22 @@
1
+ /* ==========================================================================
2
+ src/routes/api/mock-csp/+server.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
+ /** @type {import('@sveltejs/kit').RequestHandler} */
10
+ export async function POST({ request }) {
11
+ console.log("🔶 [Mock CSP] Report received during dev/CI");
12
+
13
+ // Optional: read/validate body for debugging
14
+ try {
15
+ const data = await request.json();
16
+ console.log("🔶 [Mock CSP] Payload:", data);
17
+ } catch {
18
+ console.warn("⚠️ [Mock CSP] No JSON body provided.");
19
+ }
20
+
21
+ return new Response(null, { status: 204 });
22
+ }
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/consultation/+page.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/contact/+page.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/routes/foss-spotlight/+page.server.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/lib/pages/FossSpotlightContent.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/routes/license/+page.server.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/license/+page.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/routes/privacy-policy/+page.server.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/privacy-policy/+page.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/privacy-rights/+page.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/routes/terms-conditions/+page.server.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/terms-conditions/+page.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,6 +1,7 @@
1
1
  /* ==========================================================================
2
2
  src/routes/terms-of-use/+page.server.js
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== */
@@ -1,6 +1,7 @@
1
1
  <!-- ==========================================================================
2
2
  src/routes/terms-of-use/+page.svelte
3
3
 
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
4
5
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
6
  This file is part of Network Pro.
6
7
  ========================================================================== -->
@@ -1,3 +1,11 @@
1
+ /* ==========================================================================
2
+ src/service-worker.d.ts
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
+
1
9
  /// <reference lib="webworker" />
2
10
 
3
11
  // Give access to ServiceWorkerGlobalScope when using JSDoc