@jmp-technologies/analytics 0.1.36 → 0.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +1 -1
  2. package/dist/astro/client.cjs +83 -42
  3. package/dist/astro/client.cjs.map +1 -1
  4. package/dist/astro/client.d.cts +2 -2
  5. package/dist/astro/client.d.ts +2 -2
  6. package/dist/astro/client.js +2 -2
  7. package/dist/astro/content.cjs +137 -70
  8. package/dist/astro/content.cjs.map +1 -1
  9. package/dist/astro/content.d.cts +5 -4
  10. package/dist/astro/content.d.ts +5 -4
  11. package/dist/astro/content.js +5 -3
  12. package/dist/astro/integration.cjs +104 -66
  13. package/dist/astro/integration.cjs.map +1 -1
  14. package/dist/astro/integration.js +3 -3
  15. package/dist/astro/middleware.cjs +96 -66
  16. package/dist/astro/middleware.cjs.map +1 -1
  17. package/dist/astro/middleware.d.cts +2 -2
  18. package/dist/astro/middleware.d.ts +2 -2
  19. package/dist/astro/middleware.js +2 -2
  20. package/dist/astro/register.cjs +104 -66
  21. package/dist/astro/register.cjs.map +1 -1
  22. package/dist/astro/register.js +3 -3
  23. package/dist/{chunk-AIFJ7DVO.js → chunk-6WQMWPEY.js} +196 -105
  24. package/dist/chunk-6WQMWPEY.js.map +1 -0
  25. package/dist/{chunk-YFG3AQ35.js → chunk-EBU4DKHW.js} +47 -9
  26. package/dist/chunk-EBU4DKHW.js.map +1 -0
  27. package/dist/{chunk-AGGLRTUQ.js → chunk-JVFN7MF2.js} +2 -2
  28. package/dist/{chunk-3ZEMXII6.js → chunk-NCF3J4HV.js} +3 -3
  29. package/dist/{chunk-HFLU7HQE.js → chunk-ONIPLMOY.js} +2 -2
  30. package/dist/{chunk-NAQU6RAE.js → chunk-PQOTEV6O.js} +3 -3
  31. package/dist/{chunk-RNZTKIC6.js → chunk-WHUHCTBQ.js} +16 -3
  32. package/dist/chunk-WHUHCTBQ.js.map +1 -0
  33. package/dist/{create-jmp-analytics-Bz0-K0Af.d.cts → create-jmp-analytics-DMSXmVIH.d.cts} +1 -1
  34. package/dist/{create-jmp-analytics-DRjrlWUn.d.ts → create-jmp-analytics-JZ3pqNBQ.d.ts} +1 -1
  35. package/dist/index.cjs +145 -76
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.cts +10 -6
  38. package/dist/index.d.ts +10 -6
  39. package/dist/index.js +6 -2
  40. package/dist/next/content.cjs +138 -70
  41. package/dist/next/content.cjs.map +1 -1
  42. package/dist/next/content.d.cts +5 -4
  43. package/dist/next/content.d.ts +5 -4
  44. package/dist/next/content.js +6 -3
  45. package/dist/next/content.js.map +1 -1
  46. package/dist/next/instrumentation.cjs +104 -66
  47. package/dist/next/instrumentation.cjs.map +1 -1
  48. package/dist/next/instrumentation.js +2 -2
  49. package/dist/next/landing-pages.cjs +155 -129
  50. package/dist/next/landing-pages.cjs.map +1 -1
  51. package/dist/next/landing-pages.d.cts +2 -2
  52. package/dist/next/landing-pages.d.ts +2 -2
  53. package/dist/next/landing-pages.js +7 -8
  54. package/dist/next/landing-pages.js.map +1 -1
  55. package/dist/next/locations.cjs +114 -88
  56. package/dist/next/locations.cjs.map +1 -1
  57. package/dist/next/locations.d.cts +2 -2
  58. package/dist/next/locations.d.ts +2 -2
  59. package/dist/next/locations.js +7 -8
  60. package/dist/next/locations.js.map +1 -1
  61. package/dist/next/middleware.cjs +96 -66
  62. package/dist/next/middleware.cjs.map +1 -1
  63. package/dist/next/middleware.d.cts +2 -2
  64. package/dist/next/middleware.d.ts +2 -2
  65. package/dist/next/middleware.js +2 -2
  66. package/dist/next/site-root-server.cjs +103 -69
  67. package/dist/next/site-root-server.cjs.map +1 -1
  68. package/dist/next/site-root-server.js +4 -4
  69. package/dist/next.cjs +37 -2
  70. package/dist/next.cjs.map +1 -1
  71. package/dist/next.d.cts +3 -3
  72. package/dist/next.d.ts +3 -3
  73. package/dist/next.js +4 -4
  74. package/dist/react.cjs +88 -53
  75. package/dist/react.cjs.map +1 -1
  76. package/dist/react.d.cts +2 -2
  77. package/dist/react.d.ts +2 -2
  78. package/dist/react.js +3 -3
  79. package/dist/{site-config-Cgq67uQ1.d.cts → site-config-BLnwuRC2.d.ts} +9 -3
  80. package/dist/{site-config-BxEmJxBB.d.ts → site-config-BZJS8Hp_.d.cts} +9 -3
  81. package/dist/{track-page-view-BCX1Dsfk.d.cts → track-page-view-BJQqn2Bg.d.cts} +1 -1
  82. package/dist/{track-page-view-74Su6lQY.d.ts → track-page-view-DGKRUIxm.d.ts} +1 -1
  83. package/dist/{types-yNgoakwk.d.ts → types-CYrgEwUF.d.cts} +16 -2
  84. package/dist/{types-yNgoakwk.d.cts → types-CYrgEwUF.d.ts} +16 -2
  85. package/dist/{utils-BLoWWfSw.d.ts → utils-B1Nt3sBU.d.ts} +1 -1
  86. package/dist/{utils-UPTIdK1D.d.cts → utils-U6TGMIAB.d.cts} +1 -1
  87. package/docs/legal-and-privacy.md +2 -2
  88. package/package.json +1 -1
  89. package/dist/chunk-AIFJ7DVO.js.map +0 -1
  90. package/dist/chunk-RI3KKDPX.js +0 -75
  91. package/dist/chunk-RI3KKDPX.js.map +0 -1
  92. package/dist/chunk-RNZTKIC6.js.map +0 -1
  93. package/dist/chunk-YFG3AQ35.js.map +0 -1
  94. /package/dist/{chunk-AGGLRTUQ.js.map → chunk-JVFN7MF2.js.map} +0 -0
  95. /package/dist/{chunk-3ZEMXII6.js.map → chunk-NCF3J4HV.js.map} +0 -0
  96. /package/dist/{chunk-HFLU7HQE.js.map → chunk-ONIPLMOY.js.map} +0 -0
  97. /package/dist/{chunk-NAQU6RAE.js.map → chunk-PQOTEV6O.js.map} +0 -0
