@jmp-technologies/analytics 0.1.25 → 0.1.26

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 (91) hide show
  1. package/dist/astro/client.cjs +103 -0
  2. package/dist/astro/client.cjs.map +1 -1
  3. package/dist/astro/client.d.cts +2 -2
  4. package/dist/astro/client.d.ts +2 -2
  5. package/dist/astro/client.js +5 -3
  6. package/dist/astro/client.js.map +1 -1
  7. package/dist/astro/content.cjs +185 -1
  8. package/dist/astro/content.cjs.map +1 -1
  9. package/dist/astro/content.d.cts +2 -2
  10. package/dist/astro/content.d.ts +2 -2
  11. package/dist/astro/content.js +4 -3
  12. package/dist/astro/integration.cjs +55 -9
  13. package/dist/astro/integration.cjs.map +1 -1
  14. package/dist/astro/integration.js +4 -3
  15. package/dist/astro/integration.js.map +1 -1
  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 +55 -9
  21. package/dist/astro/register.cjs.map +1 -1
  22. package/dist/astro/register.js +4 -3
  23. package/dist/{chunk-MOX7RJUU.js → chunk-A4RRTY5D.js} +1 -1
  24. package/dist/{chunk-MOX7RJUU.js.map → chunk-A4RRTY5D.js.map} +1 -1
  25. package/dist/{chunk-7MLPSL6T.js → chunk-HODG4NJQ.js} +2 -2
  26. package/dist/{chunk-L67PVZYL.js → chunk-PKGUBYZR.js} +3 -24
  27. package/dist/chunk-PKGUBYZR.js.map +1 -0
  28. package/dist/{chunk-VRDPVKAN.js → chunk-RCOHQAGL.js} +159 -156
  29. package/dist/chunk-RCOHQAGL.js.map +1 -0
  30. package/dist/chunk-TCZ6TC2L.js +149 -0
  31. package/dist/chunk-TCZ6TC2L.js.map +1 -0
  32. package/dist/{chunk-AJ33NQVZ.js → chunk-TFHOTBOL.js} +3 -3
  33. package/dist/{chunk-5GORAM7J.js → chunk-WFTTIRDJ.js} +2 -2
  34. package/dist/{chunk-OLWCYWVB.js → chunk-XQZOGWF2.js} +3 -3
  35. package/dist/chunk-YCVHRMM6.js +28 -0
  36. package/dist/chunk-YCVHRMM6.js.map +1 -0
  37. package/dist/{create-jmp-analytics-COxo3-yg.d.ts → create-jmp-analytics-JKAsJAWb.d.ts} +1 -1
  38. package/dist/{create-jmp-analytics-ClLOMb9p.d.cts → create-jmp-analytics-Mau-oxji.d.cts} +1 -1
  39. package/dist/index.cjs +156 -11
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +12 -6
  42. package/dist/index.d.ts +12 -6
  43. package/dist/index.js +13 -3
  44. package/dist/next/content.cjs +185 -1
  45. package/dist/next/content.cjs.map +1 -1
  46. package/dist/next/content.d.cts +2 -2
  47. package/dist/next/content.d.ts +2 -2
  48. package/dist/next/content.js +4 -3
  49. package/dist/next/content.js.map +1 -1
  50. package/dist/next/instrumentation.cjs +55 -9
  51. package/dist/next/instrumentation.cjs.map +1 -1
  52. package/dist/next/instrumentation.js +3 -2
  53. package/dist/next/instrumentation.js.map +1 -1
  54. package/dist/next/landing-capture-script-server.cjs +61 -0
  55. package/dist/next/landing-capture-script-server.cjs.map +1 -0
  56. package/dist/next/landing-capture-script-server.d.cts +14 -0
  57. package/dist/next/landing-capture-script-server.d.ts +14 -0
  58. package/dist/next/landing-capture-script-server.js +8 -0
  59. package/dist/next/landing-capture-script-server.js.map +1 -0
  60. package/dist/next/middleware.cjs.map +1 -1
  61. package/dist/next/middleware.d.cts +2 -2
  62. package/dist/next/middleware.d.ts +2 -2
  63. package/dist/next/middleware.js +2 -2
  64. package/dist/next/site-root-server.cjs +159 -23
  65. package/dist/next/site-root-server.cjs.map +1 -1
  66. package/dist/next/site-root-server.js +9 -4
  67. package/dist/next/site-root-server.js.map +1 -1
  68. package/dist/next.cjs +152 -70
  69. package/dist/next.cjs.map +1 -1
  70. package/dist/next.d.cts +7 -15
  71. package/dist/next.d.ts +7 -15
  72. package/dist/next.js +7 -7
  73. package/dist/react.cjs +103 -0
  74. package/dist/react.cjs.map +1 -1
  75. package/dist/react.d.cts +2 -2
  76. package/dist/react.d.ts +2 -2
  77. package/dist/react.js +4 -3
  78. package/dist/{site-config-BSMVyUjk.d.ts → site-config-CXUdGLqw.d.cts} +6 -3
  79. package/dist/{site-config-8TTHIW6w.d.cts → site-config-w_Db9YSk.d.ts} +6 -3
  80. package/dist/{track-page-view-BweavmXz.d.cts → track-page-view-CkuSYuco.d.cts} +1 -1
  81. package/dist/{track-page-view-DtxbdM5q.d.ts → track-page-view-QRSk8vap.d.ts} +1 -1
  82. package/dist/{types-Bk0ST1aH.d.ts → types-C1eq8E5u.d.cts} +12 -4
  83. package/dist/{types-Bk0ST1aH.d.cts → types-C1eq8E5u.d.ts} +12 -4
  84. package/docs/astro-integration.md +1 -1
  85. package/package.json +7 -2
  86. package/dist/chunk-L67PVZYL.js.map +0 -1
  87. package/dist/chunk-VRDPVKAN.js.map +0 -1
  88. /package/dist/{chunk-7MLPSL6T.js.map → chunk-HODG4NJQ.js.map} +0 -0
  89. /package/dist/{chunk-AJ33NQVZ.js.map → chunk-TFHOTBOL.js.map} +0 -0
  90. /package/dist/{chunk-5GORAM7J.js.map → chunk-WFTTIRDJ.js.map} +0 -0
  91. /package/dist/{chunk-OLWCYWVB.js.map → chunk-XQZOGWF2.js.map} +0 -0
package/dist/next.cjs CHANGED
@@ -32,7 +32,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
32
32
  var next_exports = {};
33
33
  __export(next_exports, {
34
34
  JmpGoogleTag: () => JmpGoogleTag,
35
- JmpLandingCaptureScript: () => JmpLandingCaptureScript,
36
35
  JmpNextAnalytics: () => JmpNextAnalytics,
37
36
  JmpNextPageViewTracker: () => JmpNextPageViewTracker,
38
37
  JmpSiteRoot: () => JmpSiteRoot,
@@ -47,10 +46,59 @@ __export(next_exports, {
47
46
  useJmpAnalytics: () => useJmpAnalytics
48
47
  });
49
48
  module.exports = __toCommonJS(next_exports);
50
- var import_script2 = __toESM(require("next/script"), 1);
51
49
  var import_react3 = require("react");
52
50
  var import_navigation2 = require("next/navigation");
53
51
 
52
+ // src/env-public.ts
53
+ function firstDefined(...values) {
54
+ for (const v of values) {
55
+ if (v) return v;
56
+ }
57
+ return void 0;
58
+ }
59
+ function readJmpPublicEnvFromProcessEnv() {
60
+ if (typeof process === "undefined" || !process.env) {
61
+ return {};
62
+ }
63
+ const { env } = process;
64
+ const analyticsUrl = firstDefined(
65
+ env.NEXT_PUBLIC_JMP_ANALYTICS_URL,
66
+ env.PUBLIC_JMP_ANALYTICS_URL
67
+ );
68
+ const trackingKey = firstDefined(
69
+ env.NEXT_PUBLIC_JMP_TRACKING_KEY,
70
+ env.PUBLIC_JMP_TRACKING_KEY
71
+ );
72
+ const requireConsentRaw = firstDefined(
73
+ env.NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT,
74
+ env.PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT
75
+ );
76
+ const autoContactRaw = firstDefined(
77
+ env.NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS,
78
+ env.PUBLIC_JMP_AUTO_CONTACT_LINKS
79
+ );
80
+ return {
81
+ analyticsUrl,
82
+ trackingKey,
83
+ requireConsent: requireConsentRaw === "true",
84
+ autoContactLinks: autoContactRaw === "true"
85
+ };
86
+ }
87
+ function readJmpPublicEnvFromProcess(overrides) {
88
+ const fromEnv = readJmpPublicEnvFromProcessEnv();
89
+ return {
90
+ analyticsUrl: firstDefined(overrides?.analyticsUrl, fromEnv.analyticsUrl),
91
+ trackingKey: firstDefined(overrides?.trackingKey, fromEnv.trackingKey),
92
+ requireConsent: overrides?.requireConsent ?? fromEnv.requireConsent,
93
+ autoContactLinks: overrides?.autoContactLinks ?? fromEnv.autoContactLinks
94
+ };
95
+ }
96
+
97
+ // src/constants.ts
98
+ var JMP_ANALYTICS_SDK_VERSION = "0.1.25";
99
+ var JMP_TRACKING_CONSENT_STORAGE_KEY = "jmp_analytics_consent_v1";
100
+ var DEFAULT_JMP_BROWSER_PAGE_VIEW_DEDUPE_MS = 2500;
101
+
54
102
  // src/landing-capture.ts
55
103
  var JMP_SESSION_ID_KEY = "jmp_analytics_sid";
56
104
  var JMP_LANDING_REFERER_KEY = "jmp_analytics_landing_referer";
@@ -193,55 +241,6 @@ function buildLandingCaptureInlineScript() {
193
241
  return `(function(){try{var h=location.hostname;var ref=document.referrer||'';function rh(u){try{return new URL(u).hostname.replace(/^www\\./i,'').toLowerCase()}catch(e){try{return new URL('https://'+u).hostname.replace(/^www\\./i,'').toLowerCase()}catch(e2){return null}}}function ext(r){var x=rh(r);if(!x)return false;var s=h.replace(/^www\\./i,'').toLowerCase();return x!==s&&x.slice(-('.'+s).length)!==('.'+s)}function apexDom(hn){var s=hn.replace(/^www\\./i,'').toLowerCase();if(!s||s==='localhost'||/\\.local$/i.test(s)||s.indexOf('.')<0)return null;return s}function readCk(hn){var apex=apexDom(hn);if(!apex)return '';var pre='${JMP_LANDING_REFERER_COOKIE}=';var parts=document.cookie.split(';');for(var i=0;i<parts.length;i++){var t=parts[i].trim();if(t.indexOf(pre)===0){try{return decodeURIComponent(t.slice(pre.length)).trim()}catch(e){return ''}}}return ''}function writeCk(r,hn){var apex=apexDom(hn);if(!apex)return;var sec=location.protocol==='https:'?'; Secure':'';document.cookie='${JMP_LANDING_REFERER_COOKIE}='+encodeURIComponent(r.slice(0,2048))+'; Domain=.'+apex+'; Path=/; Max-Age=${cookieMaxAge}; SameSite=Lax'+sec}var stored=sessionStorage.getItem('${JMP_LANDING_REFERER_KEY}')||'';var ck=readCk(h);var preserved=stored||ck;var lr='';if(ref&&ext(ref)){sessionStorage.setItem('${JMP_LANDING_REFERER_KEY}',ref);writeCk(ref,h);lr=ref}else{lr=preserved||'';if(lr&&!stored)sessionStorage.setItem('${JMP_LANDING_REFERER_KEY}',lr)}var sid=sessionStorage.getItem('${JMP_SESSION_ID_KEY}');if(!sid&&crypto&&crypto.randomUUID){sid=crypto.randomUUID();sessionStorage.setItem('${JMP_SESSION_ID_KEY}',sid)}try{var sp=new URLSearchParams(location.search);var utm={};var updated=false;['utm_source','utm_medium','utm_campaign','utm_content','utm_term'].forEach(function(n){var v=sp.get(n);if(v){utm[n]=v;updated=true}});if(updated)sessionStorage.setItem('${JMP_UTM_SESSION_KEY}',JSON.stringify(utm))}catch(e){}}catch(e){}})();`;
194
242
  }
195
243
 
196
- // src/env-public.ts
197
- function firstDefined(...values) {
198
- for (const v of values) {
199
- if (v) return v;
200
- }
201
- return void 0;
202
- }
203
- function readJmpPublicEnvFromProcessEnv() {
204
- if (typeof process === "undefined" || !process.env) {
205
- return {};
206
- }
207
- const { env } = process;
208
- const analyticsUrl = firstDefined(
209
- env.NEXT_PUBLIC_JMP_ANALYTICS_URL,
210
- env.PUBLIC_JMP_ANALYTICS_URL
211
- );
212
- const trackingKey = firstDefined(
213
- env.NEXT_PUBLIC_JMP_TRACKING_KEY,
214
- env.PUBLIC_JMP_TRACKING_KEY
215
- );
216
- const requireConsentRaw = firstDefined(
217
- env.NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT,
218
- env.PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT
219
- );
220
- const autoContactRaw = firstDefined(
221
- env.NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS,
222
- env.PUBLIC_JMP_AUTO_CONTACT_LINKS
223
- );
224
- return {
225
- analyticsUrl,
226
- trackingKey,
227
- requireConsent: requireConsentRaw === "true",
228
- autoContactLinks: autoContactRaw === "true"
229
- };
230
- }
231
- function readJmpPublicEnvFromProcess(overrides) {
232
- const fromEnv = readJmpPublicEnvFromProcessEnv();
233
- return {
234
- analyticsUrl: firstDefined(overrides?.analyticsUrl, fromEnv.analyticsUrl),
235
- trackingKey: firstDefined(overrides?.trackingKey, fromEnv.trackingKey),
236
- requireConsent: overrides?.requireConsent ?? fromEnv.requireConsent,
237
- autoContactLinks: overrides?.autoContactLinks ?? fromEnv.autoContactLinks
238
- };
239
- }
240
-
241
- // src/constants.ts
242
- var JMP_TRACKING_CONSENT_STORAGE_KEY = "jmp_analytics_consent_v1";
243
- var DEFAULT_JMP_BROWSER_PAGE_VIEW_DEDUPE_MS = 2500;
244
-
245
244
  // src/tracker/page-view-dedupe.ts
246
245
  var JMP_PAGE_VIEW_DEDUPE_STORAGE_KEY = "jmp_analytics_last_pv";
247
246
  var moduleLastPath = "";
@@ -836,6 +835,108 @@ function getJmpSiteDefinition() {
836
835
  return registeredSite;
837
836
  }
838
837
 
838
+ // src/content/wrapper-discovery.ts
839
+ var WRAPPER_SLOT_ORDER = [
840
+ "blog",
841
+ "faq",
842
+ "contact",
843
+ "trust",
844
+ "trust.summary",
845
+ "trust.testimonials",
846
+ "trust.reviews",
847
+ "trust.stats",
848
+ "trust.logos",
849
+ "trust.credentials"
850
+ ];
851
+ var discovered = /* @__PURE__ */ new Set();
852
+ var reportedDedupeKeys = /* @__PURE__ */ new Set();
853
+ var syncHandler = null;
854
+ function getDiscoveredContentWrappers() {
855
+ return sortWrapperSlots([...discovered]);
856
+ }
857
+ function resolveContentWrappersForReport(config) {
858
+ const explicit = config.contentWrappers ?? [];
859
+ const auto = getDiscoveredContentWrappers();
860
+ if (config.contentWrapperMode === "manual") {
861
+ return sortWrapperSlots([...explicit]);
862
+ }
863
+ if (config.contentWrapperMode === "explicit-only") {
864
+ return sortWrapperSlots([...explicit]);
865
+ }
866
+ const merged = /* @__PURE__ */ new Set([...explicit, ...auto]);
867
+ return sortWrapperSlots([...merged]);
868
+ }
869
+ function hasReportedContentWrappers(dedupeKey) {
870
+ return reportedDedupeKeys.has(dedupeKey);
871
+ }
872
+ function rememberReportedContentWrappers(dedupeKey) {
873
+ reportedDedupeKeys.add(dedupeKey);
874
+ }
875
+ function setContentWrapperSyncHandler(handler) {
876
+ syncHandler = handler;
877
+ }
878
+ function sortWrapperSlots(slots) {
879
+ const order = new Map(WRAPPER_SLOT_ORDER.map((slot, index) => [slot, index]));
880
+ return [...new Set(slots)].sort((a, b) => {
881
+ const ai = order.get(a) ?? 999;
882
+ const bi = order.get(b) ?? 999;
883
+ if (ai !== bi) {
884
+ return ai - bi;
885
+ }
886
+ return a.localeCompare(b);
887
+ });
888
+ }
889
+
890
+ // src/content/api.ts
891
+ async function registerJmpContentWrappers(config) {
892
+ const wrappers = resolveContentWrappersForReport(config);
893
+ if (!wrappers.length) {
894
+ return { ok: false, skipped: true };
895
+ }
896
+ const dedupeKey = `${config.trackingKey}:${[...wrappers].sort().join(",")}`;
897
+ if (hasReportedContentWrappers(dedupeKey)) {
898
+ return { ok: true, wrappers };
899
+ }
900
+ const baseUrl = normalizeBaseUrl(config.baseUrl);
901
+ const resolvedFetch = config.fetchImpl ?? (typeof globalThis !== "undefined" && globalThis.fetch ? globalThis.fetch.bind(globalThis) : void 0);
902
+ if (!resolvedFetch) {
903
+ throw new Error(
904
+ "JMP content wrappers: fetch is not available; pass fetchImpl in config"
905
+ );
906
+ }
907
+ const url = `${baseUrl}/api/content/capabilities`;
908
+ if (config.debug) {
909
+ console.debug("[@jmp-technologies/analytics]", "POST", url, { wrappers });
910
+ }
911
+ const res = await resolvedFetch(url, {
912
+ method: "POST",
913
+ headers: {
914
+ "Content-Type": "application/json",
915
+ "X-JMP-Tracking-Key": config.trackingKey
916
+ },
917
+ body: JSON.stringify({
918
+ wrappers,
919
+ sdkVersion: JMP_ANALYTICS_SDK_VERSION
920
+ })
921
+ });
922
+ const text = await res.text();
923
+ if (!res.ok) {
924
+ let parsed = {};
925
+ try {
926
+ parsed = JSON.parse(text);
927
+ } catch {
928
+ parsed = { error: text };
929
+ }
930
+ throw new Error(
931
+ [`JMP content wrappers HTTP ${res.status}`, parsed.error, parsed.hint].filter(Boolean).join(" \u2014 ")
932
+ );
933
+ }
934
+ rememberReportedContentWrappers(dedupeKey);
935
+ const data = JSON.parse(text);
936
+ return { ok: true, wrappers: data.wrappers ?? wrappers };
937
+ }
938
+ setContentWrapperSyncHandler(registerJmpContentWrappers);
939
+
839
940
  // src/env/browser.ts
840
941
  function getJmpBrowserAnalyticsConfigFromEnv(overrides) {
841
942
  const pub = readJmpPublicEnvFromProcess();
@@ -977,23 +1078,6 @@ var import_jsx_runtime3 = require("react/jsx-runtime");
977
1078
  function useJmpAnalytics() {
978
1079
  return (0, import_react3.useMemo)(() => getOrCreateJmpAnalyticsForNextApp(), []);
979
1080
  }
980
- function JmpLandingCaptureScript({
981
- trackingKey = readJmpPublicEnvFromProcess().trackingKey
982
- } = {}) {
983
- if (!trackingKey?.trim()) {
984
- return null;
985
- }
986
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
987
- import_script2.default,
988
- {
989
- id: "jmp-landing-capture",
990
- strategy: "beforeInteractive",
991
- dangerouslySetInnerHTML: {
992
- __html: buildLandingCaptureInlineScript()
993
- }
994
- }
995
- );
996
- }
997
1081
  function JmpNextPageViewTrackerInner({
998
1082
  configOverrides
999
1083
  }) {
@@ -1053,7 +1137,6 @@ function JmpNextAnalytics({
1053
1137
  }
1054
1138
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
1055
1139
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(JmpNextAnalyticsBootstrap, { configOverrides }),
1056
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(JmpLandingCaptureScript, { trackingKey }),
1057
1140
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(JmpNextPageViewTracker, { configOverrides })
1058
1141
  ] });
1059
1142
  }
@@ -1078,7 +1161,6 @@ function JmpSiteRoot({
1078
1161
  // Annotate the CommonJS export names for ESM import in node:
1079
1162
  0 && (module.exports = {
1080
1163
  JmpGoogleTag,
1081
- JmpLandingCaptureScript,
1082
1164
  JmpNextAnalytics,
1083
1165
  JmpNextPageViewTracker,
1084
1166
  JmpSiteRoot,