@sonordev/site-kit 2.0.0 → 2.0.2

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 (89) hide show
  1. package/dist/SitemapSync-DXIV5TXI.mjs +4 -0
  2. package/dist/{SitemapSync-YK6IXOSY.mjs.map → SitemapSync-DXIV5TXI.mjs.map} +1 -1
  3. package/dist/SitemapSync-Z4NDW2S7.js +13 -0
  4. package/dist/{SitemapSync-FKYWGDAD.js.map → SitemapSync-Z4NDW2S7.js.map} +1 -1
  5. package/dist/blog/index.d.mts +6 -4
  6. package/dist/blog/index.d.ts +6 -4
  7. package/dist/blog/index.js +305 -20
  8. package/dist/blog/index.js.map +1 -1
  9. package/dist/blog/index.mjs +305 -21
  10. package/dist/blog/index.mjs.map +1 -1
  11. package/dist/blog/server.d.mts +41 -2
  12. package/dist/blog/server.d.ts +41 -2
  13. package/dist/blog/server.js +126 -685
  14. package/dist/blog/server.js.map +1 -1
  15. package/dist/blog/server.mjs +1 -663
  16. package/dist/blog/server.mjs.map +1 -1
  17. package/dist/{chunk-UD5447TC.js → chunk-6LZEGXDE.js} +3 -3
  18. package/dist/{chunk-UD5447TC.js.map → chunk-6LZEGXDE.js.map} +1 -1
  19. package/dist/{chunk-BVUOATPG.js → chunk-A7RCX6OI.js} +7 -7
  20. package/dist/{chunk-BVUOATPG.js.map → chunk-A7RCX6OI.js.map} +1 -1
  21. package/dist/{chunk-QW4RQHSK.js → chunk-ACBDH4RK.js} +15 -3
  22. package/dist/chunk-ACBDH4RK.js.map +1 -0
  23. package/dist/{chunk-TSK35UHV.mjs → chunk-HA5OXTXW.mjs} +15 -3
  24. package/dist/chunk-HA5OXTXW.mjs.map +1 -0
  25. package/dist/{chunk-RLNG67S5.js → chunk-ITPVKQB6.js} +74 -4
  26. package/dist/chunk-ITPVKQB6.js.map +1 -0
  27. package/dist/{chunk-DWI5ZKPM.mjs → chunk-IYQUFQYM.mjs} +4 -4
  28. package/dist/{chunk-DWI5ZKPM.mjs.map → chunk-IYQUFQYM.mjs.map} +1 -1
  29. package/dist/chunk-JUWYIDIA.js +823 -0
  30. package/dist/chunk-JUWYIDIA.js.map +1 -0
  31. package/dist/{chunk-OM6R7CDP.mjs → chunk-L7XPPFSS.mjs} +3 -3
  32. package/dist/{chunk-OM6R7CDP.mjs.map → chunk-L7XPPFSS.mjs.map} +1 -1
  33. package/dist/{chunk-I34XL5VJ.js → chunk-PKUTYMN7.js} +5 -5
  34. package/dist/{chunk-I34XL5VJ.js.map → chunk-PKUTYMN7.js.map} +1 -1
  35. package/dist/{chunk-WN2PUL6B.mjs → chunk-RVAFAOBA.mjs} +3 -3
  36. package/dist/{chunk-WN2PUL6B.mjs.map → chunk-RVAFAOBA.mjs.map} +1 -1
  37. package/dist/chunk-S2WK4LL7.mjs +791 -0
  38. package/dist/chunk-S2WK4LL7.mjs.map +1 -0
  39. package/dist/{chunk-J4U3IEXL.mjs → chunk-TUFP3FGI.mjs} +4 -4
  40. package/dist/chunk-TUFP3FGI.mjs.map +1 -0
  41. package/dist/{chunk-FCXQECM7.js → chunk-VU4GL5ZG.js} +4 -4
  42. package/dist/chunk-VU4GL5ZG.js.map +1 -0
  43. package/dist/{chunk-W7RZ3OTA.mjs → chunk-Z6EHHJWU.mjs} +74 -4
  44. package/dist/chunk-Z6EHHJWU.mjs.map +1 -0
  45. package/dist/index.d.mts +1 -1
  46. package/dist/index.d.ts +1 -1
  47. package/dist/layout/client.js +2 -2
  48. package/dist/layout/client.mjs +1 -1
  49. package/dist/layout/index.js +6 -6
  50. package/dist/layout/index.mjs +3 -3
  51. package/dist/llms/index.d.mts +2 -2
  52. package/dist/llms/index.d.ts +2 -2
  53. package/dist/llms/index.js +12 -12
  54. package/dist/llms/index.mjs +2 -2
  55. package/dist/seo/client.js +2 -2
  56. package/dist/seo/client.mjs +1 -1
  57. package/dist/seo/index.js +42 -42
  58. package/dist/seo/index.mjs +5 -5
  59. package/dist/seo/register-sitemap-cli.js +14 -1
  60. package/dist/seo/register-sitemap-cli.js.map +1 -1
  61. package/dist/seo/register-sitemap-cli.mjs +14 -1
  62. package/dist/seo/register-sitemap-cli.mjs.map +1 -1
  63. package/dist/seo/server.js +6 -6
  64. package/dist/seo/server.js.map +1 -1
  65. package/dist/seo/server.mjs +4 -4
  66. package/dist/seo/server.mjs.map +1 -1
  67. package/dist/{server-api-UIZU4JM3.mjs → server-api-O7SSHYQS.mjs} +3 -3
  68. package/dist/{server-api-UIZU4JM3.mjs.map → server-api-O7SSHYQS.mjs.map} +1 -1
  69. package/dist/{server-api-36R24YWN.js → server-api-W4BXUFCT.js} +21 -21
  70. package/dist/{server-api-36R24YWN.js.map → server-api-W4BXUFCT.js.map} +1 -1
  71. package/dist/sitemap/index.d.mts +34 -2
  72. package/dist/sitemap/index.d.ts +34 -2
  73. package/dist/sitemap/index.js +53 -6
  74. package/dist/sitemap/index.js.map +1 -1
  75. package/dist/sitemap/index.mjs +52 -6
  76. package/dist/sitemap/index.mjs.map +1 -1
  77. package/dist/{types-Blb2QNkV.d.ts → types-BxzT7yhf.d.mts} +22 -1
  78. package/dist/{types-Blb2QNkV.d.mts → types-BxzT7yhf.d.ts} +22 -1
  79. package/dist/{types-D08004rU.d.mts → types-DuvkNnu0.d.mts} +25 -1
  80. package/dist/{types-D08004rU.d.ts → types-DuvkNnu0.d.ts} +25 -1
  81. package/package.json +1 -1
  82. package/dist/SitemapSync-FKYWGDAD.js +0 -13
  83. package/dist/SitemapSync-YK6IXOSY.mjs +0 -4
  84. package/dist/chunk-FCXQECM7.js.map +0 -1
  85. package/dist/chunk-J4U3IEXL.mjs.map +0 -1
  86. package/dist/chunk-QW4RQHSK.js.map +0 -1
  87. package/dist/chunk-RLNG67S5.js.map +0 -1
  88. package/dist/chunk-TSK35UHV.mjs.map +0 -1
  89. package/dist/chunk-W7RZ3OTA.mjs.map +0 -1
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkUD5447TC_js = require('../chunk-UD5447TC.js');
3
+ var chunk6LZEGXDE_js = require('../chunk-6LZEGXDE.js');
4
4
  var chunkGCPPXUAI_js = require('../chunk-GCPPXUAI.js');