@@ -55,7 +55,7 @@ var import_navigation = require("next/navigation");
55
55
  var LANDING_REFERER_COOKIE_MAX_AGE_SEC = 30 * 60;
56
56
 
57
57
  // package.json
58
- var version = "0.1.36";
58
+ var version = "0.1.38";
59
59
 
60
60
  // src/constants.ts
61
61
  var JMP_ANALYTICS_SDK_VERSION = version;
@@ -69,6 +69,152 @@ function normalizeBaseUrl(baseUrl) {
69
69
  return baseUrl.replace(/\/$/, "");
70
70
  }
71
71
 
72
+ // src/env-public.ts
73
+ function firstDefined(...values) {
74
+ for (const v of values) {
75
+ if (v) return v;
76
+ }
77
+ return void 0;
78
+ }
79
+ function readJmpPublicEnvFromProcessEnv() {
80
+ if (typeof process === "undefined" || !process.env) {
81
+ return {};
82
+ }
83
+ const { env } = process;
84
+ const analyticsUrl = firstDefined(
85
+ env.NEXT_PUBLIC_JMP_ANALYTICS_URL,
86
+ env.PUBLIC_JMP_ANALYTICS_URL
87
+ );
88
+ const trackingKey = firstDefined(
89
+ env.NEXT_PUBLIC_JMP_TRACKING_KEY,
90
+ env.PUBLIC_JMP_TRACKING_KEY
91
+ );
92
+ const requireConsentRaw = firstDefined(
93
+ env.NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT,
94
+ env.PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT
95
+ );
96
+ const autoContactRaw = firstDefined(
97
+ env.NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS,
98
+ env.PUBLIC_JMP_AUTO_CONTACT_LINKS
99
+ );
100
+ return {
101
+ analyticsUrl,
102
+ trackingKey,
103
+ requireConsent: requireConsentRaw === "true",
104
+ autoContactLinks: autoContactRaw === "true"
105
+ };
106
+ }
107
+ function readJmpPublicEnvFromProcess(overrides) {
108
+ const fromEnv = readJmpPublicEnvFromProcessEnv();
109
+ return {
110
+ analyticsUrl: firstDefined(overrides?.analyticsUrl, fromEnv.analyticsUrl),
111
+ trackingKey: firstDefined(overrides?.trackingKey, fromEnv.trackingKey),
112
+ requireConsent: overrides?.requireConsent ?? fromEnv.requireConsent,
113
+ autoContactLinks: overrides?.autoContactLinks ?? fromEnv.autoContactLinks
114
+ };
115
+ }
116
+
117
+ // src/site-config.ts
118
+ var registeredSite = null;
119
+ function getJmpSiteDefinition() {
120
+ return registeredSite;
121
+ }
122
+ function getJmpContentConfig() {
123
+ const { analyticsUrl, trackingKey } = readJmpPublicEnvFromProcess();
124
+ if (!analyticsUrl || !trackingKey) {
125
+ return null;
126
+ }
127
+ const site = getJmpSiteDefinition();
128
+ const contentWrappers = site?.contentWrappers ?? void 0;
129
+ const inferredMode = contentWrappers && contentWrappers.length > 0 ? "manual" : void 0;
130
+ return {
131
+ baseUrl: analyticsUrl,
132
+ trackingKey,
133
+ contentWrappers,
134
+ contentManifest: site?.contentManifest ?? void 0,
135
+ contentWrapperMode: site?.contentWrapperMode ?? inferredMode
136
+ };
137
+ }
138
+
139
+ // src/landing-pages/hub.ts
140
+ var JMP_LANDING_HUB = {
141
+ location: {
142
+ title: "Areas we serve",
143
+ path: "/areas",
144
+ description: "Local pages for cities and regions we work in.",
145
+ breadcrumb: "Areas",
146
+ segment: "areas"
147
+ },
148
+ service: {
149
+ title: "Services",
150
+ path: "/services",
151
+ description: "What we offer and how we help.",
152
+ breadcrumb: "Services",
153
+ segment: "services"
154
+ }
155
+ };
156
+ function jmpLandingKindSegment(kind) {
157
+ return JMP_LANDING_HUB[kind].segment;
158
+ }
159
+
160
+ // src/landing-pages/utils.ts
161
+ function plainTextFromMarkdown(input, maxLength = 5e3) {
162
+ return input.replace(/[#*_`[\]]/g, "").trim().slice(0, maxLength);
163
+ }
164
+ function resolveJmpSiteUrl(override) {
165
+ const fromArg = override?.trim().replace(/\/$/, "");
166
+ if (fromArg) return fromArg;
167
+ const fromConfig = getJmpSiteDefinition()?.siteUrl?.trim().replace(/\/$/, "");
168
+ return fromConfig || null;
169
+ }
170
+ function absoluteJmpSiteUrl(path, siteUrl) {
171
+ const base = resolveJmpSiteUrl(siteUrl);
172
+ if (!base) {
173
+ return path.startsWith("/") ? path : `/${path}`;
174
+ }
175
+ const normalized = path.startsWith("/") ? path : `/${path}`;
176
+ return `${base}${normalized}`;
177
+ }
178
+ function filterJmpLandingPagesForDefaultLocale(pages, kind) {
179
+ const segment = jmpLandingKindSegment(kind);
180
+ return pages.filter((page) => {
181
+ const parts = page.path.split("/").filter(Boolean);
182
+ return parts[0] === segment;
183
+ });
184
+ }
185
+ function filterJmpLandingPagesForLocalizedRoutes(pages, kind) {
186
+ const segment = jmpLandingKindSegment(kind);
187
+ return pages.filter((page) => {
188
+ const parts = page.path.split("/").filter(Boolean);
189
+ return parts.length >= 3 && parts[1] === segment;
190
+ });
191
+ }
192
+ function jmpLocalizedLandingStaticParams(pages, kind) {
193
+ return filterJmpLandingPagesForLocalizedRoutes(pages, kind).map((page) => {
194
+ const [locale, , slug] = page.path.split("/").filter(Boolean);
195
+ return { locale, slug };
196
+ });
197
+ }
198
+
199
+ // src/request-origin.ts
200
+ function resolveJmpRequestOrigin() {
201
+ const fromSite = resolveJmpSiteUrl();
202
+ if (fromSite) {
203
+ return fromSite;
204
+ }
205
+ if (typeof process === "undefined") {
206
+ return null;
207
+ }
208
+ return process.env.NEXT_PUBLIC_SITE_URL?.trim().replace(/\/$/, "") || null;
209
+ }
210
+ function withJmpOriginHeader(headers) {
211
+ const origin = resolveJmpRequestOrigin();
212
+ if (!origin) {
213
+ return headers;
214
+ }
215
+ return { ...headers, Origin: origin };
216
+ }
217
+
72
218
  // src/content/manifest.ts
73
219
  var JMP_CONTENT_MANIFEST_VERSION = 1;
74
220
  var TRUST_SECTIONS = /* @__PURE__ */ new Set([
@@ -273,6 +419,11 @@ function inferWrapperSlotsFromManifest(manifest) {
273
419
  }
274
420
 
275
421
  // src/content/fetch.ts
422
+ function jmpContentRequestHeaders(config) {
423
+ return withJmpOriginHeader({
424
+ "X-JMP-Tracking-Key": config.trackingKey
425
+ });
426
+ }
276
427
  async function getContent(config, path) {
277
428
  const text = await getContentText(config, path);
278
429
  try {
@@ -295,9 +446,7 @@ async function getContentText(config, path) {
295
446
  }
296
447
  const res = await resolvedFetch(url, {
297
448
  method: "GET",
298
- headers: {
299
- "X-JMP-Tracking-Key": config.trackingKey
300
- }
449
+ headers: jmpContentRequestHeaders(config)
301
450
  });
302
451
  const text = await res.text();
303
452
  if (!res.ok) {
@@ -324,6 +473,7 @@ var WRAPPER_SLOT_ORDER = [
324
473
  "blog",
325
474
  "faq",
326
475
  "contact",
476
+ "legal",
327
477
  "trust",
328
478
  "trust.summary",
329
479
  "trust.testimonials",
@@ -482,7 +632,7 @@ async function registerJmpContentWrappers(config) {
482
632
  method: "POST",
483
633
  headers: {
484
634
  "Content-Type": "application/json",
485
- "X-JMP-Tracking-Key": config.trackingKey
635
+ ...jmpContentRequestHeaders(config)
486
636
  },
487
637
  body: JSON.stringify(body)
488
638
  });
@@ -504,70 +654,6 @@ async function registerJmpContentWrappers(config) {
504
654
  }
505
655
  setContentWrapperSyncHandler(registerJmpContentWrappers);
506
656
 
507
- // src/env-public.ts
508
- function firstDefined(...values) {
509
- for (const v of values) {
510
- if (v) return v;
511
- }
512
- return void 0;
513
- }
514
- function readJmpPublicEnvFromProcessEnv() {
515
- if (typeof process === "undefined" || !process.env) {
516
- return {};
517
- }
518
- const { env } = process;
519
- const analyticsUrl = firstDefined(
520
- env.NEXT_PUBLIC_JMP_ANALYTICS_URL,
521
- env.PUBLIC_JMP_ANALYTICS_URL
522
- );
523
- const trackingKey = firstDefined(
524
- env.NEXT_PUBLIC_JMP_TRACKING_KEY,
525
- env.PUBLIC_JMP_TRACKING_KEY
526
- );
527
- const requireConsentRaw = firstDefined(
528
- env.NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT,
529
- env.PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT
530
- );
531
- const autoContactRaw = firstDefined(
532
- env.NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS,
533
- env.PUBLIC_JMP_AUTO_CONTACT_LINKS
534
- );
535
- return {
536
- analyticsUrl,
537
- trackingKey,
538
- requireConsent: requireConsentRaw === "true",
539
- autoContactLinks: autoContactRaw === "true"
540
- };
541
- }
542
- function readJmpPublicEnvFromProcess(overrides) {
543
- const fromEnv = readJmpPublicEnvFromProcessEnv();
544
- return {
545
- analyticsUrl: firstDefined(overrides?.analyticsUrl, fromEnv.analyticsUrl),
546
- trackingKey: firstDefined(overrides?.trackingKey, fromEnv.trackingKey),
547
- requireConsent: overrides?.requireConsent ?? fromEnv.requireConsent,
548
- autoContactLinks: overrides?.autoContactLinks ?? fromEnv.autoContactLinks
549
- };
550
- }
551
-
552
- // src/site-config.ts
553
- var registeredSite = null;
554
- function getJmpSiteDefinition() {
555
- return registeredSite;
556
- }
557
- function getJmpContentConfig() {
558
- const { analyticsUrl, trackingKey } = readJmpPublicEnvFromProcess();
559
- if (!analyticsUrl || !trackingKey) {
560
- return null;
561
- }
562
- const site = getJmpSiteDefinition();
563
- return {
564
- baseUrl: analyticsUrl,
565
- trackingKey,
566
- contentWrappers: site?.contentWrappers ?? void 0,
567
- contentManifest: site?.contentManifest ?? void 0
568
- };
569
- }
570
-
571
657
  // src/content/site-content.ts
572
658
  async function loadLandingPages(filters) {
573
659
  const c = getJmpContentConfig();
@@ -592,66 +678,6 @@ async function loadLandingPageDetail(kind, slug, locale) {
592
678
  }
593
679
  }
594
680
 
595
- // src/landing-pages/hub.ts
596
- var JMP_LANDING_HUB = {
597
- location: {
598
- title: "Areas we serve",
599
- path: "/areas",
600
- description: "Local pages for cities and regions we work in.",
601
- breadcrumb: "Areas",
602
- segment: "areas"
603
- },
604
- service: {
605
- title: "Services",
606
- path: "/services",
607
- description: "What we offer and how we help.",
608
- breadcrumb: "Services",
609
- segment: "services"
610
- }
611
- };
612
- function jmpLandingKindSegment(kind) {
613
- return JMP_LANDING_HUB[kind].segment;
614
- }
615
-
616
- // src/landing-pages/utils.ts
617
- function plainTextFromMarkdown(input, maxLength = 5e3) {
618
- return input.replace(/[#*_`[\]]/g, "").trim().slice(0, maxLength);
619
- }
620
- function resolveJmpSiteUrl(override) {
621
- const fromArg = override?.trim().replace(/\/$/, "");
622
- if (fromArg) return fromArg;
623
- const fromConfig = getJmpSiteDefinition()?.siteUrl?.trim().replace(/\/$/, "");
624
- return fromConfig || null;
625
- }
626
- function absoluteJmpSiteUrl(path, siteUrl) {
627
- const base = resolveJmpSiteUrl(siteUrl);
628
- if (!base) {
629
- return path.startsWith("/") ? path : `/${path}`;
630
- }
631
- const normalized = path.startsWith("/") ? path : `/${path}`;
632
- return `${base}${normalized}`;
633
- }
634
- function filterJmpLandingPagesForDefaultLocale(pages, kind) {
635
- const segment = jmpLandingKindSegment(kind);
636
- return pages.filter((page) => {
637
- const parts = page.path.split("/").filter(Boolean);
638
- return parts[0] === segment;
639
- });
640
- }
641
- function filterJmpLandingPagesForLocalizedRoutes(pages, kind) {
642
- const segment = jmpLandingKindSegment(kind);
643
- return pages.filter((page) => {
644
- const parts = page.path.split("/").filter(Boolean);
645
- return parts.length >= 3 && parts[1] === segment;
646
- });
647
- }
648
- function jmpLocalizedLandingStaticParams(pages, kind) {
649
- return filterJmpLandingPagesForLocalizedRoutes(pages, kind).map((page) => {
650
- const [locale, , slug] = page.path.split("/").filter(Boolean);
651
- return { locale, slug };
652
- });
653
- }
654
-
655
681
  // src/landing-pages/json-ld.ts
656
682
  function jmpBreadcrumbListJsonLd(items, siteUrl) {
657
683
  return {