@jmp-technologies/analytics 0.1.19 → 0.1.20
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 +11 -0
- package/dist/astro/client.cjs +855 -0
- package/dist/astro/client.cjs.map +1 -0
- package/dist/astro/client.d.cts +27 -0
- package/dist/astro/client.d.ts +27 -0
- package/dist/astro/client.js +67 -0
- package/dist/astro/client.js.map +1 -0
- package/dist/astro/content.cjs +352 -0
- package/dist/astro/content.cjs.map +1 -0
- package/dist/astro/content.d.cts +33 -0
- package/dist/astro/content.d.ts +33 -0
- package/dist/astro/content.js +29 -0
- package/dist/astro/content.js.map +1 -0
- package/dist/astro/integration.cjs +189 -0
- package/dist/astro/integration.cjs.map +1 -0
- package/dist/astro/integration.d.cts +36 -0
- package/dist/astro/integration.d.ts +36 -0
- package/dist/astro/integration.js +35 -0
- package/dist/astro/integration.js.map +1 -0
- package/dist/astro/middleware.cjs +181 -0
- package/dist/astro/middleware.cjs.map +1 -0
- package/dist/astro/middleware.d.cts +19 -0
- package/dist/astro/middleware.d.ts +19 -0
- package/dist/astro/middleware.js +15 -0
- package/dist/astro/middleware.js.map +1 -0
- package/dist/astro/register.cjs +162 -0
- package/dist/astro/register.cjs.map +1 -0
- package/dist/astro/register.d.cts +7 -0
- package/dist/astro/register.d.ts +7 -0
- package/dist/astro/register.js +8 -0
- package/dist/astro/register.js.map +1 -0
- package/dist/{chunk-EPNF76VK.js → chunk-ALTSW5DB.js} +2 -2
- package/dist/{chunk-GB37RVJJ.js → chunk-GFCBZN6S.js} +90 -50
- package/dist/chunk-GFCBZN6S.js.map +1 -0
- package/dist/chunk-NZS4M3V3.js +19 -0
- package/dist/chunk-NZS4M3V3.js.map +1 -0
- package/dist/chunk-QIWGUF7V.js +171 -0
- package/dist/chunk-QIWGUF7V.js.map +1 -0
- package/dist/chunk-UDNKWFBM.js +19 -0
- package/dist/chunk-UDNKWFBM.js.map +1 -0
- package/dist/index.cjs +56 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/next/content.cjs +77 -34
- package/dist/next/content.cjs.map +1 -1
- package/dist/next/content.d.cts +14 -35
- package/dist/next/content.d.ts +14 -35
- package/dist/next/content.js +29 -159
- package/dist/next/content.js.map +1 -1
- package/dist/next/instrumentation.cjs +45 -14
- package/dist/next/instrumentation.cjs.map +1 -1
- package/dist/next/instrumentation.js +1 -1
- package/dist/next/middleware.cjs +50 -17
- package/dist/next/middleware.cjs.map +1 -1
- package/dist/next/middleware.d.cts +6 -9
- package/dist/next/middleware.d.ts +6 -9
- package/dist/next/middleware.js +3 -11
- package/dist/next/middleware.js.map +1 -1
- package/dist/next.cjs +47 -28
- package/dist/next.cjs.map +1 -1
- package/dist/next.js +2 -2
- package/dist/react.cjs +47 -28
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +2 -2
- package/dist/track-page-view-CoYo96n0.d.cts +9 -0
- package/dist/track-page-view-DAy0I0Vb.d.ts +9 -0
- package/docs/astro-integration.md +131 -0
- package/package.json +30 -2
- package/dist/chunk-GB37RVJJ.js.map +0 -1
- /package/dist/{chunk-EPNF76VK.js.map → chunk-ALTSW5DB.js.map} +0 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getJmpBlogPost,
|
|
3
|
+
getJmpBlogPosts,
|
|
4
|
+
getJmpContentConfig,
|
|
5
|
+
getJmpFaqs,
|
|
6
|
+
getJmpSiteDefinition,
|
|
7
|
+
getJmpSiteProfile,
|
|
8
|
+
getJmpTrustBundle
|
|
9
|
+
} from "./chunk-GFCBZN6S.js";
|
|
10
|
+
|
|
11
|
+
// src/content/site-content.ts
|
|
12
|
+
var DEFAULT_EXTRA_KEYS = {
|
|
13
|
+
founderName: ["founder-name", "founder_name"],
|
|
14
|
+
dashboardDemoUrl: ["dashboard-demo-url", "sample-dashboard-url"],
|
|
15
|
+
profilePhotoSrc: ["profile-photo-url", "profile_photo_url"],
|
|
16
|
+
hours: ["hours", "business-hours"],
|
|
17
|
+
serviceArea: ["service-area", "service_area", "service-area-text"]
|
|
18
|
+
};
|
|
19
|
+
function sortBlogPosts(posts) {
|
|
20
|
+
return [...posts].sort((a, b) => {
|
|
21
|
+
const da = a.published_at ?? a.updated_at;
|
|
22
|
+
const db = b.published_at ?? b.updated_at;
|
|
23
|
+
return db.localeCompare(da);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function sortFaqs(items) {
|
|
27
|
+
return [...items].sort((a, b) => a.sort_order - b.sort_order);
|
|
28
|
+
}
|
|
29
|
+
function readProfileExtra(profile, keys) {
|
|
30
|
+
for (const key of keys) {
|
|
31
|
+
const value = profile?.extras?.[key]?.trim();
|
|
32
|
+
if (value) {
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
function absoluteSiteAssetUrl(src) {
|
|
39
|
+
const trimmed = src.trim();
|
|
40
|
+
if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) {
|
|
41
|
+
return trimmed;
|
|
42
|
+
}
|
|
43
|
+
const siteUrl = getJmpSiteDefinition()?.siteUrl?.replace(/\/$/, "");
|
|
44
|
+
if (!siteUrl) {
|
|
45
|
+
return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
|
|
46
|
+
}
|
|
47
|
+
return `${siteUrl}${trimmed.startsWith("/") ? trimmed : `/${trimmed}`}`;
|
|
48
|
+
}
|
|
49
|
+
async function loadSiteProfile() {
|
|
50
|
+
const config = getJmpContentConfig();
|
|
51
|
+
if (!config) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
return await getJmpSiteProfile(config);
|
|
56
|
+
} catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function resolveSiteContact(profile) {
|
|
61
|
+
const site = getJmpSiteDefinition();
|
|
62
|
+
const fallback = site?.contactFallback ?? {};
|
|
63
|
+
const extraKeys = {
|
|
64
|
+
...DEFAULT_EXTRA_KEYS,
|
|
65
|
+
...site?.contactExtraKeys
|
|
66
|
+
};
|
|
67
|
+
const email = profile?.email?.trim() || fallback.email || "";
|
|
68
|
+
const linkedin = profile?.social?.linkedin?.trim() || fallback.linkedin || null;
|
|
69
|
+
const phone = profile?.phone?.trim() || fallback.phone || null;
|
|
70
|
+
return {
|
|
71
|
+
displayName: profile?.display_name?.trim() || profile?.name?.trim() || fallback.displayName || "",
|
|
72
|
+
founderName: readProfileExtra(profile, extraKeys.founderName ?? []) || fallback.founderName || "",
|
|
73
|
+
dashboardDemoUrl: readProfileExtra(profile, extraKeys.dashboardDemoUrl ?? []) || fallback.dashboardDemoUrl || "",
|
|
74
|
+
profilePhotoSrc: readProfileExtra(profile, extraKeys.profilePhotoSrc ?? []) || fallback.profilePhotoSrc || "",
|
|
75
|
+
email,
|
|
76
|
+
linkedin,
|
|
77
|
+
phone,
|
|
78
|
+
hours: readProfileExtra(profile, extraKeys.hours ?? []) || fallback.hours || null,
|
|
79
|
+
serviceArea: readProfileExtra(profile, extraKeys.serviceArea ?? []) || fallback.serviceArea || null,
|
|
80
|
+
privacyUrl: profile?.legal?.privacy_policy_url?.trim() || fallback.privacyUrl || "/privacy",
|
|
81
|
+
termsUrl: profile?.legal?.terms_url?.trim() || fallback.termsUrl || "/terms",
|
|
82
|
+
cta: {
|
|
83
|
+
label: profile?.cta?.label?.trim() || null,
|
|
84
|
+
url: profile?.cta?.url?.trim() || null
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async function getResolvedSiteContact() {
|
|
89
|
+
const profile = await loadSiteProfile();
|
|
90
|
+
return resolveSiteContact(profile);
|
|
91
|
+
}
|
|
92
|
+
async function loadBlogPosts() {
|
|
93
|
+
const c = getJmpContentConfig();
|
|
94
|
+
if (!c) {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const posts = await getJmpBlogPosts(c);
|
|
99
|
+
return sortBlogPosts(posts);
|
|
100
|
+
} catch {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function loadBlogPost(slug) {
|
|
105
|
+
const c = getJmpContentConfig();
|
|
106
|
+
if (!c) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
return await getJmpBlogPost(c, slug);
|
|
111
|
+
} catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async function loadFaqs() {
|
|
116
|
+
const c = getJmpContentConfig();
|
|
117
|
+
if (!c) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
const faqs = await getJmpFaqs(c);
|
|
122
|
+
return sortFaqs(faqs);
|
|
123
|
+
} catch {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function loadFaqBySlug(slug) {
|
|
128
|
+
const normalized = slug.trim();
|
|
129
|
+
if (!normalized) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
const items = await loadFaqs();
|
|
133
|
+
return items.find((item) => item.slug === normalized || item.id === normalized) ?? null;
|
|
134
|
+
}
|
|
135
|
+
async function loadTrustBundle() {
|
|
136
|
+
const c = getJmpContentConfig();
|
|
137
|
+
if (!c) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
return await getJmpTrustBundle(c);
|
|
142
|
+
} catch {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function filterFeaturedTrustQuotes(testimonials, placement, limit = 2) {
|
|
147
|
+
return testimonials.filter((item) => {
|
|
148
|
+
if (!item.featured) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
const bucket = item.placement?.trim().toLowerCase();
|
|
152
|
+
if (placement === "reviews") {
|
|
153
|
+
return bucket === "reviews";
|
|
154
|
+
}
|
|
155
|
+
return !bucket || bucket === "testimonials";
|
|
156
|
+
}).sort((a, b) => a.sort_order - b.sort_order).slice(0, limit);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export {
|
|
160
|
+
absoluteSiteAssetUrl,
|
|
161
|
+
loadSiteProfile,
|
|
162
|
+
resolveSiteContact,
|
|
163
|
+
getResolvedSiteContact,
|
|
164
|
+
loadBlogPosts,
|
|
165
|
+
loadBlogPost,
|
|
166
|
+
loadFaqs,
|
|
167
|
+
loadFaqBySlug,
|
|
168
|
+
loadTrustBundle,
|
|
169
|
+
filterFeaturedTrustQuotes
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=chunk-QIWGUF7V.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/content/site-content.ts"],"sourcesContent":["import {\n getJmpBlogPost,\n getJmpBlogPosts,\n getJmpFaqs,\n getJmpSiteProfile,\n getJmpTrustBundle,\n type JmpBlogPost,\n type JmpFaqItem,\n type JmpSiteProfile,\n type JmpTestimonial,\n type JmpTrustBundle,\n} from \"../index\"\nimport { getJmpContentConfig, getJmpSiteDefinition } from \"../site-config\"\n\nexport type {\n JmpBlogPost,\n JmpFaqItem,\n JmpSiteProfile,\n JmpTestimonial,\n JmpTrustBundle,\n}\n\nexport { getJmpContentConfig } from \"../site-config\"\n\nexport type ResolvedSiteContact = {\n displayName: string\n email: string\n founderName: string\n dashboardDemoUrl: string\n profilePhotoSrc: string\n linkedin: string | null\n phone: string | null\n hours: string | null\n serviceArea: string | null\n privacyUrl: string\n termsUrl: string\n cta: { label: string | null; url: string | null }\n}\n\nconst DEFAULT_EXTRA_KEYS = {\n founderName: [\"founder-name\", \"founder_name\"],\n dashboardDemoUrl: [\"dashboard-demo-url\", \"sample-dashboard-url\"],\n profilePhotoSrc: [\"profile-photo-url\", \"profile_photo_url\"],\n hours: [\"hours\", \"business-hours\"],\n serviceArea: [\"service-area\", \"service_area\", \"service-area-text\"],\n} as const\n\nfunction sortBlogPosts(posts: JmpBlogPost[]): JmpBlogPost[] {\n return [...posts].sort((a, b) => {\n const da = a.published_at ?? a.updated_at\n const db = b.published_at ?? b.updated_at\n return db.localeCompare(da)\n })\n}\n\nfunction sortFaqs(items: JmpFaqItem[]): JmpFaqItem[] {\n return [...items].sort((a, b) => a.sort_order - b.sort_order)\n}\n\nfunction readProfileExtra(\n profile: JmpSiteProfile | null,\n keys: readonly string[],\n): string | null {\n for (const key of keys) {\n const value = profile?.extras?.[key]?.trim()\n if (value) {\n return value\n }\n }\n return null\n}\n\n/** Resolve a path or URL against {@link defineJmpSite}'s `siteUrl`. */\nexport function absoluteSiteAssetUrl(src: string): string {\n const trimmed = src.trim()\n if (trimmed.startsWith(\"http://\") || trimmed.startsWith(\"https://\")) {\n return trimmed\n }\n const siteUrl = getJmpSiteDefinition()?.siteUrl?.replace(/\\/$/, \"\")\n if (!siteUrl) {\n return trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`\n }\n return `${siteUrl}${trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`}`\n}\n\nexport async function loadSiteProfile(): Promise<JmpSiteProfile | null> {\n const config = getJmpContentConfig()\n if (!config) {\n return null\n }\n try {\n return await getJmpSiteProfile(config)\n } catch {\n return null\n }\n}\n\nexport function resolveSiteContact(profile: JmpSiteProfile | null): ResolvedSiteContact {\n const site = getJmpSiteDefinition()\n const fallback = site?.contactFallback ?? {}\n const extraKeys = {\n ...DEFAULT_EXTRA_KEYS,\n ...site?.contactExtraKeys,\n }\n\n const email = profile?.email?.trim() || fallback.email || \"\"\n const linkedin =\n profile?.social?.linkedin?.trim() || fallback.linkedin || null\n const phone = profile?.phone?.trim() || fallback.phone || null\n\n return {\n displayName:\n profile?.display_name?.trim() ||\n profile?.name?.trim() ||\n fallback.displayName ||\n \"\",\n founderName:\n readProfileExtra(profile, extraKeys.founderName ?? []) ||\n fallback.founderName ||\n \"\",\n dashboardDemoUrl:\n readProfileExtra(profile, extraKeys.dashboardDemoUrl ?? []) ||\n fallback.dashboardDemoUrl ||\n \"\",\n profilePhotoSrc:\n readProfileExtra(profile, extraKeys.profilePhotoSrc ?? []) ||\n fallback.profilePhotoSrc ||\n \"\",\n email,\n linkedin,\n phone,\n hours:\n readProfileExtra(profile, extraKeys.hours ?? []) || fallback.hours || null,\n serviceArea:\n readProfileExtra(profile, extraKeys.serviceArea ?? []) ||\n fallback.serviceArea ||\n null,\n privacyUrl: profile?.legal?.privacy_policy_url?.trim() || fallback.privacyUrl || \"/privacy\",\n termsUrl: profile?.legal?.terms_url?.trim() || fallback.termsUrl || \"/terms\",\n cta: {\n label: profile?.cta?.label?.trim() || null,\n url: profile?.cta?.url?.trim() || null,\n },\n }\n}\n\nexport async function getResolvedSiteContact(): Promise<ResolvedSiteContact> {\n const profile = await loadSiteProfile()\n return resolveSiteContact(profile)\n}\n\nexport async function loadBlogPosts(): Promise<JmpBlogPost[]> {\n const c = getJmpContentConfig()\n if (!c) {\n return []\n }\n try {\n const posts = await getJmpBlogPosts(c)\n return sortBlogPosts(posts)\n } catch {\n return []\n }\n}\n\nexport async function loadBlogPost(slug: string): Promise<JmpBlogPost | null> {\n const c = getJmpContentConfig()\n if (!c) {\n return null\n }\n try {\n return await getJmpBlogPost(c, slug)\n } catch {\n return null\n }\n}\n\nexport async function loadFaqs(): Promise<JmpFaqItem[]> {\n const c = getJmpContentConfig()\n if (!c) {\n return []\n }\n try {\n const faqs = await getJmpFaqs(c)\n return sortFaqs(faqs)\n } catch {\n return []\n }\n}\n\nexport async function loadFaqBySlug(slug: string): Promise<JmpFaqItem | null> {\n const normalized = slug.trim()\n if (!normalized) {\n return null\n }\n const items = await loadFaqs()\n return (\n items.find((item) => item.slug === normalized || item.id === normalized) ?? null\n )\n}\n\nexport async function loadTrustBundle(): Promise<JmpTrustBundle | null> {\n const c = getJmpContentConfig()\n if (!c) {\n return null\n }\n try {\n return await getJmpTrustBundle(c)\n } catch {\n return null\n }\n}\n\nexport function filterFeaturedTrustQuotes(\n testimonials: JmpTestimonial[],\n placement: \"testimonials\" | \"reviews\",\n limit = 2,\n): JmpTestimonial[] {\n return testimonials\n .filter((item) => {\n if (!item.featured) {\n return false\n }\n const bucket = item.placement?.trim().toLowerCase()\n if (placement === \"reviews\") {\n return bucket === \"reviews\"\n }\n return !bucket || bucket === \"testimonials\"\n })\n .sort((a, b) => a.sort_order - b.sort_order)\n .slice(0, limit)\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getJmpContentConfig,
|
|
3
|
+
registerJmpContentWrappers
|
|
4
|
+
} from "./chunk-GFCBZN6S.js";
|
|
5
|
+
|
|
6
|
+
// src/astro/register.ts
|
|
7
|
+
async function registerJmpAstroContent() {
|
|
8
|
+
const config = getJmpContentConfig();
|
|
9
|
+
if (!config) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
await registerJmpContentWrappers(config).catch(() => {
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
registerJmpAstroContent
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=chunk-UDNKWFBM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/astro/register.ts"],"sourcesContent":["import { registerJmpContentWrappers } from \"../index\"\nimport { getJmpContentConfig } from \"../site-config\"\n\n/**\n * Register content wrappers with the dashboard (call once per build).\n * Import `./jmp.config` in `astro.config.mjs` before calling this, or use {@link jmpAnalytics} integration.\n */\nexport async function registerJmpAstroContent(): Promise<void> {\n const config = getJmpContentConfig()\n if (!config) {\n return\n }\n await registerJmpContentWrappers(config).catch(() => {})\n}\n"],"mappings":";;;;;;AAOA,eAAsB,0BAAyC;AAC7D,QAAM,SAAS,oBAAoB;AACnC,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AACA,QAAM,2BAA2B,MAAM,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AACzD;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -312,19 +312,49 @@ function classifyContactHref(href) {
|
|
|
312
312
|
return null;
|
|
313
313
|
}
|
|
314
314
|
|
|
315
|
-
// src/
|
|
316
|
-
|
|
317
|
-
function readNextPublicEnv(key) {
|
|
315
|
+
// src/env-public.ts
|
|
316
|
+
function readProcessEnv(name) {
|
|
318
317
|
if (typeof process === "undefined" || !process.env) return void 0;
|
|
319
|
-
const v =
|
|
318
|
+
const v = process.env[name];
|
|
320
319
|
return typeof v === "string" && v.length > 0 ? v : void 0;
|
|
321
320
|
}
|
|
322
|
-
function
|
|
323
|
-
const
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
return
|
|
321
|
+
function firstDefined(...values) {
|
|
322
|
+
for (const v of values) {
|
|
323
|
+
if (v) return v;
|
|
324
|
+
}
|
|
325
|
+
return void 0;
|
|
326
|
+
}
|
|
327
|
+
function readJmpPublicEnvFromProcess(overrides) {
|
|
328
|
+
const analyticsUrl = firstDefined(
|
|
329
|
+
overrides?.analyticsUrl,
|
|
330
|
+
readProcessEnv("NEXT_PUBLIC_JMP_ANALYTICS_URL"),
|
|
331
|
+
readProcessEnv("PUBLIC_JMP_ANALYTICS_URL")
|
|
332
|
+
);
|
|
333
|
+
const trackingKey = firstDefined(
|
|
334
|
+
overrides?.trackingKey,
|
|
335
|
+
readProcessEnv("NEXT_PUBLIC_JMP_TRACKING_KEY"),
|
|
336
|
+
readProcessEnv("PUBLIC_JMP_TRACKING_KEY")
|
|
337
|
+
);
|
|
338
|
+
const requireConsentRaw = firstDefined(
|
|
339
|
+
overrides?.requireConsent !== void 0 ? String(overrides.requireConsent) : void 0,
|
|
340
|
+
readProcessEnv("NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT"),
|
|
341
|
+
readProcessEnv("PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT")
|
|
342
|
+
);
|
|
343
|
+
const autoContactRaw = firstDefined(
|
|
344
|
+
overrides?.autoContactLinks !== void 0 ? String(overrides.autoContactLinks) : void 0,
|
|
345
|
+
readProcessEnv("NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS"),
|
|
346
|
+
readProcessEnv("PUBLIC_JMP_AUTO_CONTACT_LINKS")
|
|
347
|
+
);
|
|
348
|
+
return {
|
|
349
|
+
analyticsUrl,
|
|
350
|
+
trackingKey,
|
|
351
|
+
requireConsent: requireConsentRaw === "true",
|
|
352
|
+
autoContactLinks: autoContactRaw === "true"
|
|
353
|
+
};
|
|
327
354
|
}
|
|
355
|
+
|
|
356
|
+
// src/site-config.ts
|
|
357
|
+
var registeredSite = null;
|
|
328
358
|
function defineJmpSite(definition) {
|
|
329
359
|
registeredSite = definition;
|
|
330
360
|
return definition;
|
|
@@ -333,19 +363,20 @@ function getJmpSiteDefinition() {
|
|
|
333
363
|
return registeredSite;
|
|
334
364
|
}
|
|
335
365
|
function getJmpContentConfig() {
|
|
336
|
-
const
|
|
337
|
-
if (!
|
|
366
|
+
const { analyticsUrl, trackingKey } = readJmpPublicEnvFromProcess();
|
|
367
|
+
if (!analyticsUrl || !trackingKey) {
|
|
338
368
|
return null;
|
|
339
369
|
}
|
|
340
370
|
const site = getJmpSiteDefinition();
|
|
341
371
|
return {
|
|
342
|
-
|
|
343
|
-
|
|
372
|
+
baseUrl: analyticsUrl,
|
|
373
|
+
trackingKey,
|
|
374
|
+
contentWrappers: site?.contentWrappers ?? void 0
|
|
344
375
|
};
|
|
345
376
|
}
|
|
346
377
|
|
|
347
378
|
// src/index.ts
|
|
348
|
-
var JMP_ANALYTICS_SDK_VERSION = "0.1.
|
|
379
|
+
var JMP_ANALYTICS_SDK_VERSION = "0.1.20";
|
|
349
380
|
var JMP_TRACKING_CONSENT_STORAGE_KEY = "jmp_analytics_consent_v1";
|
|
350
381
|
var moduleTrackingConsentGranted = true;
|
|
351
382
|
var trackingConsentListeners = /* @__PURE__ */ new Set();
|
|
@@ -1031,50 +1062,26 @@ async function getContentText(config, path) {
|
|
|
1031
1062
|
return text;
|
|
1032
1063
|
}
|
|
1033
1064
|
var DEFAULT_JMP_BROWSER_PAGE_VIEW_DEDUPE_MS = 800;
|
|
1034
|
-
function readNextPublicEnv2(key) {
|
|
1035
|
-
if (typeof process === "undefined" || !process.env) return void 0;
|
|
1036
|
-
let v;
|
|
1037
|
-
switch (key) {
|
|
1038
|
-
case "NEXT_PUBLIC_JMP_ANALYTICS_URL":
|
|
1039
|
-
v = process.env.NEXT_PUBLIC_JMP_ANALYTICS_URL;
|
|
1040
|
-
break;
|
|
1041
|
-
case "NEXT_PUBLIC_JMP_TRACKING_KEY":
|
|
1042
|
-
v = process.env.NEXT_PUBLIC_JMP_TRACKING_KEY;
|
|
1043
|
-
break;
|
|
1044
|
-
case "NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT":
|
|
1045
|
-
v = process.env.NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT;
|
|
1046
|
-
break;
|
|
1047
|
-
case "NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS":
|
|
1048
|
-
v = process.env.NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS;
|
|
1049
|
-
break;
|
|
1050
|
-
}
|
|
1051
|
-
return typeof v === "string" && v.length > 0 ? v : void 0;
|
|
1052
|
-
}
|
|
1053
1065
|
function getJmpBrowserAnalyticsConfigFromEnv(overrides) {
|
|
1054
|
-
const
|
|
1055
|
-
|
|
1056
|
-
if (!baseUrl || !trackingKey) return null;
|
|
1057
|
-
const requireConsentFromEnv = readNextPublicEnv2("NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT") === "true";
|
|
1058
|
-
const autoTrackContactLinksFromEnv = readNextPublicEnv2("NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS") === "true";
|
|
1066
|
+
const pub = readJmpPublicEnvFromProcess();
|
|
1067
|
+
if (!pub.analyticsUrl || !pub.trackingKey) return null;
|
|
1059
1068
|
return {
|
|
1060
|
-
baseUrl,
|
|
1061
|
-
trackingKey,
|
|
1069
|
+
baseUrl: pub.analyticsUrl,
|
|
1070
|
+
trackingKey: pub.trackingKey,
|
|
1062
1071
|
pageViewDedupeMs: DEFAULT_JMP_BROWSER_PAGE_VIEW_DEDUPE_MS,
|
|
1063
1072
|
...overrides,
|
|
1064
|
-
requireConsent: overrides?.requireConsent ??
|
|
1065
|
-
autoTrackContactLinks: overrides?.autoTrackContactLinks ??
|
|
1073
|
+
requireConsent: overrides?.requireConsent ?? pub.requireConsent,
|
|
1074
|
+
autoTrackContactLinks: overrides?.autoTrackContactLinks ?? pub.autoContactLinks
|
|
1066
1075
|
};
|
|
1067
1076
|
}
|
|
1068
1077
|
function getJmpServerContentConfigFromEnv(overrides) {
|
|
1069
|
-
const
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
return { baseUrl, trackingKey, ...overrides };
|
|
1078
|
+
const pub = readJmpPublicEnvFromProcess();
|
|
1079
|
+
if (!pub.analyticsUrl || !pub.trackingKey) return null;
|
|
1080
|
+
return { baseUrl: pub.analyticsUrl, trackingKey: pub.trackingKey, ...overrides };
|
|
1073
1081
|
}
|
|
1074
1082
|
function isJmpBrowserAnalyticsEnvConfigured() {
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
);
|
|
1083
|
+
const pub = readJmpPublicEnvFromProcess();
|
|
1084
|
+
return Boolean(pub.analyticsUrl && pub.trackingKey);
|
|
1078
1085
|
}
|
|
1079
1086
|
function isJmpServerContentEnvConfigured() {
|
|
1080
1087
|
return isJmpBrowserAnalyticsEnvConfigured();
|