@sonordev/site-kit 1.5.0 → 1.5.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 (113) hide show
  1. package/dist/AnalyticsProvider-BBLU4U2T.mjs +4 -0
  2. package/dist/{AnalyticsProvider-OXX23PK5.mjs.map → AnalyticsProvider-BBLU4U2T.mjs.map} +1 -1
  3. package/dist/AnalyticsProvider-EMDIAAWR.js +25 -0
  4. package/dist/{AnalyticsProvider-KJWDN6YO.js.map → AnalyticsProvider-EMDIAAWR.js.map} +1 -1
  5. package/dist/SitemapSync-FKYWGDAD.js +13 -0
  6. package/dist/{SitemapSync-6I5JTLER.js.map → SitemapSync-FKYWGDAD.js.map} +1 -1
  7. package/dist/SitemapSync-YK6IXOSY.mjs +4 -0
  8. package/dist/{SitemapSync-6L45DHRH.mjs.map → SitemapSync-YK6IXOSY.mjs.map} +1 -1
  9. package/dist/analytics/index.js +9 -9
  10. package/dist/analytics/index.mjs +2 -2
  11. package/dist/{chunk-XTRXH5OL.mjs → chunk-35MALWVX.mjs} +4 -4
  12. package/dist/{chunk-XTRXH5OL.mjs.map → chunk-35MALWVX.mjs.map} +1 -1
  13. package/dist/{chunk-7URAOG2M.js → chunk-4MOJJSNA.js} +5 -2
  14. package/dist/chunk-4MOJJSNA.js.map +1 -0
  15. package/dist/{chunk-CYZYPWGW.mjs → chunk-4X5TFGKD.mjs} +3 -3
  16. package/dist/{chunk-CYZYPWGW.mjs.map → chunk-4X5TFGKD.mjs.map} +1 -1
  17. package/dist/{chunk-RRBBMEDL.js → chunk-ELDJDBQL.js} +7 -7
  18. package/dist/{chunk-RRBBMEDL.js.map → chunk-ELDJDBQL.js.map} +1 -1
  19. package/dist/{chunk-KMLCQYEV.mjs → chunk-FI2ME55T.mjs} +3 -3
  20. package/dist/{chunk-KMLCQYEV.mjs.map → chunk-FI2ME55T.mjs.map} +1 -1
  21. package/dist/{chunk-3QKTOTWS.mjs → chunk-FMB2RZDH.mjs} +77 -37
  22. package/dist/chunk-FMB2RZDH.mjs.map +1 -0
  23. package/dist/{chunk-DKSHZ7TG.js → chunk-FTSXKDP3.js} +24 -20
  24. package/dist/chunk-FTSXKDP3.js.map +1 -0
  25. package/dist/{chunk-5NXUENL3.js → chunk-GJD4CFHN.js} +3 -3
  26. package/dist/{chunk-5NXUENL3.js.map → chunk-GJD4CFHN.js.map} +1 -1
  27. package/dist/{chunk-JGNQK2G6.mjs → chunk-JFTGG6HK.mjs} +5 -2
  28. package/dist/chunk-JFTGG6HK.mjs.map +1 -0
  29. package/dist/{chunk-LTTTIJPN.js → chunk-KJN2C6YE.js} +5 -5
  30. package/dist/{chunk-LTTTIJPN.js.map → chunk-KJN2C6YE.js.map} +1 -1
  31. package/dist/{chunk-35L6FXF5.mjs → chunk-KRPFLF62.mjs} +24 -20
  32. package/dist/chunk-KRPFLF62.mjs.map +1 -0
  33. package/dist/{chunk-J4K335PQ.mjs → chunk-M5FLRLHI.mjs} +3 -3
  34. package/dist/{chunk-J4K335PQ.mjs.map → chunk-M5FLRLHI.mjs.map} +1 -1
  35. package/dist/{chunk-WY346LOO.mjs → chunk-MCGLYYAR.mjs} +3 -3
  36. package/dist/{chunk-WY346LOO.mjs.map → chunk-MCGLYYAR.mjs.map} +1 -1
  37. package/dist/{chunk-RJTBSSZB.mjs → chunk-NRNK7LXK.mjs} +4 -4
  38. package/dist/{chunk-RJTBSSZB.mjs.map → chunk-NRNK7LXK.mjs.map} +1 -1
  39. package/dist/{chunk-466AL5CC.js → chunk-OE5DEMCV.js} +4 -4
  40. package/dist/{chunk-466AL5CC.js.map → chunk-OE5DEMCV.js.map} +1 -1
  41. package/dist/{chunk-BPXMOHVH.mjs → chunk-PM2KQ6YK.mjs} +3 -3
  42. package/dist/{chunk-BPXMOHVH.mjs.map → chunk-PM2KQ6YK.mjs.map} +1 -1
  43. package/dist/{chunk-PJKHCYI5.js → chunk-PTTDKFL7.js} +77 -37
  44. package/dist/chunk-PTTDKFL7.js.map +1 -0
  45. package/dist/{chunk-YBQT623Y.js → chunk-QW4RQHSK.js} +9 -7
  46. package/dist/chunk-QW4RQHSK.js.map +1 -0
  47. package/dist/{chunk-AWSVC7SP.js → chunk-TC6TOW2T.js} +4 -4
  48. package/dist/{chunk-AWSVC7SP.js.map → chunk-TC6TOW2T.js.map} +1 -1
  49. package/dist/{chunk-HNCSTGVK.mjs → chunk-TSK35UHV.mjs} +9 -7
  50. package/dist/chunk-TSK35UHV.mjs.map +1 -0
  51. package/dist/{chunk-YP5YVWAG.js → chunk-WW7UM7XY.js} +5 -5
  52. package/dist/{chunk-YP5YVWAG.js.map → chunk-WW7UM7XY.js.map} +1 -1
  53. package/dist/{chunk-6YW6EWMH.js → chunk-ZQO6FZZB.js} +3 -3
  54. package/dist/{chunk-6YW6EWMH.js.map → chunk-ZQO6FZZB.js.map} +1 -1
  55. package/dist/cli/index.js +10 -10
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/cli/index.mjs +4 -4
  58. package/dist/cli/index.mjs.map +1 -1
  59. package/dist/commerce/index.js +47 -47
  60. package/dist/commerce/index.mjs +3 -3
  61. package/dist/index.js +30 -30
  62. package/dist/index.mjs +4 -4
  63. package/dist/layout/client.js +2 -2
  64. package/dist/layout/client.mjs +1 -1
  65. package/dist/layout/index.js +6 -6
  66. package/dist/layout/index.mjs +3 -3
  67. package/dist/llms/index.js +12 -12
  68. package/dist/llms/index.mjs +2 -2
  69. package/dist/{scanner-LKJKW7IT.mjs → scanner-AF7YUCFG.mjs} +3 -3
  70. package/dist/{scanner-LKJKW7IT.mjs.map → scanner-AF7YUCFG.mjs.map} +1 -1
  71. package/dist/{scanner-GAF5PO5F.js → scanner-DBD5K6F7.js} +14 -14
  72. package/dist/{scanner-GAF5PO5F.js.map → scanner-DBD5K6F7.js.map} +1 -1
  73. package/dist/seo/client.d.mts +7 -1
  74. package/dist/seo/client.d.ts +7 -1
  75. package/dist/seo/client.js +2 -2
  76. package/dist/seo/client.mjs +1 -1
  77. package/dist/seo/index.d.mts +29 -4
  78. package/dist/seo/index.d.ts +29 -4
  79. package/dist/seo/index.js +42 -42
  80. package/dist/seo/index.mjs +5 -5
  81. package/dist/seo/register-sitemap-cli.js +1 -1
  82. package/dist/seo/register-sitemap-cli.js.map +1 -1
  83. package/dist/seo/register-sitemap-cli.mjs +1 -1
  84. package/dist/seo/register-sitemap-cli.mjs.map +1 -1
  85. package/dist/seo/server.js +4 -4
  86. package/dist/seo/server.mjs +2 -2
  87. package/dist/{server-api-FCTEQOTK.mjs → server-api-COVFLFZ2.mjs} +3 -3
  88. package/dist/{server-api-FCTEQOTK.mjs.map → server-api-COVFLFZ2.mjs.map} +1 -1
  89. package/dist/{server-api-SYINXTN7.js → server-api-XGKRGUMG.js} +21 -21
  90. package/dist/{server-api-SYINXTN7.js.map → server-api-XGKRGUMG.js.map} +1 -1
  91. package/dist/setup/index.js +2 -2
  92. package/dist/setup/index.mjs +1 -1
  93. package/dist/setup/server.js +2 -2
  94. package/dist/setup/server.mjs +1 -1
  95. package/dist/sitemap/index.d.mts +9 -0
  96. package/dist/sitemap/index.d.ts +9 -0
  97. package/dist/sitemap/index.js +157 -17
  98. package/dist/sitemap/index.js.map +1 -1
  99. package/dist/sitemap/index.mjs +157 -17
  100. package/dist/sitemap/index.mjs.map +1 -1
  101. package/package.json +3 -1
  102. package/dist/AnalyticsProvider-KJWDN6YO.js +0 -25
  103. package/dist/AnalyticsProvider-OXX23PK5.mjs +0 -4
  104. package/dist/SitemapSync-6I5JTLER.js +0 -13
  105. package/dist/SitemapSync-6L45DHRH.mjs +0 -4
  106. package/dist/chunk-35L6FXF5.mjs.map +0 -1
  107. package/dist/chunk-3QKTOTWS.mjs.map +0 -1
  108. package/dist/chunk-7URAOG2M.js.map +0 -1
  109. package/dist/chunk-DKSHZ7TG.js.map +0 -1
  110. package/dist/chunk-HNCSTGVK.mjs.map +0 -1
  111. package/dist/chunk-JGNQK2G6.mjs.map +0 -1
  112. package/dist/chunk-PJKHCYI5.js.map +0 -1
  113. package/dist/chunk-YBQT623Y.js.map +0 -1
