@jmp-technologies/analytics 0.1.39 → 0.1.40
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/README.md +6 -2
- package/ai-crawler-agents.json +63 -0
- package/dist/astro/client.cjs +115 -3
- package/dist/astro/client.cjs.map +1 -1
- package/dist/astro/client.d.cts +2 -2
- package/dist/astro/client.d.ts +2 -2
- package/dist/astro/client.js +1 -1
- package/dist/astro/content.cjs +115 -3
- package/dist/astro/content.cjs.map +1 -1
- package/dist/astro/content.d.cts +3 -3
- package/dist/astro/content.d.ts +3 -3
- package/dist/astro/content.js +2 -2
- package/dist/astro/integration.cjs +115 -3
- package/dist/astro/integration.cjs.map +1 -1
- package/dist/astro/integration.js +2 -2
- package/dist/astro/middleware.d.cts +2 -2
- package/dist/astro/middleware.d.ts +2 -2
- package/dist/astro/register.cjs +115 -3
- package/dist/astro/register.cjs.map +1 -1
- package/dist/astro/register.js +2 -2
- package/dist/{chunk-M66PHSBO.js → chunk-34LFIP3R.js} +2 -2
- package/dist/{chunk-BXPMVR7M.js → chunk-BRLCGVFJ.js} +2 -2
- package/dist/{chunk-OCIOQIE4.js → chunk-IY6Y636W.js} +2 -2
- package/dist/{chunk-XAEWXWSP.js → chunk-JC3G4XNR.js} +182 -4
- package/dist/chunk-JC3G4XNR.js.map +1 -0
- package/dist/{chunk-JJ3JP3RV.js → chunk-VSZRQSUN.js} +2 -2
- package/dist/{create-jmp-analytics-C1IH32ZF.d.cts → create-jmp-analytics-B7VqQJca.d.cts} +1 -1
- package/dist/{create-jmp-analytics-CjVYSmPJ.d.ts → create-jmp-analytics-BGt16QGY.d.ts} +1 -1
- package/dist/index.cjs +187 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -6
- package/dist/index.d.ts +30 -6
- package/dist/index.js +13 -1
- package/dist/next/content.cjs +115 -3
- package/dist/next/content.cjs.map +1 -1
- package/dist/next/content.d.cts +2 -2
- package/dist/next/content.d.ts +2 -2
- package/dist/next/content.js +2 -2
- package/dist/next/instrumentation.cjs +115 -3
- package/dist/next/instrumentation.cjs.map +1 -1
- package/dist/next/instrumentation.js +1 -1
- package/dist/next/landing-pages.cjs +115 -3
- package/dist/next/landing-pages.cjs.map +1 -1
- package/dist/next/landing-pages.d.cts +2 -2
- package/dist/next/landing-pages.d.ts +2 -2
- package/dist/next/landing-pages.js +2 -2
- package/dist/next/locations.cjs +116 -4
- package/dist/next/locations.cjs.map +1 -1
- package/dist/next/locations.d.cts +3 -3
- package/dist/next/locations.d.ts +3 -3
- package/dist/next/locations.js +3 -3
- package/dist/next/locations.js.map +1 -1
- package/dist/next/middleware.cjs.map +1 -1
- package/dist/next/middleware.d.cts +2 -2
- package/dist/next/middleware.d.ts +2 -2
- package/dist/next/middleware.js.map +1 -1
- package/dist/next/site-root-server.cjs +115 -3
- package/dist/next/site-root-server.cjs.map +1 -1
- package/dist/next/site-root-server.d.cts +1 -1
- package/dist/next/site-root-server.d.ts +1 -1
- package/dist/next/site-root-server.js +3 -3
- package/dist/next/site-root-server.js.map +1 -1
- package/dist/next.cjs +115 -3
- package/dist/next.cjs.map +1 -1
- package/dist/next.d.cts +3 -3
- package/dist/next.d.ts +3 -3
- package/dist/next.js +3 -3
- package/dist/react.cjs +115 -3
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +2 -2
- package/dist/{site-config-BN6Z2zIf.d.cts → site-config-CZl4PIbg.d.cts} +1 -1
- package/dist/{site-config-BEaYpZ3X.d.ts → site-config-Cq5K8hUp.d.ts} +1 -1
- package/dist/{track-page-view-B3OwUOYl.d.ts → track-page-view-BSlE0yI9.d.ts} +1 -1
- package/dist/{track-page-view-BeVjC-pV.d.cts → track-page-view-M9y_5WqT.d.cts} +1 -1
- package/dist/{types-uwXEaMD6.d.ts → types-DH_8sBu9.d.cts} +6 -0
- package/dist/{types-uwXEaMD6.d.cts → types-DH_8sBu9.d.ts} +6 -0
- package/dist/{utils-6a6lNKsg.d.ts → utils-C2JRomti.d.ts} +1 -1
- package/dist/{utils-Cbb3CO3i.d.cts → utils-JfjoqC-z.d.cts} +1 -1
- package/package.json +2 -1
- package/dist/chunk-XAEWXWSP.js.map +0 -1
- /package/dist/{chunk-M66PHSBO.js.map → chunk-34LFIP3R.js.map} +0 -0
- /package/dist/{chunk-BXPMVR7M.js.map → chunk-BRLCGVFJ.js.map} +0 -0
- /package/dist/{chunk-OCIOQIE4.js.map → chunk-IY6Y636W.js.map} +0 -0
- /package/dist/{chunk-JJ3JP3RV.js.map → chunk-VSZRQSUN.js.map} +0 -0
package/dist/index.cjs
CHANGED
|
@@ -20,12 +20,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
|
+
AI_CRAWLER_ROBOTS_USER_AGENTS: () => AI_CRAWLER_ROBOTS_USER_AGENTS,
|
|
23
24
|
BOOKING_LINK_HOSTS: () => BOOKING_LINK_HOSTS,
|
|
24
25
|
DEFAULT_JMP_BROWSER_PAGE_VIEW_DEDUPE_MS: () => DEFAULT_JMP_BROWSER_PAGE_VIEW_DEDUPE_MS,
|
|
26
|
+
JMP_AI_CRAWLER_WAF_USER_AGENTS: () => JMP_AI_CRAWLER_WAF_USER_AGENTS,
|
|
25
27
|
JMP_ANALYTICS_SDK_VERSION: () => JMP_ANALYTICS_SDK_VERSION,
|
|
26
28
|
JMP_CONTENT_CACHE_TAG: () => JMP_CONTENT_CACHE_TAG,
|
|
27
29
|
JMP_CONTENT_REVALIDATE_SECONDS: () => JMP_CONTENT_REVALIDATE_SECONDS,
|
|
28
30
|
JMP_TRACKING_CONSENT_STORAGE_KEY: () => JMP_TRACKING_CONSENT_STORAGE_KEY,
|
|
31
|
+
buildAiCrawlerRobotsTxt: () => buildAiCrawlerRobotsTxt,
|
|
29
32
|
buildLandingCaptureInlineScript: () => buildLandingCaptureInlineScript,
|
|
30
33
|
classifyContactHref: () => classifyContactHref,
|
|
31
34
|
createJmpAnalytics: () => createJmpAnalytics,
|
|
@@ -58,7 +61,10 @@ __export(index_exports, {
|
|
|
58
61
|
isJmpBrowserAnalyticsEnvConfigured: () => isJmpBrowserAnalyticsEnvConfigured,
|
|
59
62
|
isJmpServerContentEnvConfigured: () => isJmpServerContentEnvConfigured,
|
|
60
63
|
isJmpTrackingConsentGranted: () => isJmpTrackingConsentGranted,
|
|
64
|
+
jmpAiCrawlerVercelWafRoute: () => jmpAiCrawlerVercelWafRoute,
|
|
65
|
+
jmpAiCrawlerWafUserAgentPattern: () => jmpAiCrawlerWafUserAgentPattern,
|
|
61
66
|
markContentWrapper: () => markContentWrapper,
|
|
67
|
+
mergeJmpRobotsTxt: () => mergeJmpRobotsTxt,
|
|
62
68
|
normalizeJmpContentManifest: () => normalizeJmpContentManifest,
|
|
63
69
|
readJmpPublicEnvFromProcess: () => readJmpPublicEnvFromProcess,
|
|
64
70
|
registerJmpContentWrappers: () => registerJmpContentWrappers,
|
|
@@ -352,7 +358,7 @@ function extractMailtoTarget(href) {
|
|
|
352
358
|
}
|
|
353
359
|
|
|
354
360
|
// package.json
|
|
355
|
-
var version = "0.1.
|
|
361
|
+
var version = "0.1.40";
|
|
356
362
|
|
|
357
363
|
// src/constants.ts
|
|
358
364
|
var JMP_ANALYTICS_SDK_VERSION = version;
|
|
@@ -1252,7 +1258,50 @@ function normalizeManifestDefaults(defaults) {
|
|
|
1252
1258
|
function normalizeContact(contact) {
|
|
1253
1259
|
if (!contact || typeof contact !== "object") return null;
|
|
1254
1260
|
const extras = normalizeContactExtras(contact.extras);
|
|
1255
|
-
|
|
1261
|
+
const leadInbox = normalizeLeadInbox(contact.leadInbox);
|
|
1262
|
+
if (extras.length === 0 && !leadInbox) return null;
|
|
1263
|
+
return {
|
|
1264
|
+
...extras.length > 0 ? { extras } : {},
|
|
1265
|
+
...leadInbox ? { leadInbox } : {}
|
|
1266
|
+
};
|
|
1267
|
+
}
|
|
1268
|
+
function normalizeLeadInbox(raw) {
|
|
1269
|
+
if (!raw || typeof raw !== "object") return null;
|
|
1270
|
+
const list = normalizeInboxKeyList(raw.list, 8);
|
|
1271
|
+
const detail = normalizeInboxKeyList(raw.detail, 24);
|
|
1272
|
+
const labels = normalizeInboxLabels(raw.labels);
|
|
1273
|
+
if (!list && !detail && !labels) return null;
|
|
1274
|
+
return {
|
|
1275
|
+
...list ? { list } : {},
|
|
1276
|
+
...detail ? { detail } : {},
|
|
1277
|
+
...labels ? { labels } : {}
|
|
1278
|
+
};
|
|
1279
|
+
}
|
|
1280
|
+
function normalizeInboxKeyList(raw, max) {
|
|
1281
|
+
if (!Array.isArray(raw)) return void 0;
|
|
1282
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1283
|
+
const out = [];
|
|
1284
|
+
for (const item of raw) {
|
|
1285
|
+
if (typeof item !== "string" || out.length >= max) continue;
|
|
1286
|
+
const key = item.trim();
|
|
1287
|
+
const token = key.replace(/[^a-zA-Z0-9]+/g, "").toLowerCase();
|
|
1288
|
+
if (!key || !token || seen.has(token)) continue;
|
|
1289
|
+
seen.add(token);
|
|
1290
|
+
out.push(key);
|
|
1291
|
+
}
|
|
1292
|
+
return out.length > 0 ? out : void 0;
|
|
1293
|
+
}
|
|
1294
|
+
function normalizeInboxLabels(raw) {
|
|
1295
|
+
if (!raw || typeof raw !== "object") return void 0;
|
|
1296
|
+
const out = {};
|
|
1297
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
1298
|
+
if (typeof value !== "string") continue;
|
|
1299
|
+
const label = value.trim().slice(0, 60);
|
|
1300
|
+
const token = key.trim();
|
|
1301
|
+
if (!token || !label) continue;
|
|
1302
|
+
out[token] = label;
|
|
1303
|
+
}
|
|
1304
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
1256
1305
|
}
|
|
1257
1306
|
function normalizeContactExtras(extras) {
|
|
1258
1307
|
if (!Array.isArray(extras)) return [];
|
|
@@ -1282,7 +1331,7 @@ function inferWrapperSlotsFromManifest(manifest) {
|
|
|
1282
1331
|
slots.add(`trust.${block.section}`);
|
|
1283
1332
|
slots.add("trust");
|
|
1284
1333
|
}
|
|
1285
|
-
if (manifest?.contact?.extras?.length) {
|
|
1334
|
+
if (manifest?.contact?.extras?.length || manifest?.contact?.leadInbox) {
|
|
1286
1335
|
slots.add("contact");
|
|
1287
1336
|
}
|
|
1288
1337
|
return [...slots];
|
|
@@ -1828,6 +1877,135 @@ async function registerJmpContentWrappers(config) {
|
|
|
1828
1877
|
}
|
|
1829
1878
|
setContentWrapperSyncHandler(registerJmpContentWrappers);
|
|
1830
1879
|
|
|
1880
|
+
// ai-crawler-agents.json
|
|
1881
|
+
var ai_crawler_agents_default = {
|
|
1882
|
+
robotsUserAgents: [
|
|
1883
|
+
"GPTBot",
|
|
1884
|
+
"ChatGPT-User",
|
|
1885
|
+
"OAI-SearchBot",
|
|
1886
|
+
"OAI-AdsBot",
|
|
1887
|
+
"ClaudeBot",
|
|
1888
|
+
"Claude-User",
|
|
1889
|
+
"Claude-SearchBot",
|
|
1890
|
+
"Claude-Web",
|
|
1891
|
+
"PerplexityBot",
|
|
1892
|
+
"Perplexity-User",
|
|
1893
|
+
"Google-Extended",
|
|
1894
|
+
"GoogleOther",
|
|
1895
|
+
"GoogleOther-Image",
|
|
1896
|
+
"GoogleOther-Video",
|
|
1897
|
+
"Google-CloudVertexBot",
|
|
1898
|
+
"Meta-ExternalAgent",
|
|
1899
|
+
"Meta-ExternalFetcher",
|
|
1900
|
+
"FacebookBot",
|
|
1901
|
+
"Applebot",
|
|
1902
|
+
"Applebot-Extended",
|
|
1903
|
+
"CCBot",
|
|
1904
|
+
"Bytespider",
|
|
1905
|
+
"cohere-ai",
|
|
1906
|
+
"cohere-training-data-crawler",
|
|
1907
|
+
"YouBot",
|
|
1908
|
+
"MistralAI-User",
|
|
1909
|
+
"GrokBot",
|
|
1910
|
+
"Grok-DeepSearch",
|
|
1911
|
+
"xAI-Grok",
|
|
1912
|
+
"xAI-Bot"
|
|
1913
|
+
],
|
|
1914
|
+
wafUserAgents: [
|
|
1915
|
+
"GPTBot",
|
|
1916
|
+
"ChatGPT-User",
|
|
1917
|
+
"OAI-SearchBot",
|
|
1918
|
+
"OAI-AdsBot",
|
|
1919
|
+
"ClaudeBot",
|
|
1920
|
+
"Claude-User",
|
|
1921
|
+
"Claude-SearchBot",
|
|
1922
|
+
"Claude-Web",
|
|
1923
|
+
"PerplexityBot",
|
|
1924
|
+
"Perplexity-User",
|
|
1925
|
+
"Google-Extended",
|
|
1926
|
+
"GoogleOther",
|
|
1927
|
+
"Google-CloudVertexBot",
|
|
1928
|
+
"Meta-ExternalAgent",
|
|
1929
|
+
"Meta-ExternalFetcher",
|
|
1930
|
+
"FacebookBot",
|
|
1931
|
+
"Applebot-Extended",
|
|
1932
|
+
"CCBot",
|
|
1933
|
+
"Bytespider",
|
|
1934
|
+
"cohere-ai",
|
|
1935
|
+
"cohere-training-data-crawler",
|
|
1936
|
+
"YouBot",
|
|
1937
|
+
"MistralAI-User",
|
|
1938
|
+
"GrokBot",
|
|
1939
|
+
"Grok-DeepSearch",
|
|
1940
|
+
"xAI-Grok",
|
|
1941
|
+
"xAI-Bot"
|
|
1942
|
+
]
|
|
1943
|
+
};
|
|
1944
|
+
|
|
1945
|
+
// src/ai-crawlers.ts
|
|
1946
|
+
var AI_CRAWLER_ROBOTS_USER_AGENTS = ai_crawler_agents_default.robotsUserAgents;
|
|
1947
|
+
var JMP_AI_CRAWLER_WAF_USER_AGENTS = ai_crawler_agents_default.wafUserAgents;
|
|
1948
|
+
function buildAiCrawlerRobotsTxt(blockAiCrawlers) {
|
|
1949
|
+
if (!blockAiCrawlers) {
|
|
1950
|
+
return [
|
|
1951
|
+
"# JMP AI crawler policy",
|
|
1952
|
+
"# AI crawler blocking is disabled for this website.",
|
|
1953
|
+
""
|
|
1954
|
+
].join("\n");
|
|
1955
|
+
}
|
|
1956
|
+
return [
|
|
1957
|
+
"# JMP AI crawler policy",
|
|
1958
|
+
"# Blocks known AI training, answer, and fetch bots that honor robots.txt.",
|
|
1959
|
+
...AI_CRAWLER_ROBOTS_USER_AGENTS.flatMap((agent) => [
|
|
1960
|
+
`User-agent: ${agent}`,
|
|
1961
|
+
"Disallow: /",
|
|
1962
|
+
""
|
|
1963
|
+
])
|
|
1964
|
+
].join("\n");
|
|
1965
|
+
}
|
|
1966
|
+
function jmpAiCrawlerWafUserAgentPattern() {
|
|
1967
|
+
return JMP_AI_CRAWLER_WAF_USER_AGENTS.map(escapeRegExp).join("|");
|
|
1968
|
+
}
|
|
1969
|
+
function jmpAiCrawlerVercelWafRoute() {
|
|
1970
|
+
return {
|
|
1971
|
+
src: "/(.*)",
|
|
1972
|
+
has: [
|
|
1973
|
+
{
|
|
1974
|
+
type: "header",
|
|
1975
|
+
key: "user-agent",
|
|
1976
|
+
value: `(?i).*(${jmpAiCrawlerWafUserAgentPattern()}).*`
|
|
1977
|
+
}
|
|
1978
|
+
],
|
|
1979
|
+
mitigate: { action: "deny" }
|
|
1980
|
+
};
|
|
1981
|
+
}
|
|
1982
|
+
function mergeJmpRobotsTxt(jmpBody, options) {
|
|
1983
|
+
const trimmed = jmpBody.trim();
|
|
1984
|
+
const sitemapLine = `Sitemap: ${options.siteUrl.replace(/\/$/, "")}/sitemap.xml`;
|
|
1985
|
+
const hasSitemap = /(?:^|\n)\s*Sitemap:/i.test(trimmed);
|
|
1986
|
+
const prefixes = options.privatePathPrefixes ?? [];
|
|
1987
|
+
const missingDisallows = prefixes.filter(
|
|
1988
|
+
(prefix) => !trimmed.includes(`Disallow: ${prefix}`)
|
|
1989
|
+
);
|
|
1990
|
+
const parts = [trimmed];
|
|
1991
|
+
if (options.ensureAiCrawlerDisallows && !/User-agent:\s*GPTBot/i.test(trimmed)) {
|
|
1992
|
+
parts.unshift(buildAiCrawlerRobotsTxt(true).trim());
|
|
1993
|
+
}
|
|
1994
|
+
if (missingDisallows.length > 0) {
|
|
1995
|
+
const lines = prefixes.map((prefix) => `Disallow: ${prefix}`);
|
|
1996
|
+
parts.push(`User-agent: *
|
|
1997
|
+
${lines.join("\n")}`);
|
|
1998
|
+
}
|
|
1999
|
+
if (!hasSitemap) {
|
|
2000
|
+
parts.push(sitemapLine);
|
|
2001
|
+
}
|
|
2002
|
+
return `${parts.join("\n\n")}
|
|
2003
|
+
`;
|
|
2004
|
+
}
|
|
2005
|
+
function escapeRegExp(value) {
|
|
2006
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
2007
|
+
}
|
|
2008
|
+
|
|
1831
2009
|
// src/content/client.ts
|
|
1832
2010
|
function createJmpContentClient(config) {
|
|
1833
2011
|
return {
|
|
@@ -1893,12 +2071,15 @@ function createJmpContentClientFromServerEnv(overrides) {
|
|
|
1893
2071
|
}
|
|
1894
2072
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1895
2073
|
0 && (module.exports = {
|
|
2074
|
+
AI_CRAWLER_ROBOTS_USER_AGENTS,
|
|
1896
2075
|
BOOKING_LINK_HOSTS,
|
|
1897
2076
|
DEFAULT_JMP_BROWSER_PAGE_VIEW_DEDUPE_MS,
|
|
2077
|
+
JMP_AI_CRAWLER_WAF_USER_AGENTS,
|
|
1898
2078
|
JMP_ANALYTICS_SDK_VERSION,
|
|
1899
2079
|
JMP_CONTENT_CACHE_TAG,
|
|
1900
2080
|
JMP_CONTENT_REVALIDATE_SECONDS,
|
|
1901
2081
|
JMP_TRACKING_CONSENT_STORAGE_KEY,
|
|
2082
|
+
buildAiCrawlerRobotsTxt,
|
|
1902
2083
|
buildLandingCaptureInlineScript,
|
|
1903
2084
|
classifyContactHref,
|
|
1904
2085
|
createJmpAnalytics,
|
|
@@ -1931,7 +2112,10 @@ function createJmpContentClientFromServerEnv(overrides) {
|
|
|
1931
2112
|
isJmpBrowserAnalyticsEnvConfigured,
|
|
1932
2113
|
isJmpServerContentEnvConfigured,
|
|
1933
2114
|
isJmpTrackingConsentGranted,
|
|
2115
|
+
jmpAiCrawlerVercelWafRoute,
|
|
2116
|
+
jmpAiCrawlerWafUserAgentPattern,
|
|
1934
2117
|
markContentWrapper,
|
|
2118
|
+
mergeJmpRobotsTxt,
|
|
1935
2119
|
normalizeJmpContentManifest,
|
|
1936
2120
|
readJmpPublicEnvFromProcess,
|
|
1937
2121
|
registerJmpContentWrappers,
|