@sonordev/site-kit 7.2.0 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/agent-manifest.json +6 -4
- package/dist/{AnalyticsProvider-SLFFBRPE.js → AnalyticsProvider-BQXV3ZF3.js} +4 -4
- package/dist/{ArticleViewTracker-TM5AMGN2.js → ArticleViewTracker-3DH53RSB.js} +3 -3
- package/dist/{BlocksPopup-YJNJIVPO.js → BlocksPopup-FGWYVHCH.js} +4 -4
- package/dist/{ChatWidget-XKOSH66S.js → ChatWidget-CDQZCLVH.js} +5 -5
- package/dist/{FileField-CI4UL5SH.js → FileField-IPJ7L2W6.js} +3 -3
- package/dist/{FormSpotlight-F2AAEGBN.js → FormSpotlight-CQI2DBWI.js} +1 -1
- package/dist/{FormStage-BI5R5CNC.js → FormStage-4WHD6ED4.js} +1 -1
- package/dist/{ManagedForm-G6COGHXL.js → ManagedForm-7FZNH4L2.js} +6 -6
- package/dist/{ManagedNewsletterForm-BO3WCGXX.js → ManagedNewsletterForm-3D2BK3KQ.js} +4 -4
- package/dist/{SignalCore-ZA6WHKBR.js → SignalCore-HEQYITTM.js} +3 -3
- package/dist/{SiteChat-YJADDTKG.js → SiteChat-DMPDXY3W.js} +1 -1
- package/dist/{SiteDesignReporter-5YAW36AQ.js → SiteDesignReporter-Y2IOJE52.js} +5 -5
- package/dist/{SitePopups-ST5PMKZE.js → SitePopups-HD2LDKVU.js} +4 -4
- package/dist/SitemapSync-OKPZHRX6.js +8 -0
- package/dist/_client/booking-widget.js +5 -5
- package/dist/_client/testimonial-section.d.ts +1 -1
- package/dist/_client/testimonial-section.js +2 -1
- package/dist/affiliates/index.js +3 -3
- package/dist/analytics/index.js +4 -4
- package/dist/articles/index.js +1 -1
- package/dist/articles/server-ui.js +1 -1
- package/dist/chat/index.js +6 -6
- package/dist/{chunk-D6ZC7XKZ.js → chunk-3E3PPSNR.js} +2 -2
- package/dist/{chunk-6U3VLV2C.js → chunk-4BHRA7TI.js} +1 -1
- package/dist/{chunk-R46IQIGK.js → chunk-4DJMJ4V5.js} +2 -2
- package/dist/{chunk-BC4Y3S3D.js → chunk-5O62CER4.js} +7 -3
- package/dist/{chunk-EJVQJCG5.js → chunk-6LLTLLEJ.js} +2 -2
- package/dist/{chunk-BR4ZKUHH.js → chunk-7HPZSWS4.js} +17 -1
- package/dist/{chunk-S54ECQGY.js → chunk-AH4AXO4P.js} +1 -1
- package/dist/{chunk-D5DCBD4Y.js → chunk-ATE6IFVK.js} +1 -1
- package/dist/{chunk-GGORNBSC.js → chunk-AV4QAK5F.js} +1 -1
- package/dist/chunk-CAT235HY.js +13 -0
- package/dist/{chunk-JJ3DELUL.js → chunk-CG4ETW5Y.js} +2 -2
- package/dist/{chunk-JWTQS5F5.js → chunk-CKW4HFJG.js} +1 -1
- package/dist/{chunk-FR6BYFPC.js → chunk-CSN45MHO.js} +1 -1
- package/dist/{chunk-GEXT7BTE.js → chunk-D2RGEWHS.js} +1 -1
- package/dist/{chunk-JMLK6MH7.js → chunk-DA5XC7Y6.js} +1 -1
- package/dist/{chunk-CF5QNFYU.js → chunk-EHR4NIMX.js} +2 -2
- package/dist/{chunk-5V2V5C3Y.js → chunk-FUQTV5O6.js} +1 -1
- package/dist/{chunk-K4ZHAURD.js → chunk-GK7TV7EK.js} +1 -1
- package/dist/{chunk-RPZ7OQGD.js → chunk-IE5SSOCN.js} +3 -10
- package/dist/{chunk-HGFAEDG3.js → chunk-JRCNUUNG.js} +1 -1
- package/dist/{chunk-F24FNCTK.js → chunk-KHQ5GD6T.js} +1 -1
- package/dist/{chunk-IAM3D3RL.js → chunk-MDP7EB4J.js} +3 -3
- package/dist/{chunk-BKY2ZNM7.js → chunk-MHGAZ3LL.js} +1 -1
- package/dist/chunk-OD2ULW5Z.js +57 -0
- package/dist/{chunk-64DKGVEI.js → chunk-OOD6GMT4.js} +2 -2
- package/dist/{chunk-OWZ7ATLZ.js → chunk-PF64OEXC.js} +1 -1
- package/dist/{chunk-5YCEMV2L.js → chunk-PQDJNIHR.js} +1 -1
- package/dist/{chunk-VX5CMNMM.js → chunk-UAYAJPEP.js} +7 -1
- package/dist/{chunk-VHKEF5ZB.js → chunk-XA2BNW5M.js} +1 -1
- package/dist/{chunk-VO3JYRT5.js → chunk-XEMHGJEG.js} +8 -8
- package/dist/{chunk-NV72HZ4W.js → chunk-YCFW2OQO.js} +1 -1
- package/dist/{chunk-QL6XNPSD.js → chunk-ZTLU3BSW.js} +26 -9
- package/dist/client/index.js +3 -3
- package/dist/commerce/index.js +4 -4
- package/dist/engage/index.js +7 -7
- package/dist/fleet/index.js +4 -4
- package/dist/forms/index.js +7 -7
- package/dist/forms/server.js +2 -2
- package/dist/images/index.js +4 -4
- package/dist/index.js +1 -1
- package/dist/layout/client.js +7 -7
- package/dist/layout/index.js +9 -9
- package/dist/llms/agent-access.d.ts +4 -0
- package/dist/llms/index.js +6 -6
- package/dist/maps/index.js +3 -3
- package/dist/mcp/WebMcpTools.d.ts +5 -4
- package/dist/mcp/client.js +14 -7
- package/dist/mcp/discovery.d.ts +48 -0
- package/dist/mcp/handlers.d.ts +13 -7
- package/dist/mcp/index.d.ts +5 -3
- package/dist/mcp/index.js +61 -17
- package/dist/mcp/serverCard.d.ts +6 -7
- package/dist/mcp/sonor.js +8 -8
- package/dist/reputation/TestimonialSection.d.ts +1 -1
- package/dist/reputation/VisualReviewCard.d.ts +6 -0
- package/dist/reputation/index.d.ts +2 -1
- package/dist/reputation/index.js +3 -1
- package/dist/reputation/review-photo.d.ts +2 -0
- package/dist/reputation/server.d.ts +3 -2
- package/dist/reputation/server.js +2 -0
- package/dist/reputation/types.d.ts +22 -0
- package/dist/revalidate/index.js +2 -2
- package/dist/seo/client.js +4 -4
- package/dist/seo/index.js +4 -4
- package/dist/seo/llms.js +6 -6
- package/dist/seo/register-sitemap-cli.js +1 -1
- package/dist/seo/sitemap.js +4 -4
- package/dist/server/index.js +3 -3
- package/dist/server/mint-site-token.d.ts +1 -2
- package/dist/shared/fresh-fetch.d.ts +9 -3
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/index.js +2 -2
- package/dist/sitemap/index.js +4 -4
- package/dist/sync/index.js +5 -5
- package/dist/website/images.js +4 -4
- package/dist/website/index.js +5 -5
- package/dist/website/popups.js +4 -4
- package/dist/{writeLLMsTxt-OV24LQVL.js → writeLLMsTxt-OL4KQERZ.js} +3 -3
- package/package.json +1 -1
- package/src/forms/README.md +2 -2
- package/src/llms/README.md +69 -0
- package/src/mcp/README.md +50 -16
- package/src/reputation/README.md +25 -0
- package/dist/SitemapSync-RJTEBINX.js +0 -8
|
@@ -29,11 +29,12 @@ export interface WebMcpToolsProps {
|
|
|
29
29
|
/** MCP endpoint on this origin (default `/api/mcp`). */
|
|
30
30
|
endpoint?: string;
|
|
31
31
|
/**
|
|
32
|
-
* Wait for the page to go quiet before registering (default
|
|
32
|
+
* Wait for the page to go quiet before registering (default false).
|
|
33
33
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
34
|
+
* Supported browsers discover tools as soon as this component mounts, so
|
|
35
|
+
* an agent need not wait for window load, idle, or a human interaction.
|
|
36
|
+
* Pass true to retain load + idle activation. Unsupported browsers never
|
|
37
|
+
* fetch a catalog or register tools, regardless of this setting.
|
|
37
38
|
*/
|
|
38
39
|
defer?: boolean;
|
|
39
40
|
/**
|
package/dist/mcp/client.js
CHANGED
|
@@ -6,21 +6,28 @@ import { useEffect } from 'react';
|
|
|
6
6
|
function getModelContext() {
|
|
7
7
|
if (typeof window === "undefined") return null;
|
|
8
8
|
const doc = document;
|
|
9
|
-
if (doc.modelContext) return doc.modelContext;
|
|
10
9
|
const nav = navigator;
|
|
11
|
-
|
|
10
|
+
for (const context of [doc.modelContext, nav.modelContext]) {
|
|
11
|
+
if (typeof context?.registerTool === "function" || typeof context?.provideContext === "function") {
|
|
12
|
+
return context;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
12
16
|
}
|
|
13
17
|
function isWebMcpAvailable() {
|
|
14
18
|
return getModelContext() !== null;
|
|
15
19
|
}
|
|
20
|
+
var EMPTY_TOOLS = [];
|
|
21
|
+
var EMPTY_LOCAL_TOOLS = [];
|
|
16
22
|
function WebMcpTools({
|
|
17
|
-
tools =
|
|
18
|
-
localTools =
|
|
23
|
+
tools = EMPTY_TOOLS,
|
|
24
|
+
localTools = EMPTY_LOCAL_TOOLS,
|
|
19
25
|
endpoint = "/api/mcp",
|
|
20
|
-
defer =
|
|
26
|
+
defer = false,
|
|
21
27
|
discover = true
|
|
22
28
|
}) {
|
|
23
|
-
const
|
|
29
|
+
const deferredReady = useDeferredActivation(defer);
|
|
30
|
+
const ready = !defer || deferredReady;
|
|
24
31
|
useEffect(() => {
|
|
25
32
|
if (!ready) return;
|
|
26
33
|
const modelContext = getModelContext();
|
|
@@ -113,7 +120,7 @@ function WebMcpTools({
|
|
|
113
120
|
await modelContext.provideContext({ tools: definitions });
|
|
114
121
|
}
|
|
115
122
|
} catch (error) {
|
|
116
|
-
if (process.env.NODE_ENV !== "production") {
|
|
123
|
+
if (!controller.signal.aborted && process.env.NODE_ENV !== "production") {
|
|
117
124
|
console.warn("[site-kit/mcp] WebMCP registration failed:", error);
|
|
118
125
|
}
|
|
119
126
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Experimental domain discovery from the MCP Server Cards discovery draft.
|
|
3
|
+
* The catalog points at the existing card; it never copies tools or identity
|
|
4
|
+
* metadata whose authoritative source is the server/card itself.
|
|
5
|
+
*
|
|
6
|
+
* @see https://github.com/modelcontextprotocol/ext-server-card/blob/main/docs/discovery.md
|
|
7
|
+
*/
|
|
8
|
+
import type { McpServerInfo } from './types';
|
|
9
|
+
import { MCP_SERVER_CARD_MEDIA_TYPE } from './serverCard';
|
|
10
|
+
export declare const MCP_AI_CATALOG_PATH = "/.well-known/ai-catalog.json";
|
|
11
|
+
export declare const MCP_AI_CATALOG_MEDIA_TYPE = "application/ai-catalog+json";
|
|
12
|
+
export interface McpAiCatalog {
|
|
13
|
+
specVersion: '1.0';
|
|
14
|
+
entries: {
|
|
15
|
+
identifier: string;
|
|
16
|
+
type: typeof MCP_SERVER_CARD_MEDIA_TYPE;
|
|
17
|
+
url: string;
|
|
18
|
+
}[];
|
|
19
|
+
}
|
|
20
|
+
export interface BuildMcpAiCatalogOptions {
|
|
21
|
+
/** Reuse the server identity; `io.example/weather` becomes `mcp:weather`. */
|
|
22
|
+
info: Pick<McpServerInfo, 'name'>;
|
|
23
|
+
/** Explicit public site origin. Never inferred from an untrusted Host header. */
|
|
24
|
+
baseUrl: string;
|
|
25
|
+
/** Origin-relative card path, e.g. `/api/mcp/server-card`. */
|
|
26
|
+
serverCardPath: string;
|
|
27
|
+
}
|
|
28
|
+
/** Build the small, experimental catalog without duplicating the server card. */
|
|
29
|
+
export declare function buildMcpAiCatalog(options: BuildMcpAiCatalogOptions): McpAiCatalog;
|
|
30
|
+
export interface McpAiCatalogHandlerOptions extends BuildMcpAiCatalogOptions {
|
|
31
|
+
/** Seconds for `Cache-Control: public, max-age=…` (default 3600). */
|
|
32
|
+
maxAge?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface McpDiscoveryRouteHandlers {
|
|
35
|
+
GET: (request?: Request) => Promise<Response>;
|
|
36
|
+
OPTIONS: () => Promise<Response>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Serve the experimental catalog at `MCP_AI_CATALOG_PATH`. This static-safe
|
|
40
|
+
* handler leaves conditional ETag requests to the host/CDN, like llms.txt and
|
|
41
|
+
* the default card handler; it never reads incoming request headers.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createMcpAiCatalogHandler(options: McpAiCatalogHandlerOptions): McpDiscoveryRouteHandlers;
|
|
44
|
+
/** Shared public response policy for catalogs and cards; not an auth surface. */
|
|
45
|
+
export declare function createMcpDiscoveryHandlers(document: unknown, options: {
|
|
46
|
+
mediaType: string;
|
|
47
|
+
maxAge?: number;
|
|
48
|
+
}): McpDiscoveryRouteHandlers;
|
package/dist/mcp/handlers.d.ts
CHANGED
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { MCP_SUPPORTED_PROTOCOL_VERSIONS, type DispatchOutcome, type JsonRpcRequest, type McpServerDefinition } from './protocol';
|
|
16
16
|
import type { McpToolCallRecord } from './types';
|
|
17
|
-
import { type BuildMcpServerCardOptions } from './serverCard';
|
|
17
|
+
import { type BuildMcpServerCardOptions, MCP_SERVER_CARD_MEDIA_TYPE } from './serverCard';
|
|
18
|
+
import { type McpDiscoveryRouteHandlers } from './discovery';
|
|
18
19
|
/**
|
|
19
20
|
* Undo the spec's Base64 sentinel wrapper: `=?base64?{b64}?=`.
|
|
20
21
|
* Values that aren't wrapped come back untouched.
|
|
@@ -74,18 +75,23 @@ export declare function createMcpHandler(options: McpHandlerOptions): McpRouteHa
|
|
|
74
75
|
export interface McpServerCardHandlerOptions extends BuildMcpServerCardOptions {
|
|
75
76
|
/** Seconds for `Cache-Control: public, max-age=…` (default 3600). */
|
|
76
77
|
maxAge?: number;
|
|
78
|
+
/**
|
|
79
|
+
* Use the draft media type for a new canonical card URL. Existing routes
|
|
80
|
+
* default to application/json for compatibility. Both remain static-safe.
|
|
81
|
+
*/
|
|
82
|
+
contentType?: 'application/json' | typeof MCP_SERVER_CARD_MEDIA_TYPE;
|
|
77
83
|
}
|
|
78
|
-
export interface McpServerCardRouteHandlers {
|
|
79
|
-
GET: () => Promise<Response>;
|
|
80
|
-
OPTIONS: () => Promise<Response>;
|
|
84
|
+
export interface McpServerCardRouteHandlers extends McpDiscoveryRouteHandlers {
|
|
81
85
|
}
|
|
82
86
|
/**
|
|
83
|
-
* Serve the
|
|
87
|
+
* Serve the server card. Keep both existing well-known paths available; the
|
|
88
|
+
* experimental AI Catalog can also point to an alias under the MCP endpoint.
|
|
84
89
|
*
|
|
85
|
-
* The handler never reads
|
|
90
|
+
* The handler never reads Request, so the route stays statically
|
|
86
91
|
* prerenderable — the same constraint the llms.txt handlers document, and for
|
|
87
92
|
* the same reason: touching `request.headers` opts the route into dynamic
|
|
88
|
-
* rendering
|
|
93
|
+
* rendering. ETag validation is left to the host/CDN. Canonical card routes
|
|
94
|
+
* can use `contentType: MCP_SERVER_CARD_MEDIA_TYPE`; legacy aliases keep JSON.
|
|
89
95
|
*
|
|
90
96
|
* @example
|
|
91
97
|
* ```ts
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*
|
|
9
9
|
* 1. Remote MCP endpoint — `createMcpHandler`. Streamable HTTP, dual-era
|
|
10
10
|
* (2026-07-28 modern + the `initialize` handshake older clients speak).
|
|
11
|
-
* 2. Discovery — `
|
|
12
|
-
*
|
|
11
|
+
* 2. Discovery — `createMcpAiCatalogHandler` (experimental draft) points to
|
|
12
|
+
* `createMcpServerCardHandler`; existing well-known card URLs still work.
|
|
13
13
|
* 3. In-page WebMCP — `<WebMcpTools>` (imperative) and
|
|
14
14
|
* `declarativeToolForm` (declarative), for browser-driving agents.
|
|
15
15
|
*
|
|
@@ -20,8 +20,10 @@ export type { JsonSchemaNode, JsonSchemaObject, McpContent, McpTextContent, McpR
|
|
|
20
20
|
export { defineMcpTool } from './types';
|
|
21
21
|
export { MCP_PROTOCOL_VERSION_MODERN, MCP_PROTOCOL_VERSIONS_LEGACY, MCP_SUPPORTED_PROTOCOL_VERSIONS, META_PROTOCOL_VERSION, META_CLIENT_INFO, META_SERVER_INFO, MCP_ERROR_HEADER_MISMATCH, MCP_ERROR_UNSUPPORTED_PROTOCOL_VERSION, JSONRPC_METHOD_NOT_FOUND, dispatch, toToolResult, toolErrorResult, toToolDescriptor, validateArgs, isSupportedVersion, } from './protocol';
|
|
22
22
|
export type { JsonRpcRequest, JsonRpcResponse, JsonRpcError, DispatchOutcome, DispatchOptions, McpServerDefinition, McpToolDescriptor, } from './protocol';
|
|
23
|
-
export { buildMcpServerCard, validateMcpServerCard, MCP_SERVER_CARD_SCHEMA, MCP_SERVER_CARD_PATH, MCP_SERVER_CARD_LEGACY_PATH, SITE_KIT_CARD_META_KEY, } from './serverCard';
|
|
23
|
+
export { buildMcpServerCard, validateMcpServerCard, MCP_SERVER_CARD_SCHEMA, MCP_SERVER_CARD_PATH, MCP_SERVER_CARD_LEGACY_PATH, MCP_SERVER_CARD_MEDIA_TYPE, SITE_KIT_CARD_META_KEY, } from './serverCard';
|
|
24
24
|
export type { McpServerCard, McpRemote, BuildMcpServerCardOptions, } from './serverCard';
|
|
25
|
+
export { buildMcpAiCatalog, createMcpAiCatalogHandler, MCP_AI_CATALOG_PATH, MCP_AI_CATALOG_MEDIA_TYPE, } from './discovery';
|
|
26
|
+
export type { McpAiCatalog, BuildMcpAiCatalogOptions, McpAiCatalogHandlerOptions, McpDiscoveryRouteHandlers, } from './discovery';
|
|
25
27
|
export { createMcpHandler, createMcpServerCardHandler, decodeHeaderValue, toolCallRecord, WEBMCP_SURFACE_HEADER, } from './handlers';
|
|
26
28
|
export type { McpHandlerOptions, McpRouteHandlers, McpServerCardHandlerOptions, McpServerCardRouteHandlers, } from './handlers';
|
|
27
29
|
export { declarativeToolForm, declarativeToolField } from './declarative';
|
package/dist/mcp/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import { MCP_SUPPORTED_PROTOCOL_VERSIONS, dispatch, errorOutcome, JSONRPC_INVALI
|
|
|
2
2
|
export { JSONRPC_METHOD_NOT_FOUND, MCP_ERROR_HEADER_MISMATCH, MCP_ERROR_UNSUPPORTED_PROTOCOL_VERSION, MCP_PROTOCOL_VERSIONS_LEGACY, MCP_PROTOCOL_VERSION_MODERN, MCP_SUPPORTED_PROTOCOL_VERSIONS, META_CLIENT_INFO, META_PROTOCOL_VERSION, META_SERVER_INFO, dispatch, isSupportedVersion, toToolDescriptor, toToolResult, toolErrorResult, validateArgs } from '../chunk-FYAB6CXS.js';
|
|
3
3
|
export { declarativeToolField, declarativeToolForm } from '../chunk-HW7B43E5.js';
|
|
4
4
|
import '../chunk-PKBMQBKP.js';
|
|
5
|
+
import { createHash } from 'crypto';
|
|
5
6
|
|
|
6
7
|
// src/mcp/types.ts
|
|
7
8
|
function defineMcpTool(tool) {
|
|
@@ -10,6 +11,7 @@ function defineMcpTool(tool) {
|
|
|
10
11
|
|
|
11
12
|
// src/mcp/serverCard.ts
|
|
12
13
|
var MCP_SERVER_CARD_SCHEMA = "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json";
|
|
14
|
+
var MCP_SERVER_CARD_MEDIA_TYPE = "application/mcp-server-card+json";
|
|
13
15
|
var MCP_SERVER_CARD_PATH = "/.well-known/mcp-server-card";
|
|
14
16
|
var MCP_SERVER_CARD_LEGACY_PATH = "/.well-known/mcp.json";
|
|
15
17
|
var SITE_KIT_CARD_META_KEY = "io.sonor.site-kit/tools";
|
|
@@ -70,6 +72,60 @@ function validateMcpServerCard(card) {
|
|
|
70
72
|
}
|
|
71
73
|
return problems;
|
|
72
74
|
}
|
|
75
|
+
var MCP_AI_CATALOG_PATH = "/.well-known/ai-catalog.json";
|
|
76
|
+
var MCP_AI_CATALOG_MEDIA_TYPE = "application/ai-catalog+json";
|
|
77
|
+
function buildMcpAiCatalog(options) {
|
|
78
|
+
const base = new URL(options.baseUrl);
|
|
79
|
+
if (!["http:", "https:"].includes(base.protocol) || base.username || base.password || base.search || base.hash || base.pathname !== "/") {
|
|
80
|
+
throw new Error("baseUrl must be an explicit HTTP(S) origin without credentials, query or fragment");
|
|
81
|
+
}
|
|
82
|
+
const name = /^[^/\s]+\/([^/\s]+)$/.exec(options.info.name)?.[1];
|
|
83
|
+
if (!name) {
|
|
84
|
+
throw new Error('info.name must have a namespace and server name, e.g. "io.example/weather"');
|
|
85
|
+
}
|
|
86
|
+
const path = options.serverCardPath;
|
|
87
|
+
if (!path || path.startsWith("//") || path.includes("\\") || /^[a-z][a-z\d+.-]*:/i.test(path)) {
|
|
88
|
+
throw new Error("serverCardPath must be an origin-relative path");
|
|
89
|
+
}
|
|
90
|
+
const cardUrl = new URL(path.startsWith("/") ? path : `/${path}`, base);
|
|
91
|
+
if (cardUrl.hash) throw new Error("serverCardPath must not include a fragment");
|
|
92
|
+
return {
|
|
93
|
+
specVersion: "1.0",
|
|
94
|
+
entries: [{
|
|
95
|
+
identifier: `urn:air:${base.hostname}:mcp:${encodeURIComponent(name)}`,
|
|
96
|
+
type: MCP_SERVER_CARD_MEDIA_TYPE,
|
|
97
|
+
url: cardUrl.href
|
|
98
|
+
}]
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function createMcpAiCatalogHandler(options) {
|
|
102
|
+
return createMcpDiscoveryHandlers(buildMcpAiCatalog(options), {
|
|
103
|
+
mediaType: MCP_AI_CATALOG_MEDIA_TYPE,
|
|
104
|
+
maxAge: options.maxAge
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function createMcpDiscoveryHandlers(document, options) {
|
|
108
|
+
const body = `${JSON.stringify(document, null, 2)}
|
|
109
|
+
`;
|
|
110
|
+
const etag = `W/"${createHash("sha256").update(body).digest("base64url")}"`;
|
|
111
|
+
const maxAge = options.maxAge ?? 3600;
|
|
112
|
+
if (!Number.isSafeInteger(maxAge) || maxAge < 0) {
|
|
113
|
+
throw new Error("maxAge must be a non-negative integer");
|
|
114
|
+
}
|
|
115
|
+
const headers = {
|
|
116
|
+
"Content-Type": options.mediaType,
|
|
117
|
+
"Cache-Control": `public, max-age=${maxAge}`,
|
|
118
|
+
ETag: etag,
|
|
119
|
+
"Access-Control-Allow-Origin": "*",
|
|
120
|
+
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
|
121
|
+
"Access-Control-Allow-Headers": "Accept, Content-Type, If-None-Match",
|
|
122
|
+
"Access-Control-Expose-Headers": "ETag"
|
|
123
|
+
};
|
|
124
|
+
return {
|
|
125
|
+
GET: async () => new Response(body, { status: 200, headers }),
|
|
126
|
+
OPTIONS: async () => new Response(null, { status: 204, headers })
|
|
127
|
+
};
|
|
128
|
+
}
|
|
73
129
|
|
|
74
130
|
// src/mcp/handlers.ts
|
|
75
131
|
var MCP_REQUEST_HEADERS = [
|
|
@@ -256,22 +312,10 @@ function createMcpHandler(options) {
|
|
|
256
312
|
return { POST, GET: methodNotAllowed, DELETE: methodNotAllowed, OPTIONS };
|
|
257
313
|
}
|
|
258
314
|
function createMcpServerCardHandler(options) {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
const headers = {
|
|
264
|
-
"Content-Type": "application/json",
|
|
265
|
-
"Cache-Control": `public, max-age=${maxAge}`,
|
|
266
|
-
// The card is a discovery document — it is meant to be fetched by anyone.
|
|
267
|
-
"Access-Control-Allow-Origin": "*",
|
|
268
|
-
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
|
269
|
-
"Access-Control-Allow-Headers": "Content-Type"
|
|
270
|
-
};
|
|
271
|
-
return {
|
|
272
|
-
GET: async () => new Response(body, { status: 200, headers }),
|
|
273
|
-
OPTIONS: async () => new Response(null, { status: 204, headers })
|
|
274
|
-
};
|
|
315
|
+
return createMcpDiscoveryHandlers(buildMcpServerCard(options), {
|
|
316
|
+
mediaType: options.contentType ?? "application/json",
|
|
317
|
+
maxAge: options.maxAge
|
|
318
|
+
});
|
|
275
319
|
}
|
|
276
320
|
|
|
277
|
-
export { MCP_SERVER_CARD_LEGACY_PATH, MCP_SERVER_CARD_PATH, MCP_SERVER_CARD_SCHEMA, SITE_KIT_CARD_META_KEY, WEBMCP_SURFACE_HEADER, buildMcpServerCard, createMcpHandler, createMcpServerCardHandler, decodeHeaderValue, defineMcpTool, toolCallRecord, validateMcpServerCard };
|
|
321
|
+
export { MCP_AI_CATALOG_MEDIA_TYPE, MCP_AI_CATALOG_PATH, MCP_SERVER_CARD_LEGACY_PATH, MCP_SERVER_CARD_MEDIA_TYPE, MCP_SERVER_CARD_PATH, MCP_SERVER_CARD_SCHEMA, SITE_KIT_CARD_META_KEY, WEBMCP_SURFACE_HEADER, buildMcpAiCatalog, buildMcpServerCard, createMcpAiCatalogHandler, createMcpHandler, createMcpServerCardHandler, decodeHeaderValue, defineMcpTool, toolCallRecord, validateMcpServerCard };
|
package/dist/mcp/serverCard.d.ts
CHANGED
|
@@ -11,16 +11,15 @@
|
|
|
11
11
|
* with enough identity attached that a human reviewing the connection knows
|
|
12
12
|
* what they're approving.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* URLs costs nothing, so `createMcpServerCardHandler` is mounted at both.
|
|
19
|
-
* `mcp-server-card` is the canonical one; `mcp.json` is compatibility.
|
|
14
|
+
* The existing well-known paths stay available for compatibility. The newer
|
|
15
|
+
* experimental discovery draft uses a domain AI Catalog pointing to a card
|
|
16
|
+
* URL, with `<streamable-http-url>/server-card` as its recommended location.
|
|
17
|
+
* Hosts can mount the same card handler there without changing the old URLs.
|
|
20
18
|
*/
|
|
21
19
|
import type { McpServerIcon, McpServerInfo, SiteKitMcpTool } from './types';
|
|
22
20
|
export declare const MCP_SERVER_CARD_SCHEMA = "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json";
|
|
23
|
-
|
|
21
|
+
export declare const MCP_SERVER_CARD_MEDIA_TYPE = "application/mcp-server-card+json";
|
|
22
|
+
/** Existing site-kit well-known path; retained for backward compatibility. */
|
|
24
23
|
export declare const MCP_SERVER_CARD_PATH = "/.well-known/mcp-server-card";
|
|
25
24
|
/** Superseded SEP-1649 path, still widely probed. */
|
|
26
25
|
export declare const MCP_SERVER_CARD_LEGACY_PATH = "/.well-known/mcp.json";
|
package/dist/mcp/sonor.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { toolErrorResult } from '../chunk-FYAB6CXS.js';
|
|
2
2
|
import { fetchReviews, fetchReviewStats } from '../chunk-EDYHROQ7.js';
|
|
3
3
|
import { getOfferings } from '../chunk-G3NHWMP5.js';
|
|
4
|
-
import { fetchBookingTypes, fetchAvailability } from '../chunk-
|
|
5
|
-
import { getLLMsData, getServices, getFAQItems, getPageSummaries } from '../chunk-
|
|
6
|
-
import { getFormConfig } from '../chunk-
|
|
7
|
-
import '../chunk-
|
|
4
|
+
import { fetchBookingTypes, fetchAvailability } from '../chunk-MHGAZ3LL.js';
|
|
5
|
+
import { getLLMsData, getServices, getFAQItems, getPageSummaries } from '../chunk-4BHRA7TI.js';
|
|
6
|
+
import { getFormConfig } from '../chunk-FUQTV5O6.js';
|
|
7
|
+
import '../chunk-PF64OEXC.js';
|
|
8
8
|
import '../chunk-YC7ELZS3.js';
|
|
9
9
|
import '../chunk-ZTLMPUO6.js';
|
|
10
10
|
import '../chunk-DXO6SBMD.js';
|
|
@@ -13,7 +13,7 @@ import { getAllArticles, getArticle } from '../chunk-PKGN32AU.js';
|
|
|
13
13
|
import '../chunk-Y3INC4QJ.js';
|
|
14
14
|
import '../chunk-QXMIKDOL.js';
|
|
15
15
|
import '../chunk-WMVK77ND.js';
|
|
16
|
-
import { resolveFetch } from '../chunk-
|
|
16
|
+
import { resolveFetch } from '../chunk-UAYAJPEP.js';
|
|
17
17
|
import '../chunk-NZ4RXN3G.js';
|
|
18
18
|
import '../chunk-VWWITFWM.js';
|
|
19
19
|
import '../chunk-MJP63SSS.js';
|
|
@@ -25,9 +25,9 @@ import '../chunk-C2FZBUSS.js';
|
|
|
25
25
|
import '../chunk-5SQK3D53.js';
|
|
26
26
|
import '../chunk-HW7B43E5.js';
|
|
27
27
|
import '../chunk-NJCTQH2P.js';
|
|
28
|
-
import '../chunk-
|
|
29
|
-
import '../chunk-
|
|
30
|
-
import { SITE_KIT_VERSION } from '../chunk-
|
|
28
|
+
import '../chunk-3E3PPSNR.js';
|
|
29
|
+
import '../chunk-GK7TV7EK.js';
|
|
30
|
+
import { SITE_KIT_VERSION } from '../chunk-KHQ5GD6T.js';
|
|
31
31
|
import '../chunk-PKBMQBKP.js';
|
|
32
32
|
import 'server-only';
|
|
33
33
|
import { after } from 'next/server.js';
|
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import React from 'react';
|
|
10
10
|
import type { TestimonialSectionProps } from './types';
|
|
11
|
-
export declare function TestimonialSection({ title, subtitle, autoplay, autoplayInterval, showRating, maxReviews, featuredOnly, service, className, }: TestimonialSectionProps): React.JSX.Element | null;
|
|
11
|
+
export declare function TestimonialSection({ title, subtitle, autoplay, autoplayInterval, showRating, showPhoto, maxReviews, featuredOnly, service, className, }: TestimonialSectionProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { VisualReviewCardProps, VisualReviewGalleryProps } from './types';
|
|
3
|
+
/** Static, server-renderable photo and review card. Review quotes are rendered verbatim. */
|
|
4
|
+
export declare function VisualReviewCard(props: VisualReviewCardProps): React.JSX.Element;
|
|
5
|
+
/** Responsive server-renderable gallery; reviews without photos keep their quote card. */
|
|
6
|
+
export declare function VisualReviewGallery({ reviews, title, subtitle, showRating, className }: VisualReviewGalleryProps): React.JSX.Element | null;
|
|
@@ -4,5 +4,6 @@
|
|
|
4
4
|
* Display client reviews and testimonials on your website
|
|
5
5
|
*/
|
|
6
6
|
export { TestimonialSection } from './TestimonialSection';
|
|
7
|
+
export { VisualReviewCard, VisualReviewGallery } from './VisualReviewCard';
|
|
7
8
|
export { fetchReviews, fetchReviewStats } from './api';
|
|
8
|
-
export type { Review, ReviewStats, TestimonialSectionProps } from './types';
|
|
9
|
+
export type { Review, ReviewPhoto, ReviewStats, TestimonialSectionProps, VisualReviewCardProps, VisualReviewGalleryProps } from './types';
|
package/dist/reputation/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export { TestimonialSection } from '../chunk-
|
|
1
|
+
export { TestimonialSection } from '../chunk-7HPZSWS4.js';
|
|
2
|
+
export { VisualReviewCard, VisualReviewGallery } from '../chunk-OD2ULW5Z.js';
|
|
3
|
+
import '../chunk-CAT235HY.js';
|
|
2
4
|
export { fetchReviewStats, fetchReviews } from '../chunk-EDYHROQ7.js';
|
|
3
5
|
import '../chunk-MH2DSGC6.js';
|
|
4
6
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @sonordev/site-kit/reputation/server - Server-safe
|
|
2
|
+
* @sonordev/site-kit/reputation/server - Server-safe review feed and visual cards
|
|
3
3
|
*
|
|
4
4
|
* Use this entry point from React Server Components or any server-side context.
|
|
5
5
|
* Importing from `./reputation` (which includes TestimonialSection) pulls in a
|
|
6
6
|
* client-tainted bundle that can't be called from RSC.
|
|
7
7
|
*/
|
|
8
8
|
export { fetchReviews, fetchReviewStats } from './api';
|
|
9
|
-
export
|
|
9
|
+
export { VisualReviewCard, VisualReviewGallery } from './VisualReviewCard';
|
|
10
|
+
export type { Review, ReviewPhoto, ReviewStats, TestimonialSectionProps, VisualReviewCardProps, VisualReviewGalleryProps } from './types';
|
|
@@ -8,11 +8,31 @@ export interface Review {
|
|
|
8
8
|
role?: string;
|
|
9
9
|
rating: number;
|
|
10
10
|
image?: string;
|
|
11
|
+
/** A business-supplied work/property photo. `image` remains the reviewer avatar. */
|
|
12
|
+
photo?: ReviewPhoto | null;
|
|
11
13
|
date?: string;
|
|
12
14
|
platform?: string;
|
|
13
15
|
isFeatured?: boolean;
|
|
14
16
|
serviceTags?: string[];
|
|
15
17
|
}
|
|
18
|
+
export interface ReviewPhoto {
|
|
19
|
+
fileId: string;
|
|
20
|
+
url: string;
|
|
21
|
+
altText: string;
|
|
22
|
+
caption: string;
|
|
23
|
+
}
|
|
24
|
+
export interface VisualReviewCardProps {
|
|
25
|
+
review: Review;
|
|
26
|
+
showRating?: boolean;
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface VisualReviewGalleryProps {
|
|
30
|
+
reviews: Review[];
|
|
31
|
+
title?: string;
|
|
32
|
+
subtitle?: string;
|
|
33
|
+
showRating?: boolean;
|
|
34
|
+
className?: string;
|
|
35
|
+
}
|
|
16
36
|
export interface ReviewStats {
|
|
17
37
|
total_reviews: number;
|
|
18
38
|
average_rating: number;
|
|
@@ -30,6 +50,8 @@ export interface TestimonialSectionProps {
|
|
|
30
50
|
autoplay?: boolean;
|
|
31
51
|
autoplayInterval?: number;
|
|
32
52
|
showRating?: boolean;
|
|
53
|
+
/** Show attached business photos above the quote. Defaults to true. */
|
|
54
|
+
showPhoto?: boolean;
|
|
33
55
|
maxReviews?: number;
|
|
34
56
|
featuredOnly?: boolean;
|
|
35
57
|
service?: string;
|
package/dist/revalidate/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createSeoRevalidationHandler } from '../chunk-
|
|
1
|
+
import { createSeoRevalidationHandler } from '../chunk-XA2BNW5M.js';
|
|
2
2
|
import '../chunk-XTRZGXB2.js';
|
|
3
3
|
export { SITE_CACHE_TAGS, SITE_REVALIDATE_PATH, isSiteRevalidatePong } from '../chunk-RYVDGXC2.js';
|
|
4
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-KHQ5GD6T.js';
|
|
5
5
|
import '../chunk-PKBMQBKP.js';
|
|
6
6
|
|
|
7
7
|
// src/revalidate/index.ts
|
package/dist/seo/client.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SitemapSync } from '../chunk-
|
|
2
|
+
export { SitemapSync } from '../chunk-D2RGEWHS.js';
|
|
3
3
|
import '../chunk-YVKRYQRG.js';
|
|
4
4
|
import '../chunk-43OCZ3JA.js';
|
|
5
5
|
import '../chunk-EKBEOXTH.js';
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-3E3PPSNR.js';
|
|
7
|
+
import '../chunk-GK7TV7EK.js';
|
|
8
|
+
import '../chunk-KHQ5GD6T.js';
|
|
9
9
|
import '../chunk-PKBMQBKP.js';
|
package/dist/seo/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export { ManagedNoScripts, ManagedScripts } from '../chunk-MVLMXC44.js';
|
|
|
2
2
|
import { pickManagedLlmSchemaForJsonLd } from '../chunk-NZ4RXN3G.js';
|
|
3
3
|
import { safeJsonLd } from '../chunk-4KZ6W3ZH.js';
|
|
4
4
|
import { withoutSchemaPlaceholders } from '../chunk-VWWITFWM.js';
|
|
5
|
-
export { SitemapSync } from '../chunk-
|
|
5
|
+
export { SitemapSync } from '../chunk-D2RGEWHS.js';
|
|
6
6
|
import { getManagedMetadata } from '../chunk-4YTYGG2C.js';
|
|
7
7
|
export { generateSitemap, getABVariant, getManagedMetadata, getManagedMetadataWithAB, getRedirect, getRobotsDirective, isIndexable } from '../chunk-4YTYGG2C.js';
|
|
8
8
|
import { getContentBlock, getSchemaMarkups, getSEOPageData, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities, pruneSchemaTypes } from '../chunk-662ILEZ6.js';
|
|
@@ -18,9 +18,9 @@ import '../chunk-FESKKJAS.js';
|
|
|
18
18
|
import '../chunk-A4CC4ZG3.js';
|
|
19
19
|
import '../chunk-43OCZ3JA.js';
|
|
20
20
|
import '../chunk-EKBEOXTH.js';
|
|
21
|
-
import '../chunk-
|
|
22
|
-
import '../chunk-
|
|
23
|
-
import '../chunk-
|
|
21
|
+
import '../chunk-3E3PPSNR.js';
|
|
22
|
+
import '../chunk-GK7TV7EK.js';
|
|
23
|
+
import '../chunk-KHQ5GD6T.js';
|
|
24
24
|
import '../chunk-PKBMQBKP.js';
|
|
25
25
|
import { Suspense } from 'react';
|
|
26
26
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
package/dist/seo/llms.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-
|
|
1
|
+
export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-5O62CER4.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-XA2BNW5M.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-
|
|
8
|
-
export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-
|
|
7
|
+
export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-ZTLU3BSW.js';
|
|
8
|
+
export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-4BHRA7TI.js';
|
|
9
9
|
import '../chunk-L5UOHS6E.js';
|
|
10
10
|
import '../chunk-WMVK77ND.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-UAYAJPEP.js';
|
|
12
12
|
export { LLMS_DISCLAIMER_MAX_LENGTH, LLMS_PUBLIC_SUMMARY_MAX_LENGTH, LLM_GEO_CONTRACT_VERSION, MANAGED_LLM_SCHEMA_KNOWN_KEYS, pickManagedLlmSchemaForJsonLd, sanitizeLlmsDisclaimerLine, sanitizeLlmsPublicSummary, sanitizePrimaryLanguageTag } from '../chunk-NZ4RXN3G.js';
|
|
13
13
|
import '../chunk-4KZ6W3ZH.js';
|
|
14
14
|
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-KHQ5GD6T.js';
|
|
19
19
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -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-OL4KQERZ.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.
|
package/dist/seo/sitemap.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-
|
|
1
|
+
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-4DJMJ4V5.js';
|
|
2
2
|
import '../chunk-Z22QVHT4.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-ZTLU3BSW.js';
|
|
4
|
+
import '../chunk-4BHRA7TI.js';
|
|
5
5
|
import '../chunk-L5UOHS6E.js';
|
|
6
6
|
import '../chunk-WMVK77ND.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-UAYAJPEP.js';
|
|
8
8
|
import '../chunk-NZ4RXN3G.js';
|
|
9
9
|
import '../chunk-MJP63SSS.js';
|
|
10
10
|
import '../chunk-ZEGVKVD5.js';
|
package/dist/server/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { resolveClientCredential } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { resolveClientCredential } from '../chunk-IE5SSOCN.js';
|
|
2
|
+
import '../chunk-UAYAJPEP.js';
|
|
3
3
|
export { requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch } from '../chunk-X6F6SO4S.js';
|
|
4
4
|
import '../chunk-MH2DSGC6.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-KHQ5GD6T.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -39,8 +39,7 @@
|
|
|
39
39
|
* realistic redeploy gap; marketing sites routinely go many months untouched.
|
|
40
40
|
*/
|
|
41
41
|
import 'server-only';
|
|
42
|
-
|
|
43
|
-
export { resolveFetch };
|
|
42
|
+
export { resolveFetch } from '../shared/fresh-fetch';
|
|
44
43
|
/**
|
|
45
44
|
* Next signals "this render must go dynamic" by THROWING (DynamicServerError,
|
|
46
45
|
* static-gen bailout, redirect/notFound digests, React's postpone). Those are
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* @sonordev/site-kit shared - Fetch outside Next's Data Cache
|
|
3
3
|
*
|
|
4
4
|
* Single source of truth for requests that must not touch Next's Data Cache
|
|
5
|
-
* and must not change how the calling route renders. Used by
|
|
6
|
-
* writers
|
|
7
|
-
*
|
|
5
|
+
* and must not change how the calling route renders. Used by build-time
|
|
6
|
+
* writers and the site credential mint. The mint uses trackedFreshFetch so
|
|
7
|
+
* Cache Components can await it without an uncached prerender bailout.
|
|
8
8
|
*
|
|
9
9
|
* Next.js monkey-patches `globalThis.fetch` so every call joins its Data Cache
|
|
10
10
|
* and static-generation tracking. That's wrong for these requests, and the
|
|
@@ -38,6 +38,12 @@ export declare function resolveFetch(): {
|
|
|
38
38
|
unpatched: boolean;
|
|
39
39
|
};
|
|
40
40
|
export declare const FRESH_FETCH_NONCE_HEADER = "x-sitekit-build-nonce";
|
|
41
|
+
/**
|
|
42
|
+
* A fresh request that Next can await during a Cache Components prerender.
|
|
43
|
+
* A unique cache key per request prevents reuse after a credential expires or
|
|
44
|
+
* across deploys. The caller owns memoization and concurrent-request deduping.
|
|
45
|
+
*/
|
|
46
|
+
export declare function trackedFreshFetch(input: string | URL, init?: RequestInit): Promise<Response>;
|
|
41
47
|
/**
|
|
42
48
|
* Fetch that never reads a response cached by an earlier build.
|
|
43
49
|
*
|
package/dist/shared/version.d.ts
CHANGED
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-AH4AXO4P.js';
|
|
3
|
+
export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-AH4AXO4P.js';
|
|
4
4
|
import '../chunk-PKBMQBKP.js';
|
|
5
5
|
import React, { useEffect } from 'react';
|
|
6
6
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
package/dist/sitemap/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-
|
|
1
|
+
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-4DJMJ4V5.js';
|
|
2
2
|
import '../chunk-Z22QVHT4.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-ZTLU3BSW.js';
|
|
4
|
+
import '../chunk-4BHRA7TI.js';
|
|
5
5
|
import '../chunk-L5UOHS6E.js';
|
|
6
6
|
import '../chunk-WMVK77ND.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-UAYAJPEP.js';
|
|
8
8
|
import '../chunk-NZ4RXN3G.js';
|
|
9
9
|
import '../chunk-MJP63SSS.js';
|
|
10
10
|
import '../chunk-ZEGVKVD5.js';
|