@@ -1,53 +1,53 @@
1
1
  'use strict';
2
2
 
3
- var chunk7URAOG2M_js = require('./chunk-7URAOG2M.js');
3
+ var chunk4MOJJSNA_js = require('./chunk-4MOJJSNA.js');
4
4
  require('./chunk-ZSMWDLMK.js');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "scanCodebase", {
9
9
  enumerable: true,
10
- get: function () { return chunk7URAOG2M_js.scanCodebase; }
10
+ get: function () { return chunk4MOJJSNA_js.scanCodebase; }
11
11
  });
12
12
  Object.defineProperty(exports, "scanForAnalytics", {
13
13
  enumerable: true,
14
- get: function () { return chunk7URAOG2M_js.scanForAnalytics; }
14
+ get: function () { return chunk4MOJJSNA_js.scanForAnalytics; }
15
15
  });
16
16
  Object.defineProperty(exports, "scanForFAQs", {
17
17
  enumerable: true,
18
- get: function () { return chunk7URAOG2M_js.scanForFAQs; }
18
+ get: function () { return chunk4MOJJSNA_js.scanForFAQs; }
19
19
  });
20
20
  Object.defineProperty(exports, "scanForForms", {
21
21
  enumerable: true,
22
- get: function () { return chunk7URAOG2M_js.scanForForms; }
22
+ get: function () { return chunk4MOJJSNA_js.scanForForms; }
23
23
  });
24
24
  Object.defineProperty(exports, "scanForImages", {
25
25
  enumerable: true,
26
- get: function () { return chunk7URAOG2M_js.scanForImages; }
26
+ get: function () { return chunk4MOJJSNA_js.scanForImages; }
27
27
  });
28
28
  Object.defineProperty(exports, "scanForManagedFAQPaths", {
29
29
  enumerable: true,
30
- get: function () { return chunk7URAOG2M_js.scanForManagedFAQPaths; }
30
+ get: function () { return chunk4MOJJSNA_js.scanForManagedFAQPaths; }
31
31
  });
32
32
  Object.defineProperty(exports, "scanForMetadata", {
33
33
  enumerable: true,
34
- get: function () { return chunk7URAOG2M_js.scanForMetadata; }
34
+ get: function () { return chunk4MOJJSNA_js.scanForMetadata; }
35
35
  });
36
36
  Object.defineProperty(exports, "scanForSchemas", {
37
37
  enumerable: true,
38
- get: function () { return chunk7URAOG2M_js.scanForSchemas; }
38
+ get: function () { return chunk4MOJJSNA_js.scanForSchemas; }
39
39
  });
40
40
  Object.defineProperty(exports, "scanForSitemapFiles", {
41
41
  enumerable: true,
42
- get: function () { return chunk7URAOG2M_js.scanForSitemapFiles; }
42
+ get: function () { return chunk4MOJJSNA_js.scanForSitemapFiles; }
43
43
  });
44
44
  Object.defineProperty(exports, "scanForSitemaps", {
45
45
  enumerable: true,
46
- get: function () { return chunk7URAOG2M_js.scanForSitemaps; }
46
+ get: function () { return chunk4MOJJSNA_js.scanForSitemaps; }
47
47
  });
48
48
  Object.defineProperty(exports, "scanForWidgets", {
49
49
  enumerable: true,
50
- get: function () { return chunk7URAOG2M_js.scanForWidgets; }
50
+ get: function () { return chunk4MOJJSNA_js.scanForWidgets; }
51
51
  });
52
- //# sourceMappingURL=scanner-GAF5PO5F.js.map
53
- //# sourceMappingURL=scanner-GAF5PO5F.js.map
52
+ //# sourceMappingURL=scanner-DBD5K6F7.js.map
53
+ //# sourceMappingURL=scanner-DBD5K6F7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"scanner-GAF5PO5F.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"scanner-DBD5K6F7.js"}
@@ -19,7 +19,13 @@ interface SitemapSyncProps {
19
19
  syncInterval?: number;
20
20
  /** Enable debug logging */
21
21
  debug?: boolean;
22
+ /**
23
+ * Sync mode:
24
+ * - 'additive' (default for runtime): adds/updates pages but never deletes existing ones
25
+ * - 'full-replace': replaces the entire page set (use only for build-time sync via createSitemap)
26
+ */
27
+ mode?: 'additive' | 'full-replace';
22
28
  }
23
- declare function SitemapSync({ sitemapUrl, syncInterval, debug, }: SitemapSyncProps): null;
29
+ declare function SitemapSync({ sitemapUrl, syncInterval, debug, mode, }: SitemapSyncProps): null;
24
30
 
25
31
  export { SitemapSync };
@@ -19,7 +19,13 @@ interface SitemapSyncProps {
19
19
  syncInterval?: number;
20
20
  /** Enable debug logging */
21
21
  debug?: boolean;
22
+ /**
23
+ * Sync mode:
24
+ * - 'additive' (default for runtime): adds/updates pages but never deletes existing ones
25
+ * - 'full-replace': replaces the entire page set (use only for build-time sync via createSitemap)
26
+ */
27
+ mode?: 'additive' | 'full-replace';
22
28
  }
23
- declare function SitemapSync({ sitemapUrl, syncInterval, debug, }: SitemapSyncProps): null;
29
+ declare function SitemapSync({ sitemapUrl, syncInterval, debug, mode, }: SitemapSyncProps): null;
24
30
 
25
31
  export { SitemapSync };
@@ -1,14 +1,14 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkYBQT623Y_js = require('../chunk-YBQT623Y.js');
4
+ var chunkQW4RQHSK_js = require('../chunk-QW4RQHSK.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 chunkYBQT623Y_js.SitemapSync; }
11
+ get: function () { return chunkQW4RQHSK_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-HNCSTGVK.mjs';
2
+ export { SitemapSync } from '../chunk-TSK35UHV.mjs';
3
3
  import '../chunk-4XPGGLVP.mjs';
4
4
  //# sourceMappingURL=client.mjs.map
5
5
  //# sourceMappingURL=client.mjs.map
@@ -14,16 +14,34 @@ export { SitemapSync } from './client.mjs';
14
14
  * DO NOT import this file in client components or it will expose API keys.
15
15
  */
16
16
 
17
+ /** Response shape for POST /api/public/seo/page-context */
18
+ type PageSeoContext = {
19
+ page: any | null;
20
+ schemas: any[];
21
+ project: {
22
+ id: string;
23
+ title?: string | null;
24
+ domain?: string | null;
25
+ logo_url?: string | null;
26
+ site_url?: string | null;
27
+ } | null;
28
+ };
17
29
  /**
18
30
  * Fetch SEO page data - cached per request
19
31
  * @server-only
20
32
  */
21
33
  declare const getSEOPageData: (path: string) => Promise<{
22
34
  page: any;
23
- project: any;
35
+ project: {
36
+ id: string;
37
+ title?: string | null;
38
+ domain?: string | null;
39
+ logo_url?: string | null;
40
+ site_url?: string | null;
41
+ } | null;
24
42
  }>;
25
43
  /**
26
- * Fetch schema markups for a page - cached per request
44
+ * Fetch schema markups for a page - cached per request (shares loadPageSeoContext with getSEOPageData)
27
45
  * @server-only
28
46
  */
29
47
  declare const getSchemaMarkups: (path: string, options?: {
@@ -101,7 +119,14 @@ declare function registerSitemap(entries: Array<{
101
119
  title?: string;
102
120
  priority?: number;
103
121
  changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
104
- }>): Promise<{
122
+ }>, options?: {
123
+ /**
124
+ * Sync mode:
125
+ * - 'full-replace': replaces the entire page set (default for build-time sync)
126
+ * - 'additive': adds/updates pages but never deletes existing ones
127
+ */
128
+ mode?: 'additive' | 'full-replace';
129
+ }): Promise<{
105
130
  success: boolean;
106
131
  created: number;
107
132
  updated: number;
@@ -395,4 +420,4 @@ declare const getLocationSection: (projectId: string, path: string, section: str
395
420
  */
396
421
  declare function LocationPageContent(props: LocationPageContentProps): React.ReactElement;
397
422
 
398
- export { ABTestResult, type EntityType, GetABVariantOptions, GetManagedMetadataOptions, LLMSchema, type HeroSectionContent as LocationHeroContent, LocationPageContent, type LocationPageContentProps, type LocationSectionData, type ServiceGridContent as LocationServicesContent, type TextSectionContent as LocationTextContent, ManagedContent, ManagedContentBlock, ManagedContentProps, ManagedFAQ, ManagedFAQProps, ManagedInternalLinks, ManagedInternalLinksProps, ManagedMetadataResult, ManagedNoScripts, ManagedSchema, ManagedSchemaProps, ManagedScripts, ManagedScriptsProps, type SEOEntity, createBreadcrumbSchema, createSchema, getABTest, getABVariant, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getLocationSection, getManagedContentData, getManagedMetadata, getManagedMetadataWithAB, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap, withManagedMetadata };
423
+ export { ABTestResult, type EntityType, GetABVariantOptions, GetManagedMetadataOptions, LLMSchema, type HeroSectionContent as LocationHeroContent, LocationPageContent, type LocationPageContentProps, type LocationSectionData, type ServiceGridContent as LocationServicesContent, type TextSectionContent as LocationTextContent, ManagedContent, ManagedContentBlock, ManagedContentProps, ManagedFAQ, ManagedFAQProps, ManagedInternalLinks, ManagedInternalLinksProps, ManagedMetadataResult, ManagedNoScripts, ManagedSchema, ManagedSchemaProps, ManagedScripts, ManagedScriptsProps, type PageSeoContext, type SEOEntity, createBreadcrumbSchema, createSchema, getABTest, getABVariant, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getLocationSection, getManagedContentData, getManagedMetadata, getManagedMetadataWithAB, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap, withManagedMetadata };
@@ -14,16 +14,34 @@ export { SitemapSync } from './client.js';
14
14
  * DO NOT import this file in client components or it will expose API keys.
15
15
  */
16
16
 
17
+ /** Response shape for POST /api/public/seo/page-context */
18
+ type PageSeoContext = {
19
+ page: any | null;
20
+ schemas: any[];
21
+ project: {
22
+ id: string;
23
+ title?: string | null;
24
+ domain?: string | null;
25
+ logo_url?: string | null;
26
+ site_url?: string | null;
27
+ } | null;
28
+ };
17
29
  /**
18
30
  * Fetch SEO page data - cached per request
19
31
  * @server-only
20
32
  */
21
33
  declare const getSEOPageData: (path: string) => Promise<{
22
34
  page: any;
23
- project: any;
35
+ project: {
36
+ id: string;
37
+ title?: string | null;
38
+ domain?: string | null;
39
+ logo_url?: string | null;
40
+ site_url?: string | null;
41
+ } | null;
24
42
  }>;
25
43
  /**
26
- * Fetch schema markups for a page - cached per request
44
+ * Fetch schema markups for a page - cached per request (shares loadPageSeoContext with getSEOPageData)
27
45
  * @server-only
28
46
  */
29
47
  declare const getSchemaMarkups: (path: string, options?: {
@@ -101,7 +119,14 @@ declare function registerSitemap(entries: Array<{
101
119
  title?: string;
102
120
  priority?: number;
103
121
  changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
104
- }>): Promise<{
122
+ }>, options?: {
123
+ /**
124
+ * Sync mode:
125
+ * - 'full-replace': replaces the entire page set (default for build-time sync)
126
+ * - 'additive': adds/updates pages but never deletes existing ones
127
+ */
128
+ mode?: 'additive' | 'full-replace';
129
+ }): Promise<{
105
130
  success: boolean;
106
131
  created: number;
107
132
  updated: number;
@@ -395,4 +420,4 @@ declare const getLocationSection: (projectId: string, path: string, section: str
395
420
  */
396
421
  declare function LocationPageContent(props: LocationPageContentProps): React.ReactElement;
397
422
 
398
- export { ABTestResult, type EntityType, GetABVariantOptions, GetManagedMetadataOptions, LLMSchema, type HeroSectionContent as LocationHeroContent, LocationPageContent, type LocationPageContentProps, type LocationSectionData, type ServiceGridContent as LocationServicesContent, type TextSectionContent as LocationTextContent, ManagedContent, ManagedContentBlock, ManagedContentProps, ManagedFAQ, ManagedFAQProps, ManagedInternalLinks, ManagedInternalLinksProps, ManagedMetadataResult, ManagedNoScripts, ManagedSchema, ManagedSchemaProps, ManagedScripts, ManagedScriptsProps, type SEOEntity, createBreadcrumbSchema, createSchema, getABTest, getABVariant, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getLocationSection, getManagedContentData, getManagedMetadata, getManagedMetadataWithAB, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap, withManagedMetadata };
423
+ export { ABTestResult, type EntityType, GetABVariantOptions, GetManagedMetadataOptions, LLMSchema, type HeroSectionContent as LocationHeroContent, LocationPageContent, type LocationPageContentProps, type LocationSectionData, type ServiceGridContent as LocationServicesContent, type TextSectionContent as LocationTextContent, ManagedContent, ManagedContentBlock, ManagedContentProps, ManagedFAQ, ManagedFAQProps, ManagedInternalLinks, ManagedInternalLinksProps, ManagedMetadataResult, ManagedNoScripts, ManagedSchema, ManagedSchemaProps, ManagedScripts, ManagedScriptsProps, type PageSeoContext, type SEOEntity, createBreadcrumbSchema, createSchema, getABTest, getABVariant, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getLocationSection, getManagedContentData, getManagedMetadata, getManagedMetadataWithAB, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap, withManagedMetadata };
package/dist/seo/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkLTTTIJPN_js = require('../chunk-LTTTIJPN.js');
4
- var chunkYBQT623Y_js = require('../chunk-YBQT623Y.js');
5
- var chunkRRBBMEDL_js = require('../chunk-RRBBMEDL.js');
6
- var chunkPJKHCYI5_js = require('../chunk-PJKHCYI5.js');
3
+ var chunkKJN2C6YE_js = require('../chunk-KJN2C6YE.js');
4
+ var chunkQW4RQHSK_js = require('../chunk-QW4RQHSK.js');
5
+ var chunkELDJDBQL_js = require('../chunk-ELDJDBQL.js');
6
+ var chunkPTTDKFL7_js = require('../chunk-PTTDKFL7.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 chunkPJKHCYI5_js.getSEOPageData(path);
15
+ const result = await chunkPTTDKFL7_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
- chunkPJKHCYI5_js.ensureMetadata(path).catch(() => {
44
+ chunkPTTDKFL7_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 chunkPJKHCYI5_js.getABTest(path, field);
98
+ const test = await chunkPTTDKFL7_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
- chunkPJKHCYI5_js.recordABImpression(test.id, variant, sessionId).catch(() => {
111
+ chunkPTTDKFL7_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
- chunkPJKHCYI5_js.getSchemaMarkups(path, { includeTypes, excludeTypes }),
184
- chunkPJKHCYI5_js.getSEOPageData(path),
185
- includeEntityGraph ? chunkPJKHCYI5_js.getEntityEnhancedSchema(path).catch(() => []) : Promise.resolve([])
183
+ chunkPTTDKFL7_js.getSchemaMarkups(path, { includeTypes, excludeTypes }),
184
+ chunkPTTDKFL7_js.getSEOPageData(path),
185
+ includeEntityGraph ? chunkPTTDKFL7_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 chunkPJKHCYI5_js.getEntityEnhancedSchema(path);
213
+ const fallbackSchemas = await chunkPTTDKFL7_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 chunkPJKHCYI5_js.getSEOPageData(path);
243
+ const { page: pageData } = await chunkPTTDKFL7_js.getSEOPageData(path);
244
244
  if (!pageData?.managed_llm_schema) {
245
245
  return null;
246
246
  }
@@ -453,7 +453,7 @@ async function ManagedFAQAsync({
453
453
  includeSchema = true,
454
454
  showTitle = true
455
455
  }) {
456
- const faqData = await chunkPJKHCYI5_js.getFAQData(path);
456
+ const faqData = await chunkPTTDKFL7_js.getFAQData(path);
457
457
  if (!faqData || !faqData.items?.length) {
458
458
  return null;
459
459
  }
@@ -505,7 +505,7 @@ async function ManagedInternalLinksAsync({
505
505
  className,
506
506
  renderLink
507
507
  }) {
508
- const links = await chunkPJKHCYI5_js.getInternalLinks(path, { position, limit });
508
+ const links = await chunkPTTDKFL7_js.getInternalLinks(path, { position, limit });
509
509
  if (!links.length) {
510
510
  return null;
511
511
  }
@@ -581,7 +581,7 @@ async function ManagedContentAsync({
581
581
  components = {},
582
582
  injectEntityAnnotations: shouldInjectEntities = false
583
583
  }) {
584
- const block = await chunkPJKHCYI5_js.getContentBlock(path, section);
584
+ const block = await chunkPTTDKFL7_js.getContentBlock(path, section);
585
585
  if (!block) {
586
586
  if (fallback) {
587
587
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback });
@@ -591,7 +591,7 @@ async function ManagedContentAsync({
591
591
  let entities = [];
592
592
  if (shouldInjectEntities) {
593
593
  try {
594
- entities = await chunkPJKHCYI5_js.getEntities();
594
+ entities = await chunkPTTDKFL7_js.getEntities();
595
595
  } catch (err) {
596
596
  console.warn("@sonordev/seo: Failed to fetch entities for annotation:", err);
597
597
  }
@@ -652,7 +652,7 @@ async function ManagedContentAsync({
652
652
  }
653
653
  }
654
654
  async function getManagedContentData(path, section) {
655
- return chunkPJKHCYI5_js.getContentBlock(path, section);
655
+ return chunkPTTDKFL7_js.getContentBlock(path, section);
656
656
  }
657
657
  function ManagedContent(props) {
658
658
  return /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(ManagedContentAsync, { ...props }) });
@@ -770,99 +770,99 @@ function LocationPageContent(props) {
770
770
 
771
771
  Object.defineProperty(exports, "ManagedNoScripts", {
772
772
  enumerable: true,
773
- get: function () { return chunkLTTTIJPN_js.ManagedNoScripts; }
773
+ get: function () { return chunkKJN2C6YE_js.ManagedNoScripts; }
774
774
  });
775
775
  Object.defineProperty(exports, "ManagedScripts", {
776
776
  enumerable: true,
777
- get: function () { return chunkLTTTIJPN_js.ManagedScripts; }
777
+ get: function () { return chunkKJN2C6YE_js.ManagedScripts; }
778
778
  });
779
779
  Object.defineProperty(exports, "SitemapSync", {
780
780
  enumerable: true,
781
- get: function () { return chunkYBQT623Y_js.SitemapSync; }
781
+ get: function () { return chunkQW4RQHSK_js.SitemapSync; }
782
782
  });
783
783
  Object.defineProperty(exports, "generateSitemap", {
784
784
  enumerable: true,
785
- get: function () { return chunkRRBBMEDL_js.generateSitemap; }
785
+ get: function () { return chunkELDJDBQL_js.generateSitemap; }
786
786
  });
787
787
  Object.defineProperty(exports, "getRedirect", {
788
788
  enumerable: true,
789
- get: function () { return chunkRRBBMEDL_js.getRedirect; }
789
+ get: function () { return chunkELDJDBQL_js.getRedirect; }
790
790
  });
791
791
  Object.defineProperty(exports, "getRobotsDirective", {
792
792
  enumerable: true,
793
- get: function () { return chunkRRBBMEDL_js.getRobotsDirective; }
793
+ get: function () { return chunkELDJDBQL_js.getRobotsDirective; }
794
794
  });
795
795
  Object.defineProperty(exports, "isIndexable", {
796
796
  enumerable: true,
797
- get: function () { return chunkRRBBMEDL_js.isIndexable; }
797
+ get: function () { return chunkELDJDBQL_js.isIndexable; }
798
798
  });
799
799
  Object.defineProperty(exports, "getABTest", {
800
800
  enumerable: true,
801
- get: function () { return chunkPJKHCYI5_js.getABTest; }
801
+ get: function () { return chunkPTTDKFL7_js.getABTest; }
802
802
  });
803
803
  Object.defineProperty(exports, "getContentBlock", {
804
804
  enumerable: true,
805
- get: function () { return chunkPJKHCYI5_js.getContentBlock; }
805
+ get: function () { return chunkPTTDKFL7_js.getContentBlock; }
806
806
  });
807
807
  Object.defineProperty(exports, "getEntities", {
808
808
  enumerable: true,
809
- get: function () { return chunkPJKHCYI5_js.getEntities; }
809
+ get: function () { return chunkPTTDKFL7_js.getEntities; }
810
810
  });
811
811
  Object.defineProperty(exports, "getEntityEnhancedSchema", {
812
812
  enumerable: true,
813
- get: function () { return chunkPJKHCYI5_js.getEntityEnhancedSchema; }
813
+ get: function () { return chunkPTTDKFL7_js.getEntityEnhancedSchema; }
814
814
  });
815
815
  Object.defineProperty(exports, "getFAQData", {
816
816
  enumerable: true,
817
- get: function () { return chunkPJKHCYI5_js.getFAQData; }
817
+ get: function () { return chunkPTTDKFL7_js.getFAQData; }
818
818
  });
819
819
  Object.defineProperty(exports, "getInternalLinks", {
820
820
  enumerable: true,
821
- get: function () { return chunkPJKHCYI5_js.getInternalLinks; }
821
+ get: function () { return chunkPTTDKFL7_js.getInternalLinks; }
822
822
  });
823
823
  Object.defineProperty(exports, "getManagedScripts", {
824
824
  enumerable: true,
825
- get: function () { return chunkPJKHCYI5_js.getManagedScripts; }
825
+ get: function () { return chunkPTTDKFL7_js.getManagedScripts; }
826
826
  });
827
827
  Object.defineProperty(exports, "getPrimaryEntity", {
828
828
  enumerable: true,
829
- get: function () { return chunkPJKHCYI5_js.getPrimaryEntity; }
829
+ get: function () { return chunkPTTDKFL7_js.getPrimaryEntity; }
830
830
  });
831
831
  Object.defineProperty(exports, "getRedirectData", {
832
832
  enumerable: true,
833
- get: function () { return chunkPJKHCYI5_js.getRedirectData; }
833
+ get: function () { return chunkPTTDKFL7_js.getRedirectData; }
834
834
  });
835
835
  Object.defineProperty(exports, "getRobotsData", {
836
836
  enumerable: true,
837
- get: function () { return chunkPJKHCYI5_js.getRobotsData; }
837
+ get: function () { return chunkPTTDKFL7_js.getRobotsData; }
838
838
  });
839
839
  Object.defineProperty(exports, "getSEOPageData", {
840
840
  enumerable: true,
841
- get: function () { return chunkPJKHCYI5_js.getSEOPageData; }
841
+ get: function () { return chunkPTTDKFL7_js.getSEOPageData; }
842
842
  });
843
843
  Object.defineProperty(exports, "getSchemaMarkups", {
844
844
  enumerable: true,
845
- get: function () { return chunkPJKHCYI5_js.getSchemaMarkups; }
845
+ get: function () { return chunkPTTDKFL7_js.getSchemaMarkups; }
846
846
  });
847
847
  Object.defineProperty(exports, "getSitemapEntries", {
848
848
  enumerable: true,
849
- get: function () { return chunkPJKHCYI5_js.getSitemapEntries; }
849
+ get: function () { return chunkPTTDKFL7_js.getSitemapEntries; }
850
850
  });
851
851
  Object.defineProperty(exports, "getVisibilityScore", {
852
852
  enumerable: true,
853
- get: function () { return chunkPJKHCYI5_js.getVisibilityScore; }
853
+ get: function () { return chunkPTTDKFL7_js.getVisibilityScore; }
854
854
  });
855
855
  Object.defineProperty(exports, "getVisibilitySummary", {
856
856
  enumerable: true,
857
- get: function () { return chunkPJKHCYI5_js.getVisibilitySummary; }
857
+ get: function () { return chunkPTTDKFL7_js.getVisibilitySummary; }
858
858
  });
859
859
  Object.defineProperty(exports, "recordABImpression", {
860
860
  enumerable: true,
861
- get: function () { return chunkPJKHCYI5_js.recordABImpression; }
861
+ get: function () { return chunkPTTDKFL7_js.recordABImpression; }
862
862
  });
863
863
  Object.defineProperty(exports, "registerSitemap", {
864
864
  enumerable: true,
865
- get: function () { return chunkPJKHCYI5_js.registerSitemap; }
865
+ get: function () { return chunkPTTDKFL7_js.registerSitemap; }
866
866
  });
867
867
  exports.LLMSchema = LLMSchema;
868
868
  exports.LocationPageContent = LocationPageContent;
@@ -1,8 +1,8 @@
1
- export { ManagedNoScripts, ManagedScripts } from '../chunk-J4K335PQ.mjs';
2
- export { SitemapSync } from '../chunk-HNCSTGVK.mjs';
3
- export { generateSitemap, getRedirect, getRobotsDirective, isIndexable } from '../chunk-RJTBSSZB.mjs';
4
- import { getSEOPageData, ensureMetadata, getABTest, recordABImpression, getContentBlock, getSchemaMarkups, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities } from '../chunk-3QKTOTWS.mjs';
5
- export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from '../chunk-3QKTOTWS.mjs';
1
+ export { ManagedNoScripts, ManagedScripts } from '../chunk-M5FLRLHI.mjs';
2
+ export { SitemapSync } from '../chunk-TSK35UHV.mjs';
3
+ export { generateSitemap, getRedirect, getRobotsDirective, isIndexable } from '../chunk-NRNK7LXK.mjs';
4
+ import { getSEOPageData, ensureMetadata, getABTest, recordABImpression, getContentBlock, getSchemaMarkups, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities } from '../chunk-FMB2RZDH.mjs';
5
+ export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from '../chunk-FMB2RZDH.mjs';
6
6
  import '../chunk-4XPGGLVP.mjs';
7
7
  import { cache, Suspense } from 'react';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -68,7 +68,7 @@ async function registerSitemapViaApi(entries, optimizeMeta) {
68
68
  "Content-Type": "application/json",
69
69
  "x-api-key": apiKey
70
70
  },
71
- body: JSON.stringify({ entries, optimize_meta: optimizeMeta })
71
+ body: JSON.stringify({ entries, optimize_meta: optimizeMeta, mode: "full-replace" })
72
72
  });
73
73
  if (!response.ok) {
74
74
  console.error(`[Sonor] Sitemap registration failed: ${response.status} ${response.statusText}`);
@@ -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":";;;;;;;;;;;;;AASA,SAAS,YAAA,GAAmD;AAC1D,EAAA,MAAM,MAAA,GACJ,OAAA,CAAQ,GAAA,CAAI,aAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,yBAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,2BAAA,IACZ,sBAAA;AACF,EAAA,MAAM,MAAA,GACJ,OAAA,CAAQ,GAAA,CAAI,aAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,yBAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,2BAAA,IACZ,EAAA;AACF,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;AAEA,SAAS,oBAAA,CACP,MAAA,EACA,QAAA,GAAmB,EAAA,EACwB;AAC3C,EAAA,MAAM,UAAqD,EAAC;AAE5D,EAAA,MAAM,QAAQA,mBAAA,CAAG,WAAA,CAAY,QAAQ,EAAE,aAAA,EAAe,MAAM,CAAA;AAE5D,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,KAAK,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5D,IAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACzB,IAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAElC,IAAA,MAAM,QAAA,GAAWC,qBAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,KAAK,IAAI,CAAA;AAE5C,IAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AACtB,MAAA,MAAM,OAAA,GACJD,oBAAG,UAAA,CAAWC,qBAAA,CAAK,KAAK,QAAA,EAAU,UAAU,CAAC,CAAA,IAC7CD,mBAAA,CAAG,UAAA,CAAWC,sBAAK,IAAA,CAAK,QAAA,EAAU,SAAS,CAAC,CAAA,IAC5CD,mBAAA,CAAG,WAAWC,qBAAA,CAAK,IAAA,CAAK,QAAA,EAAU,UAAU,CAAC,CAAA;AAE/C,MAAA,MAAM,YAAA,GAAe,KAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA;AACxE,MAAA,MAAM,SAAA,GAAY,KAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA;AAErE,MAAA,IAAI,SAAA,GAAY,QAAA;AAChB,MAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,SAAA,EAAW;AAC/B,QAAA,SAAA,GAAY,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,MACtC;AAEA,MAAA,IAAI,OAAA,IAAW,CAAC,SAAA,EAAW;AACzB,QAAA,MAAM,QAAA,GAAW,SAAA,KAAc,EAAA,GAAK,CAAA,GAAM,GAAA;AAC1C,QAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,SAAA,IAAa,GAAA,EAAK,UAAU,CAAA;AAAA,MACnD;AAEA,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,UACjB,QAAA;AAAA,UACA,eAAe,QAAA,GAAW;AAAA,SAC5B;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,aAAa,EAAA,EAAI;AACnB,IAAA,MAAM,WAAA,GACJD,oBAAG,UAAA,CAAWC,qBAAA,CAAK,KAAK,MAAA,EAAQ,UAAU,CAAC,CAAA,IAC3CD,mBAAA,CAAG,UAAA,CAAWC,sBAAK,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAC,CAAA,IAC1CD,mBAAA,CAAG,WAAWC,qBAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,UAAU,CAAC,CAAA;AAC7C,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAA,CAAQ,QAAQ,EAAE,IAAA,EAAM,GAAA,EAAK,QAAA,EAAU,GAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,eAAe,qBAAA,CACb,SAMA,YAAA,EAOC;AACD,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,YAAA,EAAa;AACxC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,EAClD;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,gCAAA,CAAA,EAAoC;AAAA,MACxE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,aAAA,EAAe,cAAc;AAAA,KAC9D,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAA,CAAQ,MAAM,CAAA,qCAAA,EAAwC,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAC9F,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,IAClD;AAEA,IAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,EAC7B,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,uCAAuC,KAAK,CAAA;AAC1D,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,EAClD;AACF;AAwBA,eAAsB,qBACpB,OAAA,EACqC;AACrC,EAAA,IAAI,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,EAAC;AAElC,EAAA,IAAI,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAChD,IAAA,MAAMC,IAAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,IAAA,MAAM,OAAA,GAAU;AAAA,MACdD,qBAAA,CAAK,IAAA,CAAKC,IAAAA,EAAK,KAAK,CAAA;AAAA,MACpBD,qBAAA,CAAK,IAAA,CAAKC,IAAAA,EAAK,KAAA,EAAO,KAAK;AAAA,KAC7B;AACA,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAIF,mBAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,QAAA,OAAA,GAAU,qBAAqB,MAAM,CAAA;AACrC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,wBAAA,EAA2B,OAAA,CAAQ,MAAM,CAAA,aAAA,EAAgBC,sBAAK,QAAA,CAASC,IAAAA,EAAK,MAAM,CAAC,CAAA,CAAE,CAAA;AACjG,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAA,CAAQ,KAAK,wCAAwC,CAAA;AACrD,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,EACjD;AAEA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,OAAA,CAAQ,MAAM,CAAA,mBAAA,CAAqB,CAAA;AACtE,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAClC,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,YAAY,CAAA,CAAE;AAAA,GAChB,CAAE,CAAA;AACF,EAAA,MAAM,SAAS,MAAM,qBAAA;AAAA,IACnB,OAAA;AAAA,IACA,QAAQ,aAAA,KAAkB;AAAA,GAC5B;AAEA,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,OAAA,CAAQ,IAAI,CAAA,4BAAA,EAA+B,MAAA,CAAO,OAAO,CAAA,MAAA,EAAS,MAAA,CAAO,OAAO,CAAA,QAAA,CAAU,CAAA;AAAA,EAC5F;AAEA,EAAA,OAAO,MAAA;AACT;;;ACzKA,IAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxBC,aAAA,CAAa,EAAE,IAAA,EAAMF,qBAAAA,CAAK,KAAK,GAAA,EAAK,MAAM,GAAG,CAAA;AAC7CE,aAAA,CAAa,EAAE,MAAMF,qBAAAA,CAAK,IAAA,CAAK,KAAK,YAAY,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,CAAA;AACnE,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,EAAAE,aAAA,CAAa,EAAE,IAAA,EAAMF,qBAAAA,CAAK,KAAK,GAAA,EAAK,iBAAiB,GAAG,CAAA;AACxD,EAAAE,aAAA,CAAa,EAAE,MAAMF,qBAAAA,CAAK,IAAA,CAAK,KAAK,uBAAuB,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,CAAA;AAChF;AAEA,eAAe,IAAA,GAAO;AACpB,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,MAAM,eAAe,IAAA,CAAK,QAAA,CAAS,iBAAiB,CAAA,IAAK,IAAA,CAAK,SAAS,IAAI,CAAA;AAC3E,EAAA,MAAM,eAAe,IAAA,CAAK,QAAA,CAAS,eAAe,CAAA,IAAK,IAAA,CAAK,SAAS,iBAAiB,CAAA;AAEtF,EAAA,OAAA,CAAQ,IAAI,wCAAwC,CAAA;AAEpD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB;AAAA,MACxC,YAAA;AAAA,MACA,eAAe,CAAC;AAAA,KACjB,CAAA;AAED,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAA,CAAQ,IAAI,CAAA,8CAAA,CAA2C,CAAA;AACvD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAClD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAClD,MAAA,IAAI,MAAA,CAAO,OAAA,KAAY,KAAA,CAAA,IAAa,MAAA,CAAO,UAAU,CAAA,EAAG;AACtD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,MACpD;AACA,MAAA,IAAI,MAAA,CAAO,mBAAmB,SAAA,EAAW;AACvC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yDAAA,EAAuD,MAAA,CAAO,iBAAA,CAAkB,YAAY,CAAA,MAAA,CAAQ,CAAA;AAChH,QAAA,OAAA,CAAQ,IAAI,CAAA,uEAAA,CAAyE,CAAA;AAAA,MACvF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAM,2CAAsC,CAAA;AACpD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,yBAAoB,KAAK,CAAA;AACvC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;AAEA,IAAA,EAAK","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 process.env.UPTRADE_API_URL ||\n process.env.NEXT_PUBLIC_SONOR_API_URL ||\n process.env.NEXT_PUBLIC_UPTRADE_API_URL ||\n 'https://api.sonor.io'\n const apiKey =\n process.env.SONOR_API_KEY ||\n process.env.UPTRADE_API_KEY ||\n process.env.NEXT_PUBLIC_SONOR_API_KEY ||\n process.env.NEXT_PUBLIC_UPTRADE_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, UPTRADE_API_KEY, NEXT_PUBLIC_SONOR_API_KEY, or NEXT_PUBLIC_UPTRADE_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 }),\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 uptrade-register-sitemap\n * npx uptrade-register-sitemap --auto-discover\n * npx uptrade-register-sitemap --no-optimize # Skip Signal AI meta optimization\n * \n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"uptrade-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\nfunction getApiConfig(): { apiUrl: string; apiKey: string } {\n const apiUrl =\n process.env.SONOR_API_URL ||\n process.env.UPTRADE_API_URL ||\n process.env.NEXT_PUBLIC_SONOR_API_URL ||\n process.env.NEXT_PUBLIC_UPTRADE_API_URL ||\n 'https://api.sonor.io'\n const apiKey =\n process.env.SONOR_API_KEY ||\n process.env.UPTRADE_API_KEY ||\n process.env.NEXT_PUBLIC_SONOR_API_KEY ||\n process.env.NEXT_PUBLIC_UPTRADE_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, UPTRADE_API_KEY, NEXT_PUBLIC_SONOR_API_KEY, or NEXT_PUBLIC_UPTRADE_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 uptrade-register-sitemap\n * npx uptrade-register-sitemap --auto-discover\n * npx uptrade-register-sitemap --no-optimize # Skip Signal AI meta optimization\n * \n * Or in package.json:\n * {\n * \"scripts\": {\n * \"postbuild\": \"uptrade-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"]}
@@ -61,7 +61,7 @@ async function registerSitemapViaApi(entries, optimizeMeta) {
61
61
  "Content-Type": "application/json",
62
62
  "x-api-key": apiKey
63
63
  },
64
- body: JSON.stringify({ entries, optimize_meta: optimizeMeta })
64
+ body: JSON.stringify({ entries, optimize_meta: optimizeMeta, mode: "full-replace" })
65
65
  });
66
66
  if (!response.ok) {
67
67
  console.error(`[Sonor] Sitemap registration failed: ${response.status} ${response.statusText}`);