@sonordev/site-kit 7.1.0 → 7.1.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.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +21 -3426
- package/agent-manifest.json +1 -1
- package/dist/{AnalyticsProvider-ZMQUV33M.js → AnalyticsProvider-ZB33W6MC.js} +4 -4
- package/dist/{ArticleViewTracker-V7NUXYBY.js → ArticleViewTracker-GMHYLLLZ.js} +3 -3
- package/dist/{BlocksPopup-52EU7OUY.js → BlocksPopup-EA6LYL25.js} +4 -4
- package/dist/{ChatWidget-5BHMNR57.js → ChatWidget-UCDWMWCW.js} +5 -5
- package/dist/{EngageWidget-PCGLX7SO.js → EngageWidget-7ZYSK4GE.js} +4 -4
- package/dist/{FileField-TSFGNAMY.js → FileField-QKA3JB2Q.js} +3 -3
- package/dist/{FormSpotlight-XLBWEOTE.js → FormSpotlight-AQTIA5TP.js} +2 -2
- package/dist/{FormStage-IJQ5Q2X6.js → FormStage-FDTLTP3B.js} +2 -2
- package/dist/ManagedForm-H7BVAH2W.js +14 -0
- package/dist/{ManagedNewsletterForm-QAO3POLC.js → ManagedNewsletterForm-J6QSAGGP.js} +4 -4
- package/dist/{SignalCore-RBA3VDBL.js → SignalCore-JZNXOLNT.js} +3 -3
- package/dist/{SiteDesignReporter-C4LR5X2V.js → SiteDesignReporter-W4EJUSTE.js} +5 -5
- package/dist/SitemapSync-XBANGKHZ.js +8 -0
- package/dist/SitemapSync.d.ts +1 -1
- package/dist/_client/booking-widget.js +5 -5
- package/dist/_client/testimonial-section.d.ts +1 -1
- package/dist/affiliates/api.d.ts +1 -1
- package/dist/affiliates/index.js +3 -3
- package/dist/analytics/AnalyticsProvider.d.ts +1 -1
- package/dist/analytics/index.js +4 -4
- package/dist/analytics/send-gate.d.ts +12 -25
- package/dist/articles/Article.d.ts +1 -1
- package/dist/articles/ArticleList.d.ts +1 -1
- package/dist/articles/ClusterLandingPage.d.ts +2 -2
- package/dist/articles/PublicationLayout.d.ts +1 -1
- package/dist/articles/PublicationSidebar.d.ts +1 -1
- package/dist/articles/RelatedPosts.d.ts +1 -1
- package/dist/articles/author-schema.d.ts +1 -1
- package/dist/articles/excerpt.d.ts +3 -4
- package/dist/articles/index.d.ts +2 -2
- package/dist/articles/index.js +1 -1
- package/dist/articles/news-sitemap.d.ts +1 -1
- package/dist/articles/processArticleHtml.d.ts +1 -1
- package/dist/articles/server-core.d.ts +4 -4
- package/dist/articles/server-ui.js +1 -1
- package/dist/articles/server.d.ts +4 -4
- package/dist/articles/types.d.ts +1 -1
- package/dist/chat/index.js +5 -5
- package/dist/{chunk-U35H2JIQ.js → chunk-3SDOQUUF.js} +2 -2
- package/dist/{chunk-F42R35NV.js → chunk-6WIQCXOO.js} +1 -1
- package/dist/{chunk-4JQQDCMO.js → chunk-AH5Q262S.js} +1 -1
- package/dist/{chunk-OPRBF7VE.js → chunk-CIG5UL2S.js} +1 -1
- package/dist/{chunk-EIULXXUJ.js → chunk-CSTQDNGK.js} +4 -4
- package/dist/{chunk-YLSEB32F.js → chunk-D5EC5KVO.js} +1 -1
- package/dist/{chunk-L2DJD5Y4.js → chunk-ERXXITG4.js} +1 -1
- package/dist/{chunk-3XPJKZ6D.js → chunk-HF57LG73.js} +7 -7
- package/dist/{chunk-GWUKQ26F.js → chunk-ILU5I6RW.js} +1 -1
- package/dist/{chunk-HAG4YIZY.js → chunk-JBE46QJZ.js} +6 -6
- package/dist/{chunk-3G2SE2J4.js → chunk-JTU2GOM4.js} +9 -5
- package/dist/{chunk-QPEEKFCA.js → chunk-LUXVWITO.js} +2 -2
- package/dist/{chunk-7QTMMHUO.js → chunk-M3YEPKP7.js} +1 -1
- package/dist/{chunk-XNVSCQ2O.js → chunk-NK4CSJNP.js} +2 -2
- package/dist/{chunk-W2CL2DB3.js → chunk-PGMVL4AB.js} +2 -2
- package/dist/{chunk-HVH37YPX.js → chunk-PHYMNUJU.js} +1 -1
- package/dist/{chunk-GIAOPEN6.js → chunk-Q4W23JYM.js} +1 -1
- package/dist/{chunk-J4D6ZXRW.js → chunk-QEDHRBAT.js} +1 -1
- package/dist/{chunk-DUAO4Q75.js → chunk-RHNWA34F.js} +2 -2
- package/dist/{chunk-LFXVE32I.js → chunk-UXOGCKL6.js} +1 -1
- package/dist/{chunk-PLUP2KN5.js → chunk-V3PUVBME.js} +2 -2
- package/dist/{chunk-XD3ZQET6.js → chunk-V6FDQLR7.js} +1 -1
- package/dist/{chunk-EVFZ7KEW.js → chunk-VDF5DFWT.js} +1 -1
- package/dist/{chunk-7MHHWZKC.js → chunk-VGH4MDTU.js} +1 -1
- package/dist/{chunk-FLR3EMK6.js → chunk-VLARKWZU.js} +1 -1
- package/dist/{chunk-ZETJTCMV.js → chunk-WWSHFRDL.js} +1 -1
- package/dist/{chunk-ZIMFQWGJ.js → chunk-YCJT4JJG.js} +3 -3
- package/dist/{chunk-3J2ERO3I.js → chunk-YEMPUQVU.js} +2 -2
- package/dist/client/index.js +3 -3
- package/dist/cms/CmsPreview.d.ts +2 -2
- package/dist/cms/index.d.ts +3 -3
- package/dist/cms/server-api.d.ts +1 -1
- package/dist/cms/types.d.ts +1 -1
- package/dist/commerce/EventCheckout.d.ts +1 -1
- package/dist/commerce/EventsAgenda.d.ts +3 -3
- package/dist/commerce/api.d.ts +1 -1
- package/dist/commerce/index.js +4 -4
- package/dist/commerce/server.d.ts +3 -4
- package/dist/contracts/entries.d.ts +1 -1
- package/dist/contracts/fleet.d.ts +9 -9
- package/dist/contracts/forms.d.ts +4 -10
- package/dist/contracts/llms.d.ts +1 -1
- package/dist/contracts/portfolio.d.ts +11 -15
- package/dist/contracts/seo-meta.d.ts +11 -12
- package/dist/contracts/seo-pages.d.ts +12 -18
- package/dist/contracts/site-cache.d.ts +4 -4
- package/dist/contracts/sites-normalize.d.ts +2 -4
- package/dist/contracts/sites.d.ts +3 -5
- package/dist/contracts/slot-content.d.ts +2 -2
- package/dist/contracts/slots.d.ts +6 -6
- package/dist/contracts/voice.d.ts +56 -0
- package/dist/contracts/website.d.ts +2 -2
- package/dist/engage/ChatWidget.d.ts +2 -2
- package/dist/engage/EchoUiActions.d.ts +3 -3
- package/dist/engage/EngageWidget.d.ts +1 -1
- package/dist/engage/brand-color.d.ts +1 -1
- package/dist/engage/element-rules.d.ts +2 -2
- package/dist/engage/index.js +6 -6
- package/dist/engage/types.d.ts +3 -3
- package/dist/fleet/FleetHeartbeat.d.ts +2 -2
- package/dist/fleet/index.js +4 -4
- package/dist/forms/FormSpotlight.d.ts +2 -2
- package/dist/forms/ManagedForm.d.ts +1 -1
- package/dist/forms/StaticForm.d.ts +1 -1
- package/dist/forms/field-interactions.d.ts +2 -2
- package/dist/forms/form-loaded-at.d.ts +2 -2
- package/dist/forms/formsApi.d.ts +2 -2
- package/dist/forms/index.d.ts +1 -1
- package/dist/forms/index.js +8 -8
- package/dist/forms/server.d.ts +1 -1
- package/dist/forms/server.js +4 -4
- package/dist/forms/static.js +2 -2
- package/dist/forms/submitForm.d.ts +1 -1
- package/dist/forms/types.d.ts +3 -3
- package/dist/images/ManagedFavicon.d.ts +1 -1
- package/dist/images/ManagedImage.d.ts +4 -4
- package/dist/images/api.d.ts +1 -1
- package/dist/images/index.d.ts +2 -2
- package/dist/images/index.js +4 -4
- package/dist/index.js +1 -1
- package/dist/landing/contract.d.ts +3 -4
- package/dist/layout/SiteKitClientProviders.d.ts +1 -1
- package/dist/layout/SiteKitLayout.d.ts +7 -7
- package/dist/layout/client.d.ts +1 -1
- package/dist/layout/client.js +7 -7
- package/dist/layout/index.js +8 -8
- package/dist/layout/types.d.ts +2 -2
- package/dist/llms/SpeakableSchema.d.ts +2 -2
- package/dist/llms/agent-access.d.ts +2 -2
- package/dist/llms/aiRobots.d.ts +4 -4
- package/dist/llms/api.d.ts +2 -2
- package/dist/llms/generateLLMsTxt.d.ts +1 -1
- package/dist/llms/index.js +4 -4
- package/dist/llms/links.d.ts +1 -1
- package/dist/llms/revalidate.d.ts +1 -1
- package/dist/llms/seo-revalidate.d.ts +2 -3
- package/dist/llms/types.d.ts +6 -6
- package/dist/llms/writeLLMsTxt.d.ts +10 -10
- package/dist/manifest/index.d.ts +8 -8
- package/dist/maps/index.js +3 -3
- package/dist/mcp/WebMcpTools.d.ts +1 -1
- package/dist/mcp/report.d.ts +2 -2
- package/dist/mcp/serverCard.d.ts +1 -1
- package/dist/mcp/sonor.d.ts +5 -6
- package/dist/mcp/sonor.js +8 -8
- package/dist/mcp/transport.d.ts +1 -2
- package/dist/mcp/types.d.ts +4 -5
- package/dist/motion/engine.d.ts +2 -3
- package/dist/motion/failsafe.d.ts +1 -2
- package/dist/motion/gsap.d.ts +2 -2
- package/dist/motion/three.d.ts +1 -1
- package/dist/og/config.d.ts +4 -4
- package/dist/og/contrast.d.ts +2 -2
- package/dist/og/pages.d.ts +5 -5
- package/dist/og/route-fit.d.ts +2 -2
- package/dist/og/route.d.ts +1 -2
- package/dist/og/template.d.ts +1 -1
- package/dist/proxy/index.d.ts +2 -2
- package/dist/proxy/securityHeaders.d.ts +10 -12
- package/dist/redirects/index.d.ts +7 -7
- package/dist/reputation/TestimonialSection.d.ts +1 -1
- package/dist/reputation/api.d.ts +1 -1
- package/dist/revalidate/index.js +2 -2
- package/dist/robots/index.d.ts +5 -5
- package/dist/robots/indexnow.d.ts +2 -3
- package/dist/seo/ManagedScripts.d.ts +2 -2
- package/dist/seo/client.js +4 -4
- package/dist/seo/getManagedMetadata.d.ts +1 -1
- package/dist/seo/groundingSchema.d.ts +2 -2
- package/dist/seo/index.js +4 -4
- package/dist/seo/llms.js +4 -4
- package/dist/seo/register-sitemap-cli-impl.d.ts +1 -1
- package/dist/seo/register-sitemap-cli.d.ts +1 -1
- package/dist/seo/register-sitemap-cli.js +2 -2
- package/dist/seo/schema-filter.d.ts +5 -6
- package/dist/seo/server-api.d.ts +1 -1
- package/dist/seo/sitemap.js +2 -2
- package/dist/seo/types.d.ts +4 -4
- package/dist/seo/withManagedMetadata.d.ts +4 -4
- package/dist/server/index.js +2 -2
- package/dist/server/mint-site-token.d.ts +1 -2
- package/dist/server/server-fetch.d.ts +5 -5
- package/dist/shared/build-entries.d.ts +4 -4
- package/dist/shared/frame.d.ts +8 -9
- package/dist/shared/fresh-fetch.d.ts +1 -2
- package/dist/shared/next-files.d.ts +1 -1
- package/dist/shared/publishCredential.d.ts +1 -1
- package/dist/shared/uuid.d.ts +1 -2
- package/dist/shared/version.d.ts +1 -1
- package/dist/shared/visual-viewport-gap.d.ts +2 -2
- package/dist/signal/index.js +2 -2
- package/dist/site-config/index.d.ts +2 -2
- package/dist/sitemap/index.d.ts +13 -13
- package/dist/sitemap/index.js +2 -2
- package/dist/sitemap/shared.d.ts +3 -3
- package/dist/sites/site-param.d.ts +2 -2
- package/dist/slots/ManagedRichText.d.ts +1 -1
- package/dist/slots/ManagedSlot.d.ts +1 -1
- package/dist/slots/index.d.ts +1 -3
- package/dist/sync/index.js +5 -5
- package/dist/types.d.ts +1 -1
- package/dist/{web-vitals.attribution-N2PCCF4Q.js → web-vitals.attribution-GD6LGLVF.js} +1 -1
- package/dist/website/PopupBlocks.d.ts +3 -4
- package/dist/website/images.js +4 -4
- package/dist/website/index.js +5 -5
- package/dist/website/popups.js +4 -4
- package/dist/{writeLLMsTxt-QR23OQUE.js → writeLLMsTxt-G3JBNBC5.js} +1 -1
- package/docs/MIGRATING-TO-7.md +9 -13
- package/package.json +1 -1
- package/src/admin-auth/README.md +3 -3
- package/src/analytics/README.md +7 -9
- package/src/articles/README.md +6 -6
- package/src/cta-bar/README.md +11 -11
- package/src/forms/README.md +10 -8
- package/src/llms/README.md +3 -3
- package/src/mcp/README.md +7 -7
- package/src/motion/README.md +1 -1
- package/src/og/README.md +26 -27
- package/src/proxy/README.md +14 -14
- package/src/seo/README.md +1 -1
- package/src/slots/README.md +1 -1
- package/src/sync/README.md +1 -1
- package/dist/ManagedForm-Z3PKOPIZ.js +0 -14
- package/dist/SitemapSync-XVMGKCF3.js +0 -8
package/dist/seo/llms.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-
|
|
1
|
+
export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-WWSHFRDL.js';
|
|
2
2
|
export { buildAiDiscoveryHeaders, wantsLlmsDiscoveryLink } from '../chunk-PO2TRJPY.js';
|
|
3
3
|
export { AI_RETRIEVAL_CRAWLERS, AI_TRAINING_CRAWLERS, buildAiCrawlerRules, createRobotsTxtHandler } from '../chunk-QLTDFUJ7.js';
|
|
4
|
-
export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-
|
|
4
|
+
export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-VGH4MDTU.js';
|
|
5
5
|
import '../chunk-XTRZGXB2.js';
|
|
6
6
|
export { AEOBlock, AEOCitedContent, AEOClaim, AEOComparison, AEODefinition, AEOEntity, AEOProvenanceList, AEOStep, AEOSteps, AEOSummary, DEFAULT_SPEAKABLE_SELECTORS, SpeakableSchema, createSpeakableSchema, getSpeakableSelectorsForPage } from '../chunk-PSAG45YF.js';
|
|
7
|
-
export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-
|
|
7
|
+
export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-QEDHRBAT.js';
|
|
8
8
|
export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-GLHQ3LRO.js';
|
|
9
9
|
import '../chunk-L5UOHS6E.js';
|
|
10
10
|
import '../chunk-WMVK77ND.js';
|
|
@@ -15,5 +15,5 @@ import '../chunk-MJP63SSS.js';
|
|
|
15
15
|
import '../chunk-YVKRYQRG.js';
|
|
16
16
|
import '../chunk-FESKKJAS.js';
|
|
17
17
|
import '../chunk-A4CC4ZG3.js';
|
|
18
|
-
import '../chunk-
|
|
18
|
+
import '../chunk-AH5Q262S.js';
|
|
19
19
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -37,7 +37,7 @@ export type RegisterLocalSitemapOptions = {
|
|
|
37
37
|
*/
|
|
38
38
|
brandProfile?: boolean;
|
|
39
39
|
/**
|
|
40
|
-
* The sub-site host these pages belong to (`--site
|
|
40
|
+
* The sub-site host these pages belong to (`--site ohio.example.com`).
|
|
41
41
|
* Omit to resolve it the way every other build-time read does:
|
|
42
42
|
* `NEXT_PUBLIC_SITE_URL`'s host (the CLI loads `.env` / `.env.local`).
|
|
43
43
|
*
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* npx sonor-register-sitemap --write-llms-full # ...and public/llms-full.txt
|
|
13
13
|
* npx sonor-register-sitemap --write-llms --publication /insights # articles' path, for cluster links
|
|
14
14
|
* npx sonor-register-sitemap --write-llms --no-agent-access # never add the MCP "Agent access" section
|
|
15
|
-
* npx sonor-register-sitemap --auto-discover --site
|
|
15
|
+
* npx sonor-register-sitemap --auto-discover --site ohio.example.com # Tag the pages with a sub-site host
|
|
16
16
|
*
|
|
17
17
|
* The sub-site host defaults to NEXT_PUBLIC_SITE_URL's (from .env / .env.local),
|
|
18
18
|
* so a multi-site project's microsites tag their pages with no flag.
|
|
@@ -458,7 +458,7 @@ async function registerLocalSitemap(options) {
|
|
|
458
458
|
}
|
|
459
459
|
if (options.writeLlms && result.success) {
|
|
460
460
|
try {
|
|
461
|
-
const { writeLLMsTxtToPublic } = await import('../writeLLMsTxt-
|
|
461
|
+
const { writeLLMsTxtToPublic } = await import('../writeLLMsTxt-G3JBNBC5.js');
|
|
462
462
|
const written = await writeLLMsTxtToPublic({
|
|
463
463
|
// Resolved here too: the sync's own `site` is scoped to the branch that
|
|
464
464
|
// posts, and this runs on the skip path as well.
|
|
@@ -527,7 +527,7 @@ async function main() {
|
|
|
527
527
|
}
|
|
528
528
|
if (result.meta_optimization?.triggered) {
|
|
529
529
|
console.log(`[Sonor] \u2713 Signal AI meta optimization triggered for ${result.meta_optimization.pages_queued} pages`);
|
|
530
|
-
console.log(`[Sonor] (Running in background - check
|
|
530
|
+
console.log(`[Sonor] (Running in background - check Sonor SEO module for results)`);
|
|
531
531
|
}
|
|
532
532
|
process.exit(0);
|
|
533
533
|
} else {
|
|
@@ -6,12 +6,11 @@
|
|
|
6
6
|
* `managed_schema` and entity-graph nodes (`ManagedSchema`).
|
|
7
7
|
*
|
|
8
8
|
* `excludeTypes` used to drop a row only when its `schema_type` matched
|
|
9
|
-
* exactly, so a node of that type nested INSIDE a row got through
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* FAQPage nodes by hand and re-added the rows. Now an excluded type goes
|
|
9
|
+
* exactly, so a node of that type nested INSIDE a row got through: a
|
|
10
|
+
* page-level row whose JSON-LD embeds a FAQPage for questions the page
|
|
11
|
+
* doesn't show (structured data has to describe visible content) was out of
|
|
12
|
+
* `excludeTypes: ['FAQPage']`'s reach, and sites dropped those nodes by
|
|
13
|
+
* hand. Now an excluded type goes
|
|
15
14
|
* wherever it sits: a whole row, an `@graph` member, or a nested value
|
|
16
15
|
* (`mainEntity`, `hasPart`). A row left with nothing in it is dropped.
|
|
17
16
|
*
|
package/dist/seo/server-api.d.ts
CHANGED
|
@@ -146,7 +146,7 @@ export declare function registerSitemap(entries: Array<{
|
|
|
146
146
|
/**
|
|
147
147
|
* Ensure metadata exists for a page by triggering Signal AI optimization.
|
|
148
148
|
* If the page has no managed_title or managed_meta_description, Signal will
|
|
149
|
-
* generate them and save to the database via
|
|
149
|
+
* generate them and save to the database via Sonor proxy.
|
|
150
150
|
*
|
|
151
151
|
* Idempotent — returns existing metadata if already populated.
|
|
152
152
|
* @server-only
|
package/dist/seo/sitemap.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-
|
|
1
|
+
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-JBE46QJZ.js';
|
|
2
2
|
import '../chunk-Z22QVHT4.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-QEDHRBAT.js';
|
|
4
4
|
import '../chunk-GLHQ3LRO.js';
|
|
5
5
|
import '../chunk-L5UOHS6E.js';
|
|
6
6
|
import '../chunk-WMVK77ND.js';
|
package/dist/seo/types.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export interface SEOPageData {
|
|
|
26
26
|
managed_schema?: Record<string, unknown>;
|
|
27
27
|
/** LLM-optimized schema for AI visibility (detailed descriptions, keywords, etc.) */
|
|
28
28
|
managed_llm_schema?: Record<string, unknown>;
|
|
29
|
-
/** Optional locale → URL map for hreflang (
|
|
29
|
+
/** Optional locale → URL map for hreflang (Sonor expansion track) */
|
|
30
30
|
language_alternates?: Record<string, string> | null;
|
|
31
31
|
updated_at: string;
|
|
32
32
|
}
|
|
@@ -108,7 +108,7 @@ export interface ManagedFAQProps {
|
|
|
108
108
|
/** Show section title */
|
|
109
109
|
showTitle?: boolean;
|
|
110
110
|
/**
|
|
111
|
-
* Sub-site host for multi-site projects (e.g. `
|
|
111
|
+
* Sub-site host for multi-site projects (e.g. `charlotte.example.com`): shows that
|
|
112
112
|
* host's FAQ, falling back to a project-wide one. Omit to resolve from
|
|
113
113
|
* NEXT_PUBLIC_SITE_URL.
|
|
114
114
|
*/
|
|
@@ -137,7 +137,7 @@ export interface ManagedInternalLinksProps {
|
|
|
137
137
|
/** Custom link renderer */
|
|
138
138
|
renderLink?: (link: ManagedLink) => React.ReactNode;
|
|
139
139
|
/**
|
|
140
|
-
* Sub-site host for multi-site projects (e.g. `
|
|
140
|
+
* Sub-site host for multi-site projects (e.g. `charlotte.example.com`): shows that
|
|
141
141
|
* host's links plus project-wide ones. Omit to resolve from
|
|
142
142
|
* NEXT_PUBLIC_SITE_URL.
|
|
143
143
|
*/
|
|
@@ -167,7 +167,7 @@ export interface ManagedContentProps {
|
|
|
167
167
|
/** Inject entity annotations from knowledge graph (data-sonor-entity attributes) */
|
|
168
168
|
injectEntityAnnotations?: boolean;
|
|
169
169
|
/**
|
|
170
|
-
* Sub-site host for multi-site projects (e.g. `
|
|
170
|
+
* Sub-site host for multi-site projects (e.g. `charlotte.example.com`): shows that
|
|
171
171
|
* host's block, falling back to a project-wide one. Omit to resolve from
|
|
172
172
|
* NEXT_PUBLIC_SITE_URL.
|
|
173
173
|
*/
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @sonordev/site-kit/seo - withManagedMetadata
|
|
3
3
|
*
|
|
4
4
|
* Higher-order function that wraps Next.js generateMetadata to auto-merge
|
|
5
|
-
*
|
|
5
|
+
* Sonor-managed SEO data. Sonor values serve as defaults; page-level
|
|
6
6
|
* metadata returned by the caller takes priority.
|
|
7
7
|
*
|
|
8
|
-
* @example Zero-config (
|
|
8
|
+
* @example Zero-config (Sonor manages everything):
|
|
9
9
|
* ```ts
|
|
10
10
|
* export const generateMetadata = withManagedMetadata('/about')
|
|
11
11
|
* ```
|
|
@@ -32,12 +32,12 @@ type MetadataArgs = {
|
|
|
32
32
|
type PathResolver = string | ((args: MetadataArgs) => string | Promise<string>);
|
|
33
33
|
type PageMetadataFn = (args: MetadataArgs, parent: ResolvingMetadata) => Promise<Metadata> | Metadata;
|
|
34
34
|
/**
|
|
35
|
-
* Wrap generateMetadata to auto-merge
|
|
35
|
+
* Wrap generateMetadata to auto-merge Sonor managed metadata.
|
|
36
36
|
*
|
|
37
37
|
* - `path` can be a static string or a function that derives the path
|
|
38
38
|
* from the page's params.
|
|
39
39
|
* - `pageMetadata` (optional) returns page-specific overrides.
|
|
40
|
-
* Anything it returns wins over
|
|
40
|
+
* Anything it returns wins over Sonor values.
|
|
41
41
|
*/
|
|
42
42
|
export declare function withManagedMetadata(path: PathResolver, pageMetadata?: PageMetadataFn): (args: MetadataArgs, parent: ResolvingMetadata) => Promise<Metadata>;
|
|
43
43
|
export {};
|
package/dist/server/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { resolveClientCredential } from '../chunk-
|
|
1
|
+
export { resolveClientCredential } from '../chunk-6WIQCXOO.js';
|
|
2
2
|
import '../chunk-VX5CMNMM.js';
|
|
3
3
|
export { requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch } from '../chunk-X6F6SO4S.js';
|
|
4
4
|
import '../chunk-MH2DSGC6.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-AH5Q262S.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -33,8 +33,7 @@
|
|
|
33
33
|
*
|
|
34
34
|
* SEED FRESHNESS: a static page's seed carries `iat` = build time, and the API
|
|
35
35
|
* refuses to refresh a seed older than SITE_TOKEN_MAX_REFRESH_AGE_SECONDS
|
|
36
|
-
* (
|
|
37
|
-
* from 30 alongside this fix). A site not rebuilt within that window serves a
|
|
36
|
+
* (currently 400 days, raised from 30 alongside this fix). A site not rebuilt within that window serves a
|
|
38
37
|
* seed the client cannot refresh, and its forms/analytics/engage start failing
|
|
39
38
|
* for new visitors. Keep that limit comfortably longer than the fleet's
|
|
40
39
|
* realistic redeploy gap; marketing sites routinely go many months untouched.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SECURITY: Server-only. Reads SONOR_API_KEY from process.env and injects it as
|
|
5
5
|
* `x-api-key`. Importing this module into a client component is a hard build
|
|
6
6
|
* error (see `import 'server-only'` below) — the API key must never reach the
|
|
7
|
-
* browser. Project is resolved by
|
|
7
|
+
* browser. Project is resolved by Sonor from the API key; sites never send
|
|
8
8
|
* or read a project ID (x-api-key only).
|
|
9
9
|
*
|
|
10
10
|
* This is the SINGLE SOURCE OF TRUTH for site-kit's server data plane. It is the
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* sibling package. Import it from `@sonordev/site-kit/server` instead.
|
|
19
19
|
*/
|
|
20
20
|
import 'server-only';
|
|
21
|
-
/** Resolved
|
|
21
|
+
/** Resolved Sonor API config. */
|
|
22
22
|
export interface ServerApiConfig {
|
|
23
23
|
apiUrl: string;
|
|
24
24
|
apiKey: string;
|
|
@@ -30,7 +30,7 @@ export interface ResolveServerApiConfigOptions {
|
|
|
30
30
|
apiUrl?: string;
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Resolve
|
|
33
|
+
* Resolve Sonor API config from overrides → env. Returns null (does NOT throw)
|
|
34
34
|
* when no API key is available, so callers that prefer to degrade gracefully
|
|
35
35
|
* (e.g. portfolio fetchers) can warn-and-skip.
|
|
36
36
|
*
|
|
@@ -46,7 +46,7 @@ export declare function resolveServerApiConfig(options?: ResolveServerApiConfigO
|
|
|
46
46
|
*/
|
|
47
47
|
export declare function requireServerApiConfig(options?: ResolveServerApiConfigOptions, errorMessage?: string): ServerApiConfig;
|
|
48
48
|
/**
|
|
49
|
-
* Origin for the
|
|
49
|
+
* Origin for the Sonor API preconnect/dns-prefetch hints (handles a custom
|
|
50
50
|
* SONOR_API_URL in staging). Shared by SiteKitLayout and AgencySiteKitLayout so
|
|
51
51
|
* the origin-resolution logic lives in one place.
|
|
52
52
|
*/
|
|
@@ -102,7 +102,7 @@ export interface ServerFetchOptions {
|
|
|
102
102
|
init?: RequestInit;
|
|
103
103
|
}
|
|
104
104
|
/**
|
|
105
|
-
* The canonical
|
|
105
|
+
* The canonical Sonor API fetcher.
|
|
106
106
|
*
|
|
107
107
|
* - Injects `x-api-key` automatically (resolved from overrides → env)
|
|
108
108
|
* - JSON request/response
|
|
@@ -96,7 +96,7 @@ export declare const entry: {
|
|
|
96
96
|
readonly '_client/booking-widget': 'src/sync/BookingWidget.tsx';
|
|
97
97
|
readonly '_client/testimonial-section': 'src/reputation/TestimonialSection.tsx';
|
|
98
98
|
readonly 'slots/index': 'src/slots/index.ts';
|
|
99
|
-
/** Pure contract + HMAC signing (src/contracts;
|
|
99
|
+
/** Pure contract + HMAC signing (src/contracts; also published as @sonordev/contracts/slots) */
|
|
100
100
|
readonly 'slots/contract': 'src/slots/contract.ts';
|
|
101
101
|
readonly 'revalidate/index': 'src/revalidate/index.ts';
|
|
102
102
|
readonly 'website/index': 'src/website/index.ts';
|
|
@@ -127,7 +127,7 @@ export declare const entry: {
|
|
|
127
127
|
readonly 'seo/meta/contract': 'src/seo/entry-meta-contract.ts';
|
|
128
128
|
readonly 'seo/pages/contract': 'src/seo/entry-pages-contract.ts';
|
|
129
129
|
readonly 'fleet/index': 'src/fleet/index.ts';
|
|
130
|
-
/** Pure wire contract (src/contracts;
|
|
130
|
+
/** Pure wire contract (src/contracts; also published as @sonordev/contracts/fleet) */
|
|
131
131
|
readonly 'fleet/contract': 'src/fleet/contract.ts';
|
|
132
132
|
/** Multi-site `site` host normalization + equality */
|
|
133
133
|
readonly 'sites/contract': 'src/sites/contract.ts';
|
|
@@ -175,8 +175,8 @@ export declare const entry: {
|
|
|
175
175
|
* SECURITY-CRITICAL. A `'use client'` stamp makes every module the entry reaches
|
|
176
176
|
* client code *by declaration*, so anything in that graph ships to visitors and
|
|
177
177
|
* has its `NEXT_PUBLIC_*` reads inlined as literals. `articles/index` (now `articles/index`)
|
|
178
|
-
* reaching `articles/server-core` this way
|
|
179
|
-
* public `.next/static/chunks/` file of
|
|
178
|
+
* reaching `articles/server-core` this way would put a raw `sonor_` project key in a
|
|
179
|
+
* public `.next/static/chunks/` file of the site's build.
|
|
180
180
|
*
|
|
181
181
|
* `./client-entry-boundary.test.ts` asserts none of these can reach a
|
|
182
182
|
* `server-only` module. Add new client entries HERE — that keeps the stamp and
|
package/dist/shared/frame.d.ts
CHANGED
|
@@ -9,14 +9,13 @@
|
|
|
9
9
|
*
|
|
10
10
|
* ─── Why it exists ─────────────────────────────────────────────────────────
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* upforge.io's page to the client's own project. Measured effect, and the
|
|
12
|
+
* Agency case studies embed a client's whole production site in desktop,
|
|
13
|
+
* tablet and mobile iframes, and `proxy/securityHeaders.ts`'s
|
|
14
|
+
* DEFAULT_FRAME_ANCESTORS lets the showcase origins frame every managed site.
|
|
15
|
+
* Inside that frame the client's site loads, hydrates and runs its site-kit
|
|
16
|
+
* modules exactly as it would for a real visitor: a screenshot overlay covers
|
|
17
|
+
* the PIXELS, not the JavaScript. Anything that phones home from there is
|
|
18
|
+
* attributing a visit to the portfolio page to the client's own project. Measured effect, and the
|
|
20
19
|
* analytics decision built on this: `analytics/send-gate.ts`.
|
|
21
20
|
*
|
|
22
21
|
* ─── Detection ─────────────────────────────────────────────────────────────
|
|
@@ -46,7 +45,7 @@
|
|
|
46
45
|
*
|
|
47
46
|
* Nesting resolves the way you would want, because these compare against
|
|
48
47
|
* `window.top` and not `window.parent`: a same-origin frame nested inside a
|
|
49
|
-
* cross-origin one (
|
|
48
|
+
* cross-origin one (portfolio.example → client.com → client.com/widget) is still
|
|
50
49
|
* correctly reported as a cross-origin embed.
|
|
51
50
|
*/
|
|
52
51
|
/**
|
|
@@ -21,8 +21,7 @@
|
|
|
21
21
|
* that directory between builds (Netlify does), so every later build
|
|
22
22
|
* replays the first response. That's how public/llms.txt shipped a
|
|
23
23
|
* months-old copy: its fetch carried no option, was cached with a one-year
|
|
24
|
-
* revalidate, and each build rewrote the same stale file
|
|
25
|
-
* vsfconsultingservices.com, 2026-09-15).
|
|
24
|
+
* revalidate, and each build rewrote the same stale file.
|
|
26
25
|
*
|
|
27
26
|
* So we call the original fetch Next keeps on the patched one and stay
|
|
28
27
|
* invisible to the framework: no bailout, no cache entry, no effect on the
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SINGLE SOURCE OF TRUTH for "find the root layout / a page / the proxy". Each
|
|
5
5
|
* CLI check used to carry its own candidate list, and the lists drifted: the OG
|
|
6
6
|
* wiring rule only looked for `app/layout.tsx`, so `doctor` told a site whose
|
|
7
|
-
* root layout is `app/layout.jsx`
|
|
7
|
+
* root layout is `app/layout.jsx` that it had
|
|
8
8
|
* no layout at all. `geo` knew about `.jsx` but not `src/app`, and none of them
|
|
9
9
|
* knew about `proxy.ts`. Route every lookup through here; never re-fork a list.
|
|
10
10
|
*
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* `@sonordev/agency-site-kit`'s `AgencySiteKitLayout`.
|
|
11
11
|
*
|
|
12
12
|
* Do not re-fork this. Before it existed, agency sites hand-rolled their own
|
|
13
|
-
* "set the globals on mount" component
|
|
13
|
+
* "set the globals on mount" component, and
|
|
14
14
|
* because those copies had no access to the token manager they published the
|
|
15
15
|
* RAW `sonor_` key into the client bundle — the exact exposure the mint exists
|
|
16
16
|
* to prevent. Any layout that puts a credential on `window` goes through here.
|
package/dist/shared/uuid.d.ts
CHANGED
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
* deployed site viewed before its TLS cert provisions — or in older Safari,
|
|
11
11
|
* `crypto.randomUUID` is `undefined`, so calling it unguarded throws
|
|
12
12
|
* "crypto.randomUUID is not a function" DURING RENDER and crashes the whole
|
|
13
|
-
* page. (Observed live on
|
|
14
|
-
* pending.)
|
|
13
|
+
* page. (Observed live on a site whose cert was still pending.)
|
|
15
14
|
*
|
|
16
15
|
* `uuid()` degrades gracefully and NEVER throws:
|
|
17
16
|
* 1. crypto.randomUUID() — fast path; modern secure contexts.
|
package/dist/shared/version.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Single source of truth for measuring how far the layout viewport extends
|
|
5
5
|
* below the visual viewport and publishing it as `--sk-vv-layout-gap` on
|
|
6
|
-
* <html>. Moved into the kit from
|
|
7
|
-
*
|
|
6
|
+
* <html>. Moved into the kit from two sites that each carried a
|
|
7
|
+
* byte-identical copy.
|
|
8
8
|
*
|
|
9
9
|
* On a phone the two viewports can disagree (browser chrome, in-app browsers,
|
|
10
10
|
* pinch zoom, an on-screen keyboard), and `position: fixed; bottom: …` is
|
package/dist/signal/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { useSignalExperiment, useSignalEvent } from '../chunk-
|
|
3
|
-
export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-
|
|
2
|
+
import { useSignalExperiment, useSignalEvent } from '../chunk-PHYMNUJU.js';
|
|
3
|
+
export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-PHYMNUJU.js';
|
|
4
4
|
import '../chunk-PKBMQBKP.js';
|
|
5
5
|
import React, { useEffect } from 'react';
|
|
6
6
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Site config from
|
|
2
|
+
* Site config from Sonor (project-info) by API key.
|
|
3
3
|
* Resolves site_url and domain so consumers only need SONOR_API_KEY.
|
|
4
4
|
*/
|
|
5
5
|
export interface SiteConfig {
|
|
@@ -11,7 +11,7 @@ export interface GetSiteConfigOptions {
|
|
|
11
11
|
apiUrl?: string;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* Fetch site_url and domain from
|
|
14
|
+
* Fetch site_url and domain from Sonor project-info for the given API key.
|
|
15
15
|
* Uses in-memory cache (TTL 10 min) keyed by apiKey.
|
|
16
16
|
* Safe for Edge (middleware) and Node (route handlers).
|
|
17
17
|
*/
|
package/dist/sitemap/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @sonordev/site-kit - Sitemap Generator
|
|
3
3
|
*
|
|
4
4
|
* Automatically generates sitemap.xml from Next.js app directory structure.
|
|
5
|
-
* Works at build time to discover all pages and sync them to
|
|
5
|
+
* Works at build time to discover all pages and sync them to Sonor API.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
8
|
* ```ts
|
|
@@ -36,10 +36,10 @@ export interface SitemapEntry {
|
|
|
36
36
|
images?: string[];
|
|
37
37
|
}
|
|
38
38
|
export interface SitemapConfig {
|
|
39
|
-
/** Base URL for the site (optional when apiKey is set; then resolved from
|
|
39
|
+
/** Base URL for the site (optional when apiKey is set; then resolved from Sonor project-info) */
|
|
40
40
|
baseUrl?: string;
|
|
41
41
|
/**
|
|
42
|
-
* Sub-site host this build belongs to (e.g. `
|
|
42
|
+
* Sub-site host this build belongs to (e.g. `charlotte.example.com`) — the
|
|
43
43
|
* multi-site `site` dimension. One Sonor project can host many domains, and
|
|
44
44
|
* seo_pages is unique on (project_id, site, url), so shared paths like `/`
|
|
45
45
|
* and `/terms` keep one row PER HOST. Tagging the sync keeps this build's
|
|
@@ -95,11 +95,11 @@ export interface SitemapConfig {
|
|
|
95
95
|
resolveGenerateStaticParams?: boolean;
|
|
96
96
|
/** Priority overrides by path pattern */
|
|
97
97
|
priorities?: Record<string, number>;
|
|
98
|
-
/**
|
|
98
|
+
/** Sonor API URL for syncing (defaults to SONOR_API_URL or https://api.sonor.io) */
|
|
99
99
|
apiUrl?: string;
|
|
100
|
-
/**
|
|
100
|
+
/** Sonor API key for syncing (defaults to SONOR_API_KEY) */
|
|
101
101
|
apiKey?: string;
|
|
102
|
-
/** Disable auto-sync to
|
|
102
|
+
/** Disable auto-sync to Sonor API */
|
|
103
103
|
disableSync?: boolean;
|
|
104
104
|
/** When true, await meta optimization before build completes (for build-time llms.txt with managed_llm_schema) */
|
|
105
105
|
awaitMetaOptimization?: boolean;
|
|
@@ -111,7 +111,7 @@ export interface SitemapConfig {
|
|
|
111
111
|
* build. It used to default to 120000ms, which only worked because a stale
|
|
112
112
|
* Data Cache entry answered the request instantly (see shared/fresh-fetch.ts).
|
|
113
113
|
*
|
|
114
|
-
* The write still often won't fit, and no value here makes it fit. Measured against a 191-page site,
|
|
114
|
+
* The write still often won't fit, and no value here makes it fit. Measured against a 191-page site, Sonor takes ~27s for
|
|
115
115
|
* llms.txt and ~53s for llms-full.txt, because it generates each through
|
|
116
116
|
* Signal's AEO skill (an LLM call). ~80s combined, inside a route Next
|
|
117
117
|
* allows 60s. Any value low enough to protect the route is too low for the
|
|
@@ -123,7 +123,7 @@ export interface SitemapConfig {
|
|
|
123
123
|
* dropped from the build — the fix is architectural, not numeric: set
|
|
124
124
|
* `optimizedLLMsTxt: false` here and call `writeLLMsTxtToPublic` from a
|
|
125
125
|
* postbuild script instead, where nothing imposes a 60s ceiling. Run it
|
|
126
|
-
* after `next build` so the sitemap has already synced to
|
|
126
|
+
* after `next build` so the sitemap has already synced to Sonor, which is
|
|
127
127
|
* what the generation reads.
|
|
128
128
|
*
|
|
129
129
|
* Timing out is safe either way: writeLLMsTxtToPublic never persists a
|
|
@@ -136,10 +136,10 @@ export interface SitemapConfig {
|
|
|
136
136
|
/**
|
|
137
137
|
* The llms.txt "Agent access" section (writeLLMsTxtToPublic's `mcp`).
|
|
138
138
|
* Default: on only for site-kit's built-in MCP server; a site with its own
|
|
139
|
-
*
|
|
139
|
+
* is left alone. `false` forces it off, `true` on.
|
|
140
140
|
*/
|
|
141
141
|
llmsAgentAccess?: boolean;
|
|
142
|
-
/** When
|
|
142
|
+
/** When Sonor returns empty services, use this to supply local site data for llms.txt */
|
|
143
143
|
getLocalData?: () => Promise<import('../llms/types').LLMsDataResponse | null>;
|
|
144
144
|
/** Pass-through to GET /api/public/llms/txt?publicSummaryOnly=true and local llms fallback */
|
|
145
145
|
llmsPublicSummaryOnly?: boolean;
|
|
@@ -180,7 +180,7 @@ export interface SyncSitemapOptions {
|
|
|
180
180
|
site?: string;
|
|
181
181
|
}
|
|
182
182
|
/**
|
|
183
|
-
* Sync sitemap entries to
|
|
183
|
+
* Sync sitemap entries to Sonor API
|
|
184
184
|
* Called automatically by createSitemap at build time
|
|
185
185
|
*/
|
|
186
186
|
export declare function syncSitemapToPortal(entries: SitemapEntry[], apiUrl: string, apiKey: string, options?: SyncSitemapOptions): Promise<{
|
|
@@ -190,7 +190,7 @@ export declare function syncSitemapToPortal(entries: SitemapEntry[], apiUrl: str
|
|
|
190
190
|
}>;
|
|
191
191
|
/**
|
|
192
192
|
* Create a sitemap generator function for Next.js
|
|
193
|
-
* Automatically syncs to
|
|
193
|
+
* Automatically syncs to Sonor API at build time.
|
|
194
194
|
*
|
|
195
195
|
* @example
|
|
196
196
|
* ```ts
|
|
@@ -203,7 +203,7 @@ export declare function syncSitemapToPortal(entries: SitemapEntry[], apiUrl: str
|
|
|
203
203
|
* ```
|
|
204
204
|
*/
|
|
205
205
|
/**
|
|
206
|
-
* Fetches published portfolio items from
|
|
206
|
+
* Fetches published portfolio items from Sonor API and returns them as sitemap paths.
|
|
207
207
|
* Use this in createSitemap's additionalPaths to include portfolio routes.
|
|
208
208
|
*
|
|
209
209
|
* @example
|
package/dist/sitemap/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-
|
|
1
|
+
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-JBE46QJZ.js';
|
|
2
2
|
import '../chunk-Z22QVHT4.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-QEDHRBAT.js';
|
|
4
4
|
import '../chunk-GLHQ3LRO.js';
|
|
5
5
|
import '../chunk-L5UOHS6E.js';
|
|
6
6
|
import '../chunk-WMVK77ND.js';
|
package/dist/sitemap/shared.d.ts
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* carry it when the site does.
|
|
16
16
|
*
|
|
17
17
|
* The copies had already drifted (one treated `''` as the homepage, the others
|
|
18
|
-
* didn't; one stripped embedded domains, another only rejected them)
|
|
19
|
-
* one implementation
|
|
18
|
+
* didn't; one stripped embedded domains, another only rejected them), so
|
|
19
|
+
* there's one implementation now.
|
|
20
20
|
*
|
|
21
21
|
* Pure string logic only — NO Node built-ins, NO React — so this file is safe to
|
|
22
22
|
* import from the browser `SitemapSync` client component AND from the Node CLI.
|
|
@@ -100,7 +100,7 @@ export declare function isMalformedSitemapPath(path: string): boolean;
|
|
|
100
100
|
* Next gives a prerendered route 60s (`staticPageGenerationTimeout`), then
|
|
101
101
|
* retries it and fails the build. Sonor generates llms.txt through an LLM call
|
|
102
102
|
* that takes roughly 27-60s, so the write can't reliably fit, and it runs
|
|
103
|
-
* after
|
|
103
|
+
* after Sonor sync has already spent part of the budget. Until 2026-09 a
|
|
104
104
|
* one-year Data Cache entry hid this: the call ran live only on a site's first
|
|
105
105
|
* build, and every later build replayed the stored response (a stale file).
|
|
106
106
|
* With reads fresh (shared/fresh-fetch.ts), the write gets whatever is left of
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Append `site=<host>` to an API URL or endpoint path. Returns the input
|
|
3
3
|
* unchanged when the host resolves empty.
|
|
4
4
|
*
|
|
5
|
-
* withSiteParam('/public/articles/posts?page=2', '
|
|
6
|
-
* → '/public/articles/posts?page=2&site=
|
|
5
|
+
* withSiteParam('/public/articles/posts?page=2', 'charlotte.example.com')
|
|
6
|
+
* → '/public/articles/posts?page=2&site=charlotte.example.com'
|
|
7
7
|
*/
|
|
8
8
|
export declare function withSiteParam(url: string, site?: string): string;
|
|
9
9
|
/**
|
|
@@ -23,7 +23,7 @@ export interface ManagedRichTextProps extends Omit<SlotResolveOptions, 'fallback
|
|
|
23
23
|
* ```tsx
|
|
24
24
|
* <div className="prose">
|
|
25
25
|
* <ManagedRichText id="about-intro" page="/about">
|
|
26
|
-
* {`We've built homes in **
|
|
26
|
+
* {`We've built homes in **Springfield** since 1998.\n\n- Custom builds\n- Remodels`}
|
|
27
27
|
* </ManagedRichText>
|
|
28
28
|
* </div>
|
|
29
29
|
* ```
|
|
@@ -22,7 +22,7 @@ export interface ManagedSlotProps extends Omit<SlotResolveOptions, 'fallback'> {
|
|
|
22
22
|
* ```tsx
|
|
23
23
|
* <h1 className="hero-title">
|
|
24
24
|
* <ManagedSlot id="home-hero-headline" page="/">
|
|
25
|
-
* New Homes in
|
|
25
|
+
* New Homes in Springfield and Beyond
|
|
26
26
|
* </ManagedSlot>
|
|
27
27
|
* </h1>
|
|
28
28
|
* ```
|
package/dist/slots/index.d.ts
CHANGED
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
* @sonordev/site-kit/website/slots — Managed Slots (3.0 spine, Pillar 1)
|
|
3
3
|
*
|
|
4
4
|
* Named, Sonor-managed copy inside developer-owned markup: text, rich text,
|
|
5
|
-
* links and lists
|
|
6
|
-
* Static-safe, fallback-first, signature-verified.
|
|
7
|
-
* See docs/SITE-KIT-3.0-SPEC-SLOTS.md.
|
|
5
|
+
* links and lists. Static-safe, fallback-first, signature-verified.
|
|
8
6
|
*/
|
|
9
7
|
export { ManagedSlot, default } from './ManagedSlot';
|
|
10
8
|
export type { ManagedSlotProps } from './ManagedSlot';
|
package/dist/sync/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { BookingWidget } from '../chunk-
|
|
2
|
-
export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
1
|
+
export { BookingWidget } from '../chunk-JTU2GOM4.js';
|
|
2
|
+
export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-M3YEPKP7.js';
|
|
3
|
+
import '../chunk-3SDOQUUF.js';
|
|
4
|
+
import '../chunk-VDF5DFWT.js';
|
|
5
|
+
import '../chunk-AH5Q262S.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @sonordev/site-kit - Shared types across all modules
|
|
3
3
|
*
|
|
4
|
-
* Site-kit ONLY calls
|
|
4
|
+
* Site-kit ONLY calls Sonor API - never Supabase directly.
|
|
5
5
|
* All data access goes through api.sonor.io with API key auth.
|
|
6
6
|
*/
|
|
7
7
|
export interface BaseEntity {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __publicField } from './chunk-PKBMQBKP.js';
|
|
2
2
|
|
|
3
|
-
// node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/web-vitals.attribution.js
|
|
3
|
+
// ../../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/web-vitals.attribution.js
|
|
4
4
|
var t = class {
|
|
5
5
|
constructor() {
|
|
6
6
|
__publicField(this, "t");
|
|
@@ -11,10 +11,9 @@
|
|
|
11
11
|
* `--sk-site-*` variables, set on this popup's root from `tokens` (never on
|
|
12
12
|
* :root, so nothing leaks into the site's own CSS).
|
|
13
13
|
*
|
|
14
|
-
* The dashboard keeps a byte-identical copy
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* fails when they differ. Edit here, then copy.
|
|
14
|
+
* The dashboard keeps a byte-identical copy until @sonordev/contracts
|
|
15
|
+
* replaces the mirrors; its drift test fails when they differ. Edit here,
|
|
16
|
+
* then copy.
|
|
18
17
|
*
|
|
19
18
|
* Accessibility: a centred popup is a modal dialog (labelled by its heading,
|
|
20
19
|
* focus moves in and is kept there, Escape and the overlay close it, focus
|
package/dist/website/images.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-
|
|
1
|
+
export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-ILU5I6RW.js';
|
|
2
2
|
export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-GW7GSBO7.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-3SDOQUUF.js';
|
|
4
|
+
import '../chunk-VDF5DFWT.js';
|
|
5
|
+
import '../chunk-AH5Q262S.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|