5
- var chunkI34XL5VJ_js = require('../chunk-I34XL5VJ.js');
6
- require('../chunk-FCXQECM7.js');
5
+ var chunkPKUTYMN7_js = require('../chunk-PKUTYMN7.js');
6
+ require('../chunk-VU4GL5ZG.js');
7
7
  require('../chunk-ZSMWDLMK.js');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
9
 
@@ -39,9 +39,9 @@ async function SiteKitLayout({
39
39
  /* @__PURE__ */ jsxRuntime.jsx("link", { rel: "preconnect", href: apiOrigin, crossOrigin: "anonymous" }),
40
40
  /* @__PURE__ */ jsxRuntime.jsx("link", { rel: "dns-prefetch", href: apiOrigin }),
41
41
  favicon && /* @__PURE__ */ jsxRuntime.jsx(chunkGCPPXUAI_js.ManagedFavicon, { apiKey: resolvedApiKey, apiUrl: resolvedApiUrl }),
42
- managedScripts && /* @__PURE__ */ jsxRuntime.jsx(chunkI34XL5VJ_js.ManagedScripts, { position: "head" }),
42
+ managedScripts && /* @__PURE__ */ jsxRuntime.jsx(chunkPKUTYMN7_js.ManagedScripts, { position: "head" }),
43
43
  /* @__PURE__ */ jsxRuntime.jsx(
44
- chunkUD5447TC_js.SiteKitClientProviders,
44
+ chunk6LZEGXDE_js.SiteKitClientProviders,
45
45
  {
46
46
  apiKey: resolvedApiKey,
47
47
  apiUrl: resolvedApiUrl,
@@ -54,7 +54,7 @@ async function SiteKitLayout({
54
54
  children
55
55
  }
56
56
  ),
57
- managedScripts && /* @__PURE__ */ jsxRuntime.jsx(chunkI34XL5VJ_js.ManagedScripts, { position: "body-end" })
57
+ managedScripts && /* @__PURE__ */ jsxRuntime.jsx(chunkPKUTYMN7_js.ManagedScripts, { position: "body-end" })
58
58
  ] });
59
59
  }
60
60
 
@@ -1,7 +1,7 @@
1
- import { SiteKitClientProviders } from '../chunk-WN2PUL6B.mjs';
1
+ import { SiteKitClientProviders } from '../chunk-RVAFAOBA.mjs';
2
2
  import { ManagedFavicon } from '../chunk-CU6OGBKK.mjs';
3
- import { ManagedScripts } from '../chunk-OM6R7CDP.mjs';
4
- import '../chunk-J4U3IEXL.mjs';
3
+ import { ManagedScripts } from '../chunk-L7XPPFSS.mjs';
4
+ import '../chunk-TUFP3FGI.mjs';
5
5
  import '../chunk-4XPGGLVP.mjs';
6
6
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
7
7
 
@@ -1,5 +1,5 @@
1
- import { G as GenerateLLMSTxtOptions, a as LLMSTxtContent, S as SpeakableSchemaProps, b as SpeakableConfig, A as AEOBlockProps, c as AEOSummaryProps, d as AEODefinitionProps, e as AEOClaimProps, L as LLMsDataResponse, f as LLMBusinessInfo, g as LLMService, h as LLMFAQItem, i as LLMPageSummary } from '../types-Blb2QNkV.mjs';
2
- export { m as AEOCitedContentProps, k as AEOEntityProps, l as AEOProvenanceListProps, C as ContentProvenance, j as LLMContactInfo } from '../types-Blb2QNkV.mjs';
1
+ import { G as GenerateLLMSTxtOptions, a as LLMSTxtContent, S as SpeakableSchemaProps, b as SpeakableConfig, A as AEOBlockProps, c as AEOSummaryProps, d as AEODefinitionProps, e as AEOClaimProps, L as LLMsDataResponse, f as LLMBusinessInfo, g as LLMService, h as LLMFAQItem, i as LLMPageSummary } from '../types-BxzT7yhf.mjs';
2
+ export { m as AEOCitedContentProps, k as AEOEntityProps, l as AEOProvenanceListProps, C as ContentProvenance, j as LLMContactInfo, n as LLMPortfolioItem } from '../types-BxzT7yhf.mjs';
3
3
  import * as React from 'react';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { G as GenerateLLMSTxtOptions, a as LLMSTxtContent, S as SpeakableSchemaProps, b as SpeakableConfig, A as AEOBlockProps, c as AEOSummaryProps, d as AEODefinitionProps, e as AEOClaimProps, L as LLMsDataResponse, f as LLMBusinessInfo, g as LLMService, h as LLMFAQItem, i as LLMPageSummary } from '../types-Blb2QNkV.js';
2
- export { m as AEOCitedContentProps, k as AEOEntityProps, l as AEOProvenanceListProps, C as ContentProvenance, j as LLMContactInfo } from '../types-Blb2QNkV.js';
1
+ import { G as GenerateLLMSTxtOptions, a as LLMSTxtContent, S as SpeakableSchemaProps, b as SpeakableConfig, A as AEOBlockProps, c as AEOSummaryProps, d as AEODefinitionProps, e as AEOClaimProps, L as LLMsDataResponse, f as LLMBusinessInfo, g as LLMService, h as LLMFAQItem, i as LLMPageSummary } from '../types-BxzT7yhf.js';
2
+ export { m as AEOCitedContentProps, k as AEOEntityProps, l as AEOProvenanceListProps, C as ContentProvenance, j as LLMContactInfo, n as LLMPortfolioItem } from '../types-BxzT7yhf.js';
3
3
  import * as React from 'react';
4
4
 
5
5
  /**
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkRLNG67S5_js = require('../chunk-RLNG67S5.js');
3
+ var chunkITPVKQB6_js = require('../chunk-ITPVKQB6.js');
4
4
  require('../chunk-ZSMWDLMK.js');
5
5
  var fs = require('fs');
6
6
  var path = require('path');
@@ -23,7 +23,7 @@ function createLLMsTxtHandler(options = {}) {
23
23
  });
24
24
  }
25
25
  }
26
- const { markdown, metadata } = await chunkRLNG67S5_js.generateLLMsTxt(generateOptions);
26
+ const { markdown, metadata } = await chunkITPVKQB6_js.generateLLMsTxt(generateOptions);
27
27
  return new Response(markdown, {
28
28
  status: 200,
29
29
  headers: {
@@ -59,7 +59,7 @@ function createLLMsFullTxtHandler(options = {}) {
59
59
  });
60
60
  }
61
61
  }
62
- const { markdown, metadata } = await chunkRLNG67S5_js.generateLLMsFullTxt(generateOptions);
62
+ const { markdown, metadata } = await chunkITPVKQB6_js.generateLLMsFullTxt(generateOptions);
63
63
  return new Response(markdown, {
64
64
  status: 200,
65
65
  headers: {
@@ -527,39 +527,39 @@ function AEOCitedContent({
527
527
 
528
528
  Object.defineProperty(exports, "generateLLMsFullTxt", {
529
529
  enumerable: true,
530
- get: function () { return chunkRLNG67S5_js.generateLLMsFullTxt; }
530
+ get: function () { return chunkITPVKQB6_js.generateLLMsFullTxt; }
531
531
  });
532
532
  Object.defineProperty(exports, "generateLLMsTxt", {
533
533
  enumerable: true,
534
- get: function () { return chunkRLNG67S5_js.generateLLMsTxt; }
534
+ get: function () { return chunkITPVKQB6_js.generateLLMsTxt; }
535
535
  });
536
536
  Object.defineProperty(exports, "getBusinessInfo", {
537
537
  enumerable: true,
538
- get: function () { return chunkRLNG67S5_js.getBusinessInfo; }
538
+ get: function () { return chunkITPVKQB6_js.getBusinessInfo; }
539
539
  });
540
540
  Object.defineProperty(exports, "getFAQItems", {
541
541
  enumerable: true,
542
- get: function () { return chunkRLNG67S5_js.getFAQItems; }
542
+ get: function () { return chunkITPVKQB6_js.getFAQItems; }
543
543
  });
544
544
  Object.defineProperty(exports, "getLLMsData", {
545
545
  enumerable: true,
546
- get: function () { return chunkRLNG67S5_js.getLLMsData; }
546
+ get: function () { return chunkITPVKQB6_js.getLLMsData; }
547
547
  });
548
548
  Object.defineProperty(exports, "getOptimizedLLMsTxt", {
549
549
  enumerable: true,
550
- get: function () { return chunkRLNG67S5_js.getOptimizedLLMsTxt; }
550
+ get: function () { return chunkITPVKQB6_js.getOptimizedLLMsTxt; }
551
551
  });
552
552
  Object.defineProperty(exports, "getPageSummaries", {
553
553
  enumerable: true,
554
- get: function () { return chunkRLNG67S5_js.getPageSummaries; }
554
+ get: function () { return chunkITPVKQB6_js.getPageSummaries; }
555
555
  });
556
556
  Object.defineProperty(exports, "getServices", {
557
557
  enumerable: true,
558
- get: function () { return chunkRLNG67S5_js.getServices; }
558
+ get: function () { return chunkITPVKQB6_js.getServices; }
559
559
  });
560
560
  Object.defineProperty(exports, "writeLLMsTxtToPublic", {
561
561
  enumerable: true,
562
- get: function () { return chunkRLNG67S5_js.writeLLMsTxtToPublic; }
562
+ get: function () { return chunkITPVKQB6_js.writeLLMsTxtToPublic; }
563
563
  });
564
564
  exports.AEOBlock = AEOBlock;
565
565
  exports.AEOCitedContent = AEOCitedContent;
@@ -1,5 +1,5 @@
1
- import { generateLLMsTxt, generateLLMsFullTxt } from '../chunk-W7RZ3OTA.mjs';
2
- export { generateLLMsFullTxt, generateLLMsTxt, getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices, writeLLMsTxtToPublic } from '../chunk-W7RZ3OTA.mjs';
1
+ import { generateLLMsTxt, generateLLMsFullTxt } from '../chunk-Z6EHHJWU.mjs';
2
+ export { generateLLMsFullTxt, generateLLMsTxt, getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices, writeLLMsTxtToPublic } from '../chunk-Z6EHHJWU.mjs';
3
3
  import '../chunk-4XPGGLVP.mjs';
4
4
  import { existsSync, readFileSync } from 'fs';
5
5
  import { join } from 'path';
@@ -1,14 +1,14 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkQW4RQHSK_js = require('../chunk-QW4RQHSK.js');
4
+ var chunkACBDH4RK_js = require('../chunk-ACBDH4RK.js');
5
5
  require('../chunk-ZSMWDLMK.js');
6
6
 
7
7
 
8
8
 
9
9
  Object.defineProperty(exports, "SitemapSync", {
10
10
  enumerable: true,
11
- get: function () { return chunkQW4RQHSK_js.SitemapSync; }
11
+ get: function () { return chunkACBDH4RK_js.SitemapSync; }
12
12
  });
13
13
  //# sourceMappingURL=client.js.map
14
14
  //# sourceMappingURL=client.js.map
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { SitemapSync } from '../chunk-TSK35UHV.mjs';
2
+ export { SitemapSync } from '../chunk-HA5OXTXW.mjs';
3
3
  import '../chunk-4XPGGLVP.mjs';
4
4
  //# sourceMappingURL=client.mjs.map
5
5
  //# sourceMappingURL=client.mjs.map
package/dist/seo/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkI34XL5VJ_js = require('../chunk-I34XL5VJ.js');
4
- var chunkQW4RQHSK_js = require('../chunk-QW4RQHSK.js');
5
- var chunkBVUOATPG_js = require('../chunk-BVUOATPG.js');
6
- var chunkFCXQECM7_js = require('../chunk-FCXQECM7.js');
3
+ var chunkPKUTYMN7_js = require('../chunk-PKUTYMN7.js');
4
+ var chunkACBDH4RK_js = require('../chunk-ACBDH4RK.js');
5
+ var chunkA7RCX6OI_js = require('../chunk-A7RCX6OI.js');
6
+ var chunkVU4GL5ZG_js = require('../chunk-VU4GL5ZG.js');
7
7
  require('../chunk-ZSMWDLMK.js');
8
8
  var react = require('react');
9
9
  var jsxRuntime = require('react/jsx-runtime');
@@ -12,7 +12,7 @@ var jsxRuntime = require('react/jsx-runtime');
12
12
  async function getManagedMetadata(options) {
13
13
  const { path, fallback = {}, overrides = {}, favicon: faviconMode = "metadata" } = options;
14
14
  const omitIcons = faviconMode === "component";
15
- const result = await chunkFCXQECM7_js.getSEOPageData(path);
15
+ const result = await chunkVU4GL5ZG_js.getSEOPageData(path);
16
16
  const pageData = result?.page;
17
17
  const projectData = result?.project;
18
18
  if (!pageData) {
@@ -41,7 +41,7 @@ async function getManagedMetadata(options) {
41
41
  };
42
42
  }
43
43
  if (!pageData.managed_title && !pageData.managed_meta_description && !pageData.managed_description) {
44
- chunkFCXQECM7_js.ensureMetadata(path).catch(() => {
44
+ chunkVU4GL5ZG_js.ensureMetadata(path).catch(() => {
45
45
  });
46
46
  }
47
47
  if (pageData.managed_title) {
@@ -95,7 +95,7 @@ async function getManagedMetadata(options) {
95
95
  }
96
96
  async function getABVariant(options) {
97
97
  const { path, field, sessionId } = options;
98
- const test = await chunkFCXQECM7_js.getABTest(path, field);
98
+ const test = await chunkVU4GL5ZG_js.getABTest(path, field);
99
99
  if (!test) {
100
100
  return null;
101
101
  }
@@ -108,7 +108,7 @@ async function getABVariant(options) {
108
108
  } else {
109
109
  variant = Math.random() < test.traffic_split ? "a" : "b";
110
110
  }
111
- chunkFCXQECM7_js.recordABImpression(test.id, variant, sessionId).catch(() => {
111
+ chunkVU4GL5ZG_js.recordABImpression(test.id, variant, sessionId).catch(() => {
112
112
  });
113
113
  return {
114
114
  testId: test.id,
@@ -180,9 +180,9 @@ async function ManagedSchemaAsync({
180
180
  includeEntityGraph = true
181
181
  }) {
182
182
  const [schemas, pageData, entitySchemas] = await Promise.all([
183
- chunkFCXQECM7_js.getSchemaMarkups(path, { includeTypes, excludeTypes }),
184
- chunkFCXQECM7_js.getSEOPageData(path),
185
- includeEntityGraph ? chunkFCXQECM7_js.getEntityEnhancedSchema(path).catch(() => []) : Promise.resolve([])
183
+ chunkVU4GL5ZG_js.getSchemaMarkups(path, { includeTypes, excludeTypes }),
184
+ chunkVU4GL5ZG_js.getSEOPageData(path),
185
+ includeEntityGraph ? chunkVU4GL5ZG_js.getEntityEnhancedSchema(path).catch(() => []) : Promise.resolve([])
186
186
  ]);
187
187
  const page = pageData?.page;
188
188
  const siteUrl = pageData?.project?.site_url || "";
@@ -210,7 +210,7 @@ async function ManagedSchemaAsync({
210
210
  }
211
211
  if (allSchemas.length === 0 && !includeEntityGraph) {
212
212
  try {
213
- const fallbackSchemas = await chunkFCXQECM7_js.getEntityEnhancedSchema(path);
213
+ const fallbackSchemas = await chunkVU4GL5ZG_js.getEntityEnhancedSchema(path);
214
214
  allSchemas.push(...fallbackSchemas);
215
215
  } catch {
216
216
  }
@@ -240,7 +240,7 @@ async function ManagedSchemaAsync({
240
240
  async function LLMSchemaAsync({
241
241
  path
242
242
  }) {
243
- const { page: pageData } = await chunkFCXQECM7_js.getSEOPageData(path);
243
+ const { page: pageData } = await chunkVU4GL5ZG_js.getSEOPageData(path);
244
244
  if (!pageData?.managed_llm_schema) {
245
245
  return null;
246
246
  }
@@ -454,7 +454,7 @@ async function ManagedFAQAsync({
454
454
  includeSchema = true,
455
455
  showTitle = true
456
456
  }) {
457
- const faqData = await chunkFCXQECM7_js.getFAQData(path);
457
+ const faqData = await chunkVU4GL5ZG_js.getFAQData(path);
458
458
  if (!faqData || !faqData.items?.length) {
459
459
  return null;
460
460
  }
@@ -506,7 +506,7 @@ async function ManagedInternalLinksAsync({
506
506
  className,
507
507
  renderLink
508
508
  }) {
509
- const links = await chunkFCXQECM7_js.getInternalLinks(path, { position, limit });
509
+ const links = await chunkVU4GL5ZG_js.getInternalLinks(path, { position, limit });
510
510
  if (!links.length) {
511
511
  return null;
512
512
  }
@@ -582,7 +582,7 @@ async function ManagedContentAsync({
582
582
  components = {},
583
583
  injectEntityAnnotations: shouldInjectEntities = false
584
584
  }) {
585
- const block = await chunkFCXQECM7_js.getContentBlock(path, section);
585
+ const block = await chunkVU4GL5ZG_js.getContentBlock(path, section);
586
586
  if (!block) {
587
587
  if (fallback) {
588
588
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback });
@@ -592,7 +592,7 @@ async function ManagedContentAsync({
592
592
  let entities = [];
593
593
  if (shouldInjectEntities) {
594
594
  try {
595
- entities = await chunkFCXQECM7_js.getEntities();
595
+ entities = await chunkVU4GL5ZG_js.getEntities();
596
596
  } catch (err) {
597
597
  console.warn("@sonordev/seo: Failed to fetch entities for annotation:", err);
598
598
  }
@@ -653,7 +653,7 @@ async function ManagedContentAsync({
653
653
  }
654
654
  }
655
655
  async function getManagedContentData(path, section) {
656
- return chunkFCXQECM7_js.getContentBlock(path, section);
656
+ return chunkVU4GL5ZG_js.getContentBlock(path, section);
657
657
  }
658
658
  function ManagedContent(props) {
659
659
  return /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(ManagedContentAsync, { ...props }) });
@@ -771,99 +771,99 @@ function LocationPageContent(props) {
771
771
 
772
772
  Object.defineProperty(exports, "ManagedNoScripts", {
773
773
  enumerable: true,
774
- get: function () { return chunkI34XL5VJ_js.ManagedNoScripts; }
774
+ get: function () { return chunkPKUTYMN7_js.ManagedNoScripts; }
775
775
  });
776
776
  Object.defineProperty(exports, "ManagedScripts", {
777
777
  enumerable: true,
778
- get: function () { return chunkI34XL5VJ_js.ManagedScripts; }
778
+ get: function () { return chunkPKUTYMN7_js.ManagedScripts; }
779
779
  });
780
780
  Object.defineProperty(exports, "SitemapSync", {
781
781
  enumerable: true,
782
- get: function () { return chunkQW4RQHSK_js.SitemapSync; }
782
+ get: function () { return chunkACBDH4RK_js.SitemapSync; }
783
783
  });
784
784
  Object.defineProperty(exports, "generateSitemap", {
785
785
  enumerable: true,
786
- get: function () { return chunkBVUOATPG_js.generateSitemap; }
786
+ get: function () { return chunkA7RCX6OI_js.generateSitemap; }
787
787
  });
788
788
  Object.defineProperty(exports, "getRedirect", {
789
789
  enumerable: true,
790
- get: function () { return chunkBVUOATPG_js.getRedirect; }
790
+ get: function () { return chunkA7RCX6OI_js.getRedirect; }
791
791
  });
792
792
  Object.defineProperty(exports, "getRobotsDirective", {
793
793
  enumerable: true,
794
- get: function () { return chunkBVUOATPG_js.getRobotsDirective; }
794
+ get: function () { return chunkA7RCX6OI_js.getRobotsDirective; }
795
795
  });
796
796
  Object.defineProperty(exports, "isIndexable", {
797
797
  enumerable: true,
798
- get: function () { return chunkBVUOATPG_js.isIndexable; }
798
+ get: function () { return chunkA7RCX6OI_js.isIndexable; }
799
799
  });
800
800
  Object.defineProperty(exports, "getABTest", {
801
801
  enumerable: true,
802
- get: function () { return chunkFCXQECM7_js.getABTest; }
802
+ get: function () { return chunkVU4GL5ZG_js.getABTest; }
803
803
  });
804
804
  Object.defineProperty(exports, "getContentBlock", {
805
805
  enumerable: true,
806
- get: function () { return chunkFCXQECM7_js.getContentBlock; }
806
+ get: function () { return chunkVU4GL5ZG_js.getContentBlock; }
807
807
  });
808
808
  Object.defineProperty(exports, "getEntities", {
809
809
  enumerable: true,
810
- get: function () { return chunkFCXQECM7_js.getEntities; }
810
+ get: function () { return chunkVU4GL5ZG_js.getEntities; }
811
811
  });
812
812
  Object.defineProperty(exports, "getEntityEnhancedSchema", {
813
813
  enumerable: true,
814
- get: function () { return chunkFCXQECM7_js.getEntityEnhancedSchema; }
814
+ get: function () { return chunkVU4GL5ZG_js.getEntityEnhancedSchema; }
815
815
  });
816
816
  Object.defineProperty(exports, "getFAQData", {
817
817
  enumerable: true,
818
- get: function () { return chunkFCXQECM7_js.getFAQData; }
818
+ get: function () { return chunkVU4GL5ZG_js.getFAQData; }
819
819
  });
820
820
  Object.defineProperty(exports, "getInternalLinks", {
821
821
  enumerable: true,
822
- get: function () { return chunkFCXQECM7_js.getInternalLinks; }
822
+ get: function () { return chunkVU4GL5ZG_js.getInternalLinks; }
823
823
  });
824
824
  Object.defineProperty(exports, "getManagedScripts", {
825
825
  enumerable: true,
826
- get: function () { return chunkFCXQECM7_js.getManagedScripts; }
826
+ get: function () { return chunkVU4GL5ZG_js.getManagedScripts; }
827
827
  });
828
828
  Object.defineProperty(exports, "getPrimaryEntity", {
829
829
  enumerable: true,
830
- get: function () { return chunkFCXQECM7_js.getPrimaryEntity; }
830
+ get: function () { return chunkVU4GL5ZG_js.getPrimaryEntity; }
831
831
  });
832
832
  Object.defineProperty(exports, "getRedirectData", {
833
833
  enumerable: true,
834
- get: function () { return chunkFCXQECM7_js.getRedirectData; }
834
+ get: function () { return chunkVU4GL5ZG_js.getRedirectData; }
835
835
  });
836
836
  Object.defineProperty(exports, "getRobotsData", {
837
837
  enumerable: true,
838
- get: function () { return chunkFCXQECM7_js.getRobotsData; }
838
+ get: function () { return chunkVU4GL5ZG_js.getRobotsData; }
839
839
  });
840
840
  Object.defineProperty(exports, "getSEOPageData", {
841
841
  enumerable: true,
842
- get: function () { return chunkFCXQECM7_js.getSEOPageData; }
842
+ get: function () { return chunkVU4GL5ZG_js.getSEOPageData; }
843
843
  });
844
844
  Object.defineProperty(exports, "getSchemaMarkups", {
845
845
  enumerable: true,
846
- get: function () { return chunkFCXQECM7_js.getSchemaMarkups; }
846
+ get: function () { return chunkVU4GL5ZG_js.getSchemaMarkups; }
847
847
  });
848
848
  Object.defineProperty(exports, "getSitemapEntries", {
849
849
  enumerable: true,
850
- get: function () { return chunkFCXQECM7_js.getSitemapEntries; }
850
+ get: function () { return chunkVU4GL5ZG_js.getSitemapEntries; }
851
851
  });
852
852
  Object.defineProperty(exports, "getVisibilityScore", {
853
853
  enumerable: true,
854
- get: function () { return chunkFCXQECM7_js.getVisibilityScore; }
854
+ get: function () { return chunkVU4GL5ZG_js.getVisibilityScore; }
855
855
  });
856
856
  Object.defineProperty(exports, "getVisibilitySummary", {
857
857
  enumerable: true,
858
- get: function () { return chunkFCXQECM7_js.getVisibilitySummary; }
858
+ get: function () { return chunkVU4GL5ZG_js.getVisibilitySummary; }
859
859
  });
860
860
  Object.defineProperty(exports, "recordABImpression", {
861
861
  enumerable: true,
862
- get: function () { return chunkFCXQECM7_js.recordABImpression; }
862
+ get: function () { return chunkVU4GL5ZG_js.recordABImpression; }
863
863
  });
864
864
  Object.defineProperty(exports, "registerSitemap", {
865
865
  enumerable: true,
866
- get: function () { return chunkFCXQECM7_js.registerSitemap; }
866
+ get: function () { return chunkVU4GL5ZG_js.registerSitemap; }
867
867
  });
868
868
  exports.LLMSchema = LLMSchema;
869
869
  exports.LocationPageContent = LocationPageContent;
@@ -1,8 +1,8 @@
1
- export { ManagedNoScripts, ManagedScripts } from '../chunk-OM6R7CDP.mjs';
2
- export { SitemapSync } from '../chunk-TSK35UHV.mjs';
3
- export { generateSitemap, getRedirect, getRobotsDirective, isIndexable } from '../chunk-DWI5ZKPM.mjs';
4
- import { getSEOPageData, ensureMetadata, getABTest, recordABImpression, getContentBlock, getSchemaMarkups, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities } from '../chunk-J4U3IEXL.mjs';
5
- export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from '../chunk-J4U3IEXL.mjs';
1
+ export { ManagedNoScripts, ManagedScripts } from '../chunk-L7XPPFSS.mjs';
2
+ export { SitemapSync } from '../chunk-HA5OXTXW.mjs';
3
+ export { generateSitemap, getRedirect, getRobotsDirective, isIndexable } from '../chunk-IYQUFQYM.mjs';
4
+ import { getSEOPageData, ensureMetadata, getABTest, recordABImpression, getContentBlock, getSchemaMarkups, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities } from '../chunk-TUFP3FGI.mjs';
5
+ export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from '../chunk-TUFP3FGI.mjs';
6
6
  import '../chunk-4XPGGLVP.mjs';
7
7
  import { cache, Suspense } from 'react';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -11,6 +11,17 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
11
  var path__default = /*#__PURE__*/_interopDefault(path);
12
12
  var fs__default = /*#__PURE__*/_interopDefault(fs);
13
13
 
14
+ function inferPageTypeFromPath(urlPath) {
15
+ if (urlPath === "/" || urlPath === "") return "homepage";
16
+ if (/^\/services(\/|$)/i.test(urlPath)) return "service";
17
+ if (/^\/compare(\/|$)/i.test(urlPath)) return "comparison";
18
+ if (/^\/(insights|blog)(\/|$)/i.test(urlPath)) return "blog";
19
+ if (/^\/industries(\/|$)/i.test(urlPath)) return "industry";
20
+ if (/^\/work(\/|$)/i.test(urlPath)) return "portfolio";
21
+ if (/^\/faq(\/|$)/i.test(urlPath)) return "faq";
22
+ if (/^\/pricing(\/|$)/i.test(urlPath)) return "pricing";
23
+ return "page";
24
+ }
14
25
  function getApiConfig() {
15
26
  const apiUrl = process.env.SONOR_API_URL || "https://api.sonor.io";
16
27
  const apiKey = process.env.SONOR_API_KEY || "";
@@ -105,7 +116,9 @@ async function registerLocalSitemap(options) {
105
116
  path: e.path,
106
117
  title: e.title,
107
118
  priority: e.priority,
108
- changefreq: e.changefreq
119
+ changefreq: e.changefreq,
120
+ ...e.description ? { description: e.description } : {},
121
+ pageType: e.pageType ?? inferPageTypeFromPath(e.path)
109
122
  }));
110
123
  const result = await registerSitemapViaApi(
111
124
  payload,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/seo/register-sitemap-cli-impl.ts","../../src/seo/register-sitemap-cli.ts"],"names":["fs","path","cwd","dotenvConfig"],"mappings":"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","file":"register-sitemap-cli.js","sourcesContent":["/**\n * Standalone implementation for uptrade-register-sitemap CLI.\n * Does NOT import from server-api or routing, so it can run in Node without\n * pulling in server-only (which throws when required outside Next.js server context).\n */\n\nimport fs from 'fs'\nimport path from 'path'\n\nfunction getApiConfig(): { apiUrl: string; apiKey: string } {\n const apiUrl =\n process.env.SONOR_API_URL ||\n 'https://api.sonor.io'\n const apiKey =\n process.env.SONOR_API_KEY ||\n ''\n return { apiUrl, apiKey }\n}\n\nfunction discoverNextJsRoutes(\n appDir: string,\n basePath: string = ''\n): Array<{ path: string; priority: number }> {\n const entries: Array<{ path: string; priority: number }> = []\n\n const items = fs.readdirSync(appDir, { withFileTypes: true })\n\n for (const item of items) {\n if (item.name.startsWith('_') || item.name.startsWith('.')) continue\n if (item.name === 'api') continue\n if (item.name === 'node_modules') continue\n\n const itemPath = path.join(appDir, item.name)\n\n if (item.isDirectory()) {\n const hasPage =\n fs.existsSync(path.join(itemPath, 'page.tsx')) ||\n fs.existsSync(path.join(itemPath, 'page.js')) ||\n fs.existsSync(path.join(itemPath, 'page.jsx'))\n\n const isRouteGroup = item.name.startsWith('(') && item.name.endsWith(')')\n const isDynamic = item.name.startsWith('[') && item.name.endsWith(']')\n\n let routePath = basePath\n if (!isRouteGroup && !isDynamic) {\n routePath = `${basePath}/${item.name}`\n }\n\n if (hasPage && !isDynamic) {\n const priority = routePath === '' ? 1.0 : 0.8\n entries.push({ path: routePath || '/', priority })\n }\n\n if (!isDynamic) {\n const subEntries = discoverNextJsRoutes(\n itemPath,\n isRouteGroup ? basePath : routePath\n )\n entries.push(...subEntries)\n }\n }\n }\n\n if (basePath === '') {\n const hasRootPage =\n fs.existsSync(path.join(appDir, 'page.tsx')) ||\n fs.existsSync(path.join(appDir, 'page.js')) ||\n fs.existsSync(path.join(appDir, 'page.jsx'))\n if (hasRootPage) {\n entries.unshift({ path: '/', priority: 1.0 })\n }\n }\n\n return entries\n}\n\nasync function registerSitemapViaApi(\n entries: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: string\n }>,\n optimizeMeta: boolean\n): Promise<{\n success: boolean\n created: number\n updated: number\n removed?: number\n meta_optimization?: { triggered: boolean; pages_queued: number } | null\n}> {\n const { apiUrl, apiKey } = getApiConfig()\n if (!apiKey) {\n console.warn(\n '[Sonor] No API key (SONOR_API_KEY)',\n )\n return { success: false, created: 0, updated: 0 }\n }\n\n try {\n const response = await fetch(`${apiUrl}/api/public/seo/register-sitemap`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({ entries, optimize_meta: optimizeMeta, mode: 'full-replace' }),\n })\n\n if (!response.ok) {\n console.error(`[Sonor] Sitemap registration failed: ${response.status} ${response.statusText}`)\n return { success: false, created: 0, updated: 0 }\n }\n\n return await response.json()\n } catch (error) {\n console.error('[Sonor] Sitemap registration error:', error)\n return { success: false, created: 0, updated: 0 }\n }\n}\n\nexport type RegisterLocalSitemapOptions = {\n entries?: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n }>\n autoDiscover?: boolean\n optimize_meta?: boolean\n}\n\nexport type RegisterLocalSitemapResult = {\n success: boolean\n created: number\n updated: number\n removed?: number\n meta_optimization?: {\n triggered: boolean\n pages_queued: number\n } | null\n}\n\nexport async function registerLocalSitemap(\n options: RegisterLocalSitemapOptions\n): Promise<RegisterLocalSitemapResult> {\n let entries = options.entries || []\n\n if (options.autoDiscover && entries.length === 0) {\n const cwd = process.cwd()\n const appDirs = [\n path.join(cwd, 'app'),\n path.join(cwd, 'src', 'app'),\n ]\n for (const appDir of appDirs) {\n if (fs.existsSync(appDir)) {\n entries = discoverNextJsRoutes(appDir)\n console.log(`[Sonor] Auto-discovered ${entries.length} routes from ${path.relative(cwd, appDir)}`)\n break\n }\n }\n }\n\n if (entries.length === 0) {\n console.warn('[Sonor] No sitemap entries to register')\n return { success: true, created: 0, updated: 0 }\n }\n\n console.log(`[Sonor] Registering ${entries.length} sitemap entries...`)\n const payload = entries.map((e) => ({\n path: e.path,\n title: e.title,\n priority: e.priority,\n changefreq: e.changefreq,\n }))\n const result = await registerSitemapViaApi(\n payload,\n options.optimize_meta !== false\n )\n\n if (result.success) {\n console.log(`[Sonor] Sitemap registered: ${result.created} new, ${result.updated} updated`)\n }\n\n return result\n}\n","#!/usr/bin/env node\n/**\n * CLI script to register sitemap entries at build time\n * \n * Usage:\n * npx sonor-register-sitemap\n * npx sonor-register-sitemap --auto-discover\n * npx sonor-register-sitemap --no-optimize # Skip Signal AI meta optimization\n *\n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"sonor-register-sitemap --auto-discover\"\n * }\n * }\n */\n\nimport path from 'path'\nimport { config as dotenvConfig } from 'dotenv'\nimport { registerLocalSitemap } from './register-sitemap-cli-impl'\n\n// npm postbuild runs outside Next.js — env from .env* is not loaded automatically\nconst cwd = process.cwd()\ndotenvConfig({ path: path.join(cwd, '.env') })\ndotenvConfig({ path: path.join(cwd, '.env.local'), override: true })\nif (process.env.NODE_ENV === 'production') {\n dotenvConfig({ path: path.join(cwd, '.env.production') })\n dotenvConfig({ path: path.join(cwd, '.env.production.local'), override: true })\n}\n\nasync function main() {\n const args = process.argv.slice(2)\n const autoDiscover = args.includes('--auto-discover') || args.includes('-a')\n const skipOptimize = args.includes('--no-optimize') || args.includes('--skip-optimize')\n \n console.log('[Sonor] Registering sitemap entries...')\n \n try {\n const result = await registerLocalSitemap({\n autoDiscover,\n optimize_meta: !skipOptimize,\n })\n \n if (result.success) {\n console.log(`[Sonor] ✓ Sitemap registered successfully`)\n console.log(`[Sonor] Created: ${result.created}`)\n console.log(`[Sonor] Updated: ${result.updated}`)\n if (result.removed !== undefined && result.removed > 0) {\n console.log(`[Sonor] Removed: ${result.removed}`)\n }\n if (result.meta_optimization?.triggered) {\n console.log(`[Sonor] ✓ Signal AI meta optimization triggered for ${result.meta_optimization.pages_queued} pages`)\n console.log(`[Sonor] (Running in background - check Portal SEO module for results)`)\n }\n process.exit(0)\n } else {\n console.error('[Sonor] ✗ Failed to register sitemap')\n process.exit(1)\n }\n } catch (error) {\n console.error('[Sonor] ✗ Error:', error)\n process.exit(1)\n }\n}\n\nmain()\n"]}
1
+ {"version":3,"sources":["../../src/seo/register-sitemap-cli-impl.ts","../../src/seo/register-sitemap-cli.ts"],"names":["fs","path","cwd","dotenvConfig"],"mappings":"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","file":"register-sitemap-cli.js","sourcesContent":["/**\n * Standalone implementation for uptrade-register-sitemap CLI.\n * Does NOT import from server-api or routing, so it can run in Node without\n * pulling in server-only (which throws when required outside Next.js server context).\n */\n\nimport fs from 'fs'\nimport path from 'path'\n\n/**\n * Infer page type from URL path pattern for Signal context.\n */\nfunction inferPageTypeFromPath(urlPath: string): string {\n if (urlPath === '/' || urlPath === '') return 'homepage'\n if (/^\\/services(\\/|$)/i.test(urlPath)) return 'service'\n if (/^\\/compare(\\/|$)/i.test(urlPath)) return 'comparison'\n if (/^\\/(insights|blog)(\\/|$)/i.test(urlPath)) return 'blog'\n if (/^\\/industries(\\/|$)/i.test(urlPath)) return 'industry'\n if (/^\\/work(\\/|$)/i.test(urlPath)) return 'portfolio'\n if (/^\\/faq(\\/|$)/i.test(urlPath)) return 'faq'\n if (/^\\/pricing(\\/|$)/i.test(urlPath)) return 'pricing'\n return 'page'\n}\n\nfunction getApiConfig(): { apiUrl: string; apiKey: string } {\n const apiUrl =\n process.env.SONOR_API_URL ||\n 'https://api.sonor.io'\n const apiKey =\n process.env.SONOR_API_KEY ||\n ''\n return { apiUrl, apiKey }\n}\n\nfunction discoverNextJsRoutes(\n appDir: string,\n basePath: string = ''\n): Array<{ path: string; priority: number }> {\n const entries: Array<{ path: string; priority: number }> = []\n\n const items = fs.readdirSync(appDir, { withFileTypes: true })\n\n for (const item of items) {\n if (item.name.startsWith('_') || item.name.startsWith('.')) continue\n if (item.name === 'api') continue\n if (item.name === 'node_modules') continue\n\n const itemPath = path.join(appDir, item.name)\n\n if (item.isDirectory()) {\n const hasPage =\n fs.existsSync(path.join(itemPath, 'page.tsx')) ||\n fs.existsSync(path.join(itemPath, 'page.js')) ||\n fs.existsSync(path.join(itemPath, 'page.jsx'))\n\n const isRouteGroup = item.name.startsWith('(') && item.name.endsWith(')')\n const isDynamic = item.name.startsWith('[') && item.name.endsWith(']')\n\n let routePath = basePath\n if (!isRouteGroup && !isDynamic) {\n routePath = `${basePath}/${item.name}`\n }\n\n if (hasPage && !isDynamic) {\n const priority = routePath === '' ? 1.0 : 0.8\n entries.push({ path: routePath || '/', priority })\n }\n\n if (!isDynamic) {\n const subEntries = discoverNextJsRoutes(\n itemPath,\n isRouteGroup ? basePath : routePath\n )\n entries.push(...subEntries)\n }\n }\n }\n\n if (basePath === '') {\n const hasRootPage =\n fs.existsSync(path.join(appDir, 'page.tsx')) ||\n fs.existsSync(path.join(appDir, 'page.js')) ||\n fs.existsSync(path.join(appDir, 'page.jsx'))\n if (hasRootPage) {\n entries.unshift({ path: '/', priority: 1.0 })\n }\n }\n\n return entries\n}\n\nasync function registerSitemapViaApi(\n entries: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: string\n description?: string\n pageType?: string\n }>,\n optimizeMeta: boolean\n): Promise<{\n success: boolean\n created: number\n updated: number\n removed?: number\n meta_optimization?: { triggered: boolean; pages_queued: number } | null\n}> {\n const { apiUrl, apiKey } = getApiConfig()\n if (!apiKey) {\n console.warn(\n '[Sonor] No API key (SONOR_API_KEY)',\n )\n return { success: false, created: 0, updated: 0 }\n }\n\n try {\n const response = await fetch(`${apiUrl}/api/public/seo/register-sitemap`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({ entries, optimize_meta: optimizeMeta, mode: 'full-replace' }),\n })\n\n if (!response.ok) {\n console.error(`[Sonor] Sitemap registration failed: ${response.status} ${response.statusText}`)\n return { success: false, created: 0, updated: 0 }\n }\n\n return await response.json()\n } catch (error) {\n console.error('[Sonor] Sitemap registration error:', error)\n return { success: false, created: 0, updated: 0 }\n }\n}\n\nexport type RegisterLocalSitemapOptions = {\n entries?: Array<{\n path: string\n title?: string\n priority?: number\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n description?: string\n pageType?: string\n }>\n autoDiscover?: boolean\n optimize_meta?: boolean\n}\n\nexport type RegisterLocalSitemapResult = {\n success: boolean\n created: number\n updated: number\n removed?: number\n meta_optimization?: {\n triggered: boolean\n pages_queued: number\n } | null\n}\n\nexport async function registerLocalSitemap(\n options: RegisterLocalSitemapOptions\n): Promise<RegisterLocalSitemapResult> {\n let entries = options.entries || []\n\n if (options.autoDiscover && entries.length === 0) {\n const cwd = process.cwd()\n const appDirs = [\n path.join(cwd, 'app'),\n path.join(cwd, 'src', 'app'),\n ]\n for (const appDir of appDirs) {\n if (fs.existsSync(appDir)) {\n entries = discoverNextJsRoutes(appDir)\n console.log(`[Sonor] Auto-discovered ${entries.length} routes from ${path.relative(cwd, appDir)}`)\n break\n }\n }\n }\n\n if (entries.length === 0) {\n console.warn('[Sonor] No sitemap entries to register')\n return { success: true, created: 0, updated: 0 }\n }\n\n console.log(`[Sonor] Registering ${entries.length} sitemap entries...`)\n const payload = entries.map((e) => ({\n path: e.path,\n title: e.title,\n priority: e.priority,\n changefreq: e.changefreq,\n ...(e.description ? { description: e.description } : {}),\n pageType: e.pageType ?? inferPageTypeFromPath(e.path),\n }))\n const result = await registerSitemapViaApi(\n payload,\n options.optimize_meta !== false\n )\n\n if (result.success) {\n console.log(`[Sonor] Sitemap registered: ${result.created} new, ${result.updated} updated`)\n }\n\n return result\n}\n","#!/usr/bin/env node\n/**\n * CLI script to register sitemap entries at build time\n * \n * Usage:\n * npx sonor-register-sitemap\n * npx sonor-register-sitemap --auto-discover\n * npx sonor-register-sitemap --no-optimize # Skip Signal AI meta optimization\n *\n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"sonor-register-sitemap --auto-discover\"\n * }\n * }\n */\n\nimport path from 'path'\nimport { config as dotenvConfig } from 'dotenv'\nimport { registerLocalSitemap } from './register-sitemap-cli-impl'\n\n// npm postbuild runs outside Next.js — env from .env* is not loaded automatically\nconst cwd = process.cwd()\ndotenvConfig({ path: path.join(cwd, '.env') })\ndotenvConfig({ path: path.join(cwd, '.env.local'), override: true })\nif (process.env.NODE_ENV === 'production') {\n dotenvConfig({ path: path.join(cwd, '.env.production') })\n dotenvConfig({ path: path.join(cwd, '.env.production.local'), override: true })\n}\n\nasync function main() {\n const args = process.argv.slice(2)\n const autoDiscover = args.includes('--auto-discover') || args.includes('-a')\n const skipOptimize = args.includes('--no-optimize') || args.includes('--skip-optimize')\n \n console.log('[Sonor] Registering sitemap entries...')\n \n try {\n const result = await registerLocalSitemap({\n autoDiscover,\n optimize_meta: !skipOptimize,\n })\n \n if (result.success) {\n console.log(`[Sonor] ✓ Sitemap registered successfully`)\n console.log(`[Sonor] Created: ${result.created}`)\n console.log(`[Sonor] Updated: ${result.updated}`)\n if (result.removed !== undefined && result.removed > 0) {\n console.log(`[Sonor] Removed: ${result.removed}`)\n }\n if (result.meta_optimization?.triggered) {\n console.log(`[Sonor] ✓ Signal AI meta optimization triggered for ${result.meta_optimization.pages_queued} pages`)\n console.log(`[Sonor] (Running in background - check Portal SEO module for results)`)\n }\n process.exit(0)\n } else {\n console.error('[Sonor] ✗ Failed to register sitemap')\n process.exit(1)\n }\n } catch (error) {\n console.error('[Sonor] ✗ Error:', error)\n process.exit(1)\n }\n}\n\nmain()\n"]}
@@ -4,6 +4,17 @@ import path from 'path';
4
4
  import { config } from 'dotenv';
5
5
  import fs from 'fs';
6
6
 
7
+ function inferPageTypeFromPath(urlPath) {
8
+ if (urlPath === "/" || urlPath === "") return "homepage";
9
+ if (/^\/services(\/|$)/i.test(urlPath)) return "service";
10
+ if (/^\/compare(\/|$)/i.test(urlPath)) return "comparison";
11
+ if (/^\/(insights|blog)(\/|$)/i.test(urlPath)) return "blog";
12
+ if (/^\/industries(\/|$)/i.test(urlPath)) return "industry";
13
+ if (/^\/work(\/|$)/i.test(urlPath)) return "portfolio";
14
+ if (/^\/faq(\/|$)/i.test(urlPath)) return "faq";
15
+ if (/^\/pricing(\/|$)/i.test(urlPath)) return "pricing";
16
+ return "page";
17
+ }
7
18
  function getApiConfig() {
8
19
  const apiUrl = process.env.SONOR_API_URL || "https://api.sonor.io";
9
20
  const apiKey = process.env.SONOR_API_KEY || "";
@@ -98,7 +109,9 @@ async function registerLocalSitemap(options) {
98
109
  path: e.path,
99
110
  title: e.title,
100
111
  priority: e.priority,
101
- changefreq: e.changefreq
112
+ changefreq: e.changefreq,
113
+ ...e.description ? { description: e.description } : {},
114
+ pageType: e.pageType ?? inferPageTypeFromPath(e.path)
102
115
  }));
103
116
  const result = await registerSitemapViaApi(
104
117
  payload,