@shware/analytics 4.0.1 → 4.1.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.
Files changed (111) hide show
  1. package/dist/hooks/use-outbound-click-analytics.cjs +2 -2
  2. package/dist/hooks/use-outbound-click-analytics.cjs.map +1 -1
  3. package/dist/hooks/use-outbound-click-analytics.mjs +2 -2
  4. package/dist/hooks/use-outbound-click-analytics.mjs.map +1 -1
  5. package/dist/index.cjs +0 -1
  6. package/dist/index.d.cts +2 -2
  7. package/dist/index.d.mts +2 -2
  8. package/dist/index.mjs +2 -2
  9. package/dist/native/fingerprint.cjs +3 -3
  10. package/dist/native/fingerprint.cjs.map +1 -1
  11. package/dist/native/fingerprint.mjs +3 -3
  12. package/dist/native/fingerprint.mjs.map +1 -1
  13. package/dist/native/firebase.cjs.map +1 -1
  14. package/dist/native/firebase.mjs.map +1 -1
  15. package/dist/native/index.cjs +1 -1
  16. package/dist/native/index.mjs +1 -1
  17. package/dist/native/setup.cjs +3 -5
  18. package/dist/native/setup.cjs.map +1 -1
  19. package/dist/native/setup.mjs +3 -5
  20. package/dist/native/setup.mjs.map +1 -1
  21. package/dist/react-router/index.cjs +1 -1
  22. package/dist/react-router/index.mjs +1 -1
  23. package/dist/schema/index.cjs +0 -14
  24. package/dist/schema/index.cjs.map +1 -1
  25. package/dist/schema/index.d.cts +1 -150
  26. package/dist/schema/index.d.cts.map +1 -1
  27. package/dist/schema/index.d.mts +1 -150
  28. package/dist/schema/index.d.mts.map +1 -1
  29. package/dist/schema/index.mjs +2 -15
  30. package/dist/schema/index.mjs.map +1 -1
  31. package/dist/server/linkedin-conversions-api.cjs +1 -1
  32. package/dist/server/linkedin-conversions-api.cjs.map +1 -1
  33. package/dist/server/linkedin-conversions-api.mjs +1 -1
  34. package/dist/server/linkedin-conversions-api.mjs.map +1 -1
  35. package/dist/server/meta-conversions-api.cjs +4 -4
  36. package/dist/server/meta-conversions-api.cjs.map +1 -1
  37. package/dist/server/meta-conversions-api.d.cts.map +1 -1
  38. package/dist/server/meta-conversions-api.d.mts.map +1 -1
  39. package/dist/server/meta-conversions-api.mjs +4 -4
  40. package/dist/server/meta-conversions-api.mjs.map +1 -1
  41. package/dist/server/openai-conversions-api.cjs +1 -1
  42. package/dist/server/openai-conversions-api.cjs.map +1 -1
  43. package/dist/server/openai-conversions-api.mjs +1 -1
  44. package/dist/server/openai-conversions-api.mjs.map +1 -1
  45. package/dist/server/reddit-conversions-api.cjs +3 -3
  46. package/dist/server/reddit-conversions-api.cjs.map +1 -1
  47. package/dist/server/reddit-conversions-api.mjs +3 -3
  48. package/dist/server/reddit-conversions-api.mjs.map +1 -1
  49. package/dist/setup/session.cjs.map +1 -1
  50. package/dist/setup/session.mjs.map +1 -1
  51. package/dist/tanstack/analytics.cjs +1 -1
  52. package/dist/tanstack/analytics.mjs +1 -1
  53. package/dist/third-parties/google-analytics.cjs.map +1 -1
  54. package/dist/third-parties/google-analytics.d.cts +4 -1
  55. package/dist/third-parties/google-analytics.d.cts.map +1 -1
  56. package/dist/third-parties/google-analytics.d.mts +4 -1
  57. package/dist/third-parties/google-analytics.d.mts.map +1 -1
  58. package/dist/third-parties/google-analytics.mjs.map +1 -1
  59. package/dist/third-parties/linkedin-insight-tag.cjs.map +1 -1
  60. package/dist/third-parties/linkedin-insight-tag.d.cts +4 -1
  61. package/dist/third-parties/linkedin-insight-tag.d.cts.map +1 -1
  62. package/dist/third-parties/linkedin-insight-tag.d.mts +4 -1
  63. package/dist/third-parties/linkedin-insight-tag.d.mts.map +1 -1
  64. package/dist/third-parties/linkedin-insight-tag.mjs.map +1 -1
  65. package/dist/third-parties/meta-pixel.cjs.map +1 -1
  66. package/dist/third-parties/meta-pixel.d.cts +4 -1
  67. package/dist/third-parties/meta-pixel.d.cts.map +1 -1
  68. package/dist/third-parties/meta-pixel.d.mts +4 -1
  69. package/dist/third-parties/meta-pixel.d.mts.map +1 -1
  70. package/dist/third-parties/meta-pixel.mjs.map +1 -1
  71. package/dist/third-parties/openai-pixel.cjs +2 -1
  72. package/dist/third-parties/openai-pixel.cjs.map +1 -1
  73. package/dist/third-parties/openai-pixel.d.cts +4 -1
  74. package/dist/third-parties/openai-pixel.d.cts.map +1 -1
  75. package/dist/third-parties/openai-pixel.d.mts +4 -1
  76. package/dist/third-parties/openai-pixel.d.mts.map +1 -1
  77. package/dist/third-parties/openai-pixel.mjs +2 -1
  78. package/dist/third-parties/openai-pixel.mjs.map +1 -1
  79. package/dist/third-parties/reddit-pixel.cjs.map +1 -1
  80. package/dist/third-parties/reddit-pixel.d.cts +4 -1
  81. package/dist/third-parties/reddit-pixel.d.cts.map +1 -1
  82. package/dist/third-parties/reddit-pixel.d.mts +4 -1
  83. package/dist/third-parties/reddit-pixel.d.mts.map +1 -1
  84. package/dist/third-parties/reddit-pixel.mjs.map +1 -1
  85. package/dist/track/index.cjs +1 -1
  86. package/dist/track/index.cjs.map +1 -1
  87. package/dist/track/index.d.cts.map +1 -1
  88. package/dist/track/index.d.mts.map +1 -1
  89. package/dist/track/index.mjs +1 -1
  90. package/dist/track/index.mjs.map +1 -1
  91. package/dist/track/oaiq.cjs.map +1 -1
  92. package/dist/track/oaiq.d.cts +1 -1
  93. package/dist/track/oaiq.d.cts.map +1 -1
  94. package/dist/track/oaiq.d.mts +1 -1
  95. package/dist/track/oaiq.d.mts.map +1 -1
  96. package/dist/track/oaiq.mjs.map +1 -1
  97. package/dist/track/rdt.cjs +3 -4
  98. package/dist/track/rdt.cjs.map +1 -1
  99. package/dist/track/rdt.mjs +3 -4
  100. package/dist/track/rdt.mjs.map +1 -1
  101. package/dist/track/types.d.cts +0 -4
  102. package/dist/track/types.d.cts.map +1 -1
  103. package/dist/track/types.d.mts +0 -4
  104. package/dist/track/types.d.mts.map +1 -1
  105. package/dist/web/index.cjs +1 -1
  106. package/dist/web/index.cjs.map +1 -1
  107. package/dist/web/index.d.cts.map +1 -1
  108. package/dist/web/index.d.mts.map +1 -1
  109. package/dist/web/index.mjs +1 -1
  110. package/dist/web/index.mjs.map +1 -1
  111. package/package.json +15 -15
@@ -10,14 +10,14 @@ function useOutboundClickAnalytics() {
10
10
  (0, react.useEffect)(() => {
11
11
  const onClick = (event) => {
12
12
  const anchor = event.target.closest("a");
13
- if (!anchor || !anchor.href) return;
13
+ if (!anchor?.href) return;
14
14
  try {
15
15
  const url = new URL(anchor.href, window.location.origin);
16
16
  if (url.hostname !== window.location.hostname) require_track_index.track("click", {
17
17
  outbound: true,
18
18
  link_id: anchor.id || "",
19
19
  link_url: anchor.href,
20
- link_text: anchor.textContent?.trim() || "",
20
+ link_text: anchor.textContent.trim() || "",
21
21
  link_domain: url.hostname,
22
22
  link_classes: anchor.className || ""
23
23
  });
@@ -1 +1 @@
1
- {"version":3,"file":"use-outbound-click-analytics.cjs","names":[],"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { track } from '../track/index';\n\n/**\n * Tracks outbound link clicks - when a user clicks a link that leads away\n * from the current domain to another website.\n */\nexport function useOutboundClickAnalytics() {\n useEffect(() => {\n const onClick = (event: MouseEvent) => {\n // Find the closest anchor element from the clicked target\n const target = event.target as HTMLElement;\n const anchor = target.closest('a');\n if (!anchor || !anchor.href) return;\n\n try {\n const url = new URL(anchor.href, window.location.origin);\n\n // Check if it's an external link (different hostname)\n if (url.hostname !== window.location.hostname) {\n track('click', {\n outbound: true,\n link_id: anchor.id || '',\n link_url: anchor.href,\n link_text: anchor.textContent?.trim() || '',\n link_domain: url.hostname,\n link_classes: anchor.className || '',\n });\n }\n } catch {\n // Invalid URL, ignore\n }\n };\n\n document.addEventListener('click', onClick, { passive: true, capture: true });\n return () => document.removeEventListener('click', onClick, { capture: true });\n }, []);\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,4BAA4B;CAC1C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,WAAW,UAAsB;GAGrC,MAAM,SADS,MAAM,OACC,QAAQ,GAAG;GACjC,IAAI,CAAC,UAAU,CAAC,OAAO,MAAM;GAE7B,IAAI;IACF,MAAM,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,SAAS,MAAM;IAGvD,IAAI,IAAI,aAAa,OAAO,SAAS,UACnC,oBAAA,MAAM,SAAS;KACb,UAAU;KACV,SAAS,OAAO,MAAM;KACtB,UAAU,OAAO;KACjB,WAAW,OAAO,aAAa,KAAK,KAAK;KACzC,aAAa,IAAI;KACjB,cAAc,OAAO,aAAa;IACpC,CAAC;GAEL,QAAQ,CAER;EACF;EAEA,SAAS,iBAAiB,SAAS,SAAS;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC;EAC5E,aAAa,SAAS,oBAAoB,SAAS,SAAS,EAAE,SAAS,KAAK,CAAC;CAC/E,GAAG,CAAC,CAAC;AACP"}
1
+ {"version":3,"file":"use-outbound-click-analytics.cjs","names":[],"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { track } from '../track/index';\n\n/**\n * Tracks outbound link clicks - when a user clicks a link that leads away\n * from the current domain to another website.\n */\nexport function useOutboundClickAnalytics() {\n useEffect(() => {\n const onClick = (event: MouseEvent) => {\n // Find the closest anchor element from the clicked target\n const target = event.target as HTMLElement;\n const anchor = target.closest('a');\n if (!anchor?.href) return;\n\n try {\n const url = new URL(anchor.href, window.location.origin);\n\n // Check if it's an external link (different hostname)\n if (url.hostname !== window.location.hostname) {\n track('click', {\n outbound: true,\n link_id: anchor.id || '',\n link_url: anchor.href,\n link_text: anchor.textContent.trim() || '',\n link_domain: url.hostname,\n link_classes: anchor.className || '',\n });\n }\n } catch {\n // Invalid URL, ignore\n }\n };\n\n document.addEventListener('click', onClick, { passive: true, capture: true });\n return () => document.removeEventListener('click', onClick, { capture: true });\n }, []);\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,4BAA4B;CAC1C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,WAAW,UAAsB;GAGrC,MAAM,SADS,MAAM,OACC,QAAQ,GAAG;GACjC,IAAI,CAAC,QAAQ,MAAM;GAEnB,IAAI;IACF,MAAM,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,SAAS,MAAM;IAGvD,IAAI,IAAI,aAAa,OAAO,SAAS,UACnC,oBAAA,MAAM,SAAS;KACb,UAAU;KACV,SAAS,OAAO,MAAM;KACtB,UAAU,OAAO;KACjB,WAAW,OAAO,YAAY,KAAK,KAAK;KACxC,aAAa,IAAI;KACjB,cAAc,OAAO,aAAa;IACpC,CAAC;GAEL,QAAQ,CAER;EACF;EAEA,SAAS,iBAAiB,SAAS,SAAS;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC;EAC5E,aAAa,SAAS,oBAAoB,SAAS,SAAS,EAAE,SAAS,KAAK,CAAC;CAC/E,GAAG,CAAC,CAAC;AACP"}
@@ -9,14 +9,14 @@ function useOutboundClickAnalytics() {
9
9
  useEffect(() => {
10
10
  const onClick = (event) => {
11
11
  const anchor = event.target.closest("a");
12
- if (!anchor || !anchor.href) return;
12
+ if (!anchor?.href) return;
13
13
  try {
14
14
  const url = new URL(anchor.href, window.location.origin);
15
15
  if (url.hostname !== window.location.hostname) track("click", {
16
16
  outbound: true,
17
17
  link_id: anchor.id || "",
18
18
  link_url: anchor.href,
19
- link_text: anchor.textContent?.trim() || "",
19
+ link_text: anchor.textContent.trim() || "",
20
20
  link_domain: url.hostname,
21
21
  link_classes: anchor.className || ""
22
22
  });
@@ -1 +1 @@
1
- {"version":3,"file":"use-outbound-click-analytics.mjs","names":[],"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { track } from '../track/index';\n\n/**\n * Tracks outbound link clicks - when a user clicks a link that leads away\n * from the current domain to another website.\n */\nexport function useOutboundClickAnalytics() {\n useEffect(() => {\n const onClick = (event: MouseEvent) => {\n // Find the closest anchor element from the clicked target\n const target = event.target as HTMLElement;\n const anchor = target.closest('a');\n if (!anchor || !anchor.href) return;\n\n try {\n const url = new URL(anchor.href, window.location.origin);\n\n // Check if it's an external link (different hostname)\n if (url.hostname !== window.location.hostname) {\n track('click', {\n outbound: true,\n link_id: anchor.id || '',\n link_url: anchor.href,\n link_text: anchor.textContent?.trim() || '',\n link_domain: url.hostname,\n link_classes: anchor.className || '',\n });\n }\n } catch {\n // Invalid URL, ignore\n }\n };\n\n document.addEventListener('click', onClick, { passive: true, capture: true });\n return () => document.removeEventListener('click', onClick, { capture: true });\n }, []);\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,4BAA4B;CAC1C,gBAAgB;EACd,MAAM,WAAW,UAAsB;GAGrC,MAAM,SADS,MAAM,OACC,QAAQ,GAAG;GACjC,IAAI,CAAC,UAAU,CAAC,OAAO,MAAM;GAE7B,IAAI;IACF,MAAM,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,SAAS,MAAM;IAGvD,IAAI,IAAI,aAAa,OAAO,SAAS,UACnC,MAAM,SAAS;KACb,UAAU;KACV,SAAS,OAAO,MAAM;KACtB,UAAU,OAAO;KACjB,WAAW,OAAO,aAAa,KAAK,KAAK;KACzC,aAAa,IAAI;KACjB,cAAc,OAAO,aAAa;IACpC,CAAC;GAEL,QAAQ,CAER;EACF;EAEA,SAAS,iBAAiB,SAAS,SAAS;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC;EAC5E,aAAa,SAAS,oBAAoB,SAAS,SAAS,EAAE,SAAS,KAAK,CAAC;CAC/E,GAAG,CAAC,CAAC;AACP"}
1
+ {"version":3,"file":"use-outbound-click-analytics.mjs","names":[],"sources":["../../src/hooks/use-outbound-click-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { track } from '../track/index';\n\n/**\n * Tracks outbound link clicks - when a user clicks a link that leads away\n * from the current domain to another website.\n */\nexport function useOutboundClickAnalytics() {\n useEffect(() => {\n const onClick = (event: MouseEvent) => {\n // Find the closest anchor element from the clicked target\n const target = event.target as HTMLElement;\n const anchor = target.closest('a');\n if (!anchor?.href) return;\n\n try {\n const url = new URL(anchor.href, window.location.origin);\n\n // Check if it's an external link (different hostname)\n if (url.hostname !== window.location.hostname) {\n track('click', {\n outbound: true,\n link_id: anchor.id || '',\n link_url: anchor.href,\n link_text: anchor.textContent.trim() || '',\n link_domain: url.hostname,\n link_classes: anchor.className || '',\n });\n }\n } catch {\n // Invalid URL, ignore\n }\n };\n\n document.addEventListener('click', onClick, { passive: true, capture: true });\n return () => document.removeEventListener('click', onClick, { capture: true });\n }, []);\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,4BAA4B;CAC1C,gBAAgB;EACd,MAAM,WAAW,UAAsB;GAGrC,MAAM,SADS,MAAM,OACC,QAAQ,GAAG;GACjC,IAAI,CAAC,QAAQ,MAAM;GAEnB,IAAI;IACF,MAAM,MAAM,IAAI,IAAI,OAAO,MAAM,OAAO,SAAS,MAAM;IAGvD,IAAI,IAAI,aAAa,OAAO,SAAS,UACnC,MAAM,SAAS;KACb,UAAU;KACV,SAAS,OAAO,MAAM;KACtB,UAAU,OAAO;KACjB,WAAW,OAAO,YAAY,KAAK,KAAK;KACxC,aAAa,IAAI;KACjB,cAAc,OAAO,aAAa;IACpC,CAAC;GAEL,QAAQ,CAER;EACF;EAEA,SAAS,iBAAiB,SAAS,SAAS;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC;EAC5E,aAAa,SAAS,oBAAoB,SAAS,SAAS,EAAE,SAAS,KAAK,CAAC;CAC/E,GAAG,CAAC,CAAC;AACP"}
package/dist/index.cjs CHANGED
@@ -13,7 +13,6 @@ exports.createFeedbackSchema = require_schema_index.createFeedbackSchema;
13
13
  exports.createLink = require_link_index.createLink;
14
14
  exports.createLinkSchema = require_schema_index.createLinkSchema;
15
15
  exports.createTrackEventSchema = require_schema_index.createTrackEventSchema;
16
- exports.createTrackEventSchemaV1 = require_schema_index.createTrackEventSchemaV1;
17
16
  exports.createVisitorSchema = require_schema_index.createVisitorSchema;
18
17
  exports.getLink = require_link_index.getLink;
19
18
  exports.getVisitor = require_visitor_index.getVisitor;
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { ALL_ENVIRONMENTS, ALL_PLATFORMS, CreateFeedbackDTO, CreateLinkDTO, createFeedbackSchema, createLinkSchema, createTrackEventSchema, createTrackEventSchemaV1, createVisitorSchema, updateVisitorSchema } from "./schema/index.cjs";
1
+ import { ALL_ENVIRONMENTS, ALL_PLATFORMS, CreateFeedbackDTO, CreateLinkDTO, createFeedbackSchema, createLinkSchema, createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from "./schema/index.cjs";
2
2
  import { sendFeedback } from "./feedback/index.cjs";
3
3
  import { AllowedPropertyValues, Environment, Platform, TrackProperties, TrackTags, UTMParams, UserProvidedData } from "./track/types.cjs";
4
4
  import { useTrackImpression } from "./hooks/use-track-impression.cjs";
@@ -8,4 +8,4 @@ import { sendBeacon, track, trackAsync } from "./track/index.cjs";
8
8
  import { getVisitor, setVisitor } from "./visitor/index.cjs";
9
9
  import { Link, createLink, getLink } from "./link/index.cjs";
10
10
  import { stripeMinorUnits } from "./utils/stripe.cjs";
11
- export { ALL_ENVIRONMENTS, ALL_PLATFORMS, type AllowedPropertyValues, type CreateFeedbackDTO, type CreateLinkDTO, type Environment, type Link, type Platform, type TrackProperties, type TrackTags, type UTMParams, type UserProvidedData, type VisitorProperties, createFeedbackSchema, createLink, createLinkSchema, createTrackEventSchema, createTrackEventSchemaV1, createVisitorSchema, getLink, getVisitor, sendBeacon, sendFeedback, setVisitor, setupAnalytics, stripeMinorUnits, track, trackAsync, updateVisitorSchema, useTrackImpression };
11
+ export { ALL_ENVIRONMENTS, ALL_PLATFORMS, type AllowedPropertyValues, type CreateFeedbackDTO, type CreateLinkDTO, type Environment, type Link, type Platform, type TrackProperties, type TrackTags, type UTMParams, type UserProvidedData, type VisitorProperties, createFeedbackSchema, createLink, createLinkSchema, createTrackEventSchema, createVisitorSchema, getLink, getVisitor, sendBeacon, sendFeedback, setVisitor, setupAnalytics, stripeMinorUnits, track, trackAsync, updateVisitorSchema, useTrackImpression };
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { ALL_ENVIRONMENTS, ALL_PLATFORMS, CreateFeedbackDTO, CreateLinkDTO, createFeedbackSchema, createLinkSchema, createTrackEventSchema, createTrackEventSchemaV1, createVisitorSchema, updateVisitorSchema } from "./schema/index.mjs";
1
+ import { ALL_ENVIRONMENTS, ALL_PLATFORMS, CreateFeedbackDTO, CreateLinkDTO, createFeedbackSchema, createLinkSchema, createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from "./schema/index.mjs";
2
2
  import { sendFeedback } from "./feedback/index.mjs";
3
3
  import { AllowedPropertyValues, Environment, Platform, TrackProperties, TrackTags, UTMParams, UserProvidedData } from "./track/types.mjs";
4
4
  import { useTrackImpression } from "./hooks/use-track-impression.mjs";
@@ -8,4 +8,4 @@ import { sendBeacon, track, trackAsync } from "./track/index.mjs";
8
8
  import { getVisitor, setVisitor } from "./visitor/index.mjs";
9
9
  import { Link, createLink, getLink } from "./link/index.mjs";
10
10
  import { stripeMinorUnits } from "./utils/stripe.mjs";
11
- export { ALL_ENVIRONMENTS, ALL_PLATFORMS, type AllowedPropertyValues, type CreateFeedbackDTO, type CreateLinkDTO, type Environment, type Link, type Platform, type TrackProperties, type TrackTags, type UTMParams, type UserProvidedData, type VisitorProperties, createFeedbackSchema, createLink, createLinkSchema, createTrackEventSchema, createTrackEventSchemaV1, createVisitorSchema, getLink, getVisitor, sendBeacon, sendFeedback, setVisitor, setupAnalytics, stripeMinorUnits, track, trackAsync, updateVisitorSchema, useTrackImpression };
11
+ export { ALL_ENVIRONMENTS, ALL_PLATFORMS, type AllowedPropertyValues, type CreateFeedbackDTO, type CreateLinkDTO, type Environment, type Link, type Platform, type TrackProperties, type TrackTags, type UTMParams, type UserProvidedData, type VisitorProperties, createFeedbackSchema, createLink, createLinkSchema, createTrackEventSchema, createVisitorSchema, getLink, getVisitor, sendBeacon, sendFeedback, setVisitor, setupAnalytics, stripeMinorUnits, track, trackAsync, updateVisitorSchema, useTrackImpression };
package/dist/index.mjs CHANGED
@@ -3,7 +3,7 @@ import { getVisitor, setVisitor } from "./visitor/index.mjs";
3
3
  import { sendBeacon, track, trackAsync } from "./track/index.mjs";
4
4
  import { sendFeedback } from "./feedback/index.mjs";
5
5
  import { createLink, getLink } from "./link/index.mjs";
6
- import { ALL_ENVIRONMENTS, ALL_PLATFORMS, createFeedbackSchema, createLinkSchema, createTrackEventSchema, createTrackEventSchemaV1, createVisitorSchema, updateVisitorSchema } from "./schema/index.mjs";
6
+ import { ALL_ENVIRONMENTS, ALL_PLATFORMS, createFeedbackSchema, createLinkSchema, createTrackEventSchema, createVisitorSchema, updateVisitorSchema } from "./schema/index.mjs";
7
7
  import { stripeMinorUnits } from "./utils/stripe.mjs";
8
8
  import { useTrackImpression } from "./hooks/use-track-impression.mjs";
9
- export { ALL_ENVIRONMENTS, ALL_PLATFORMS, createFeedbackSchema, createLink, createLinkSchema, createTrackEventSchema, createTrackEventSchemaV1, createVisitorSchema, getLink, getVisitor, sendBeacon, sendFeedback, setVisitor, setupAnalytics, stripeMinorUnits, track, trackAsync, updateVisitorSchema, useTrackImpression };
9
+ export { ALL_ENVIRONMENTS, ALL_PLATFORMS, createFeedbackSchema, createLink, createLinkSchema, createTrackEventSchema, createVisitorSchema, getLink, getVisitor, sendBeacon, sendFeedback, setVisitor, setupAnalytics, stripeMinorUnits, track, trackAsync, updateVisitorSchema, useTrackImpression };
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- let react_native = require("react-native");
3
2
  let expo_application = require("expo-application");
4
3
  let expo_clipboard = require("expo-clipboard");
5
4
  let expo_device = require("expo-device");
6
5
  let expo_localization = require("expo-localization");
6
+ let react_native = require("react-native");
7
7
  //#region src/native/fingerprint.ts
8
8
  /**
9
9
  * reference: https://docs.swmansion.com/detour/docs/Architecture/matching
@@ -32,8 +32,8 @@ async function getProbabilisticFingerprint(shouldUseClipboard = true) {
32
32
  screen_width,
33
33
  screen_height,
34
34
  screen_resolution: `${screen_width}x${screen_height}`,
35
- language: (0, expo_localization.getLocales)()?.[0]?.languageTag ?? null,
36
- time_zone: (0, expo_localization.getCalendars)()?.[0]?.timeZone ?? null,
35
+ language: (0, expo_localization.getLocales)().at(0)?.languageTag ?? null,
36
+ time_zone: (0, expo_localization.getCalendars)().at(0)?.timeZone ?? null,
37
37
  install_referrer,
38
38
  pasted_link: shouldUseClipboard ? await (0, expo_clipboard.getStringAsync)() : null,
39
39
  timestamp: Date.now()
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.cjs","names":["Platform","Dimensions","osName","osVersion","supportedCpuArchitectures","modelName","manufacturer","modelId","PixelRatio"],"sources":["../../src/native/fingerprint.ts"],"sourcesContent":["/**\n * reference: https://docs.swmansion.com/detour/docs/Architecture/matching\n *\n */\nimport { getInstallReferrerAsync } from 'expo-application';\nimport { getStringAsync } from 'expo-clipboard';\nimport {\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n supportedCpuArchitectures,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\n\n// used when install referrer on android is available\nexport type DeterministicFingerprint = {\n click_id: string | null;\n};\n\nexport type ProbabilisticFingerprint = {\n os: string | null;\n os_name: string | null;\n os_version: string | null;\n cpu_architecture: string | null;\n platform: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\n device: string | null;\n device_vendor: string | null;\n device_model_id: string | null;\n device_pixel_ratio: number;\n screen_width: number;\n screen_height: number;\n screen_resolution: string;\n language: string | null;\n time_zone: string | null;\n install_referrer: string | null;\n pasted_link: string | null;\n timestamp: number; // 7 days validity\n};\n\nexport async function getDeterministicFingerprint(): Promise<DeterministicFingerprint> {\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n if (!install_referrer) return { click_id: null };\n const params = new URLSearchParams(install_referrer);\n return { click_id: params.get('click_id') ?? null };\n}\n\nexport async function getProbabilisticFingerprint(\n shouldUseClipboard = true\n): Promise<ProbabilisticFingerprint> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n\n return {\n os: osName && osVersion ? `${osName} ${osVersion}` : null,\n os_name: osName,\n os_version: osVersion,\n cpu_architecture: supportedCpuArchitectures?.at(0) ?? null,\n platform: Platform.OS,\n device: modelName,\n device_vendor: manufacturer,\n device_model_id: modelId,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n language: getLocales()?.[0]?.languageTag ?? null,\n time_zone: getCalendars()?.[0]?.timeZone ?? null,\n install_referrer,\n pasted_link: shouldUseClipboard ? await getStringAsync() : null,\n timestamp: Date.now(),\n };\n}\n"],"mappings":";;;;;;;;;;;AA0CA,eAAsB,8BAAiE;CACrF,MAAM,mBAAmBA,aAAAA,SAAS,OAAO,YAAY,OAAA,GAAA,iBAAA,wBAAA,CAA8B,IAAI;CACvF,IAAI,CAAC,kBAAkB,OAAO,EAAE,UAAU,KAAK;CAE/C,OAAO,EAAE,UAAU,IADA,gBAAgB,gBACX,CAAC,CAAC,IAAI,UAAU,KAAK,KAAK;AACpD;AAEA,eAAsB,4BACpB,qBAAqB,MACc;CACnC,MAAM,SAASC,aAAAA,WAAW,IAAI,QAAQ;CACtC,MAAM,eAAe,KAAK,MAAM,OAAO,KAAK;CAC5C,MAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;CAC9C,MAAM,mBAAmBD,aAAAA,SAAS,OAAO,YAAY,OAAA,GAAA,iBAAA,wBAAA,CAA8B,IAAI;CAEvF,OAAO;EACL,IAAIE,YAAAA,UAAUC,YAAAA,YAAY,GAAGD,YAAAA,OAAO,GAAGC,YAAAA,cAAc;EACrD,SAASD,YAAAA;EACT,YAAYC,YAAAA;EACZ,kBAAkBC,YAAAA,2BAA2B,GAAG,CAAC,KAAK;EACtD,UAAUJ,aAAAA,SAAS;EACnB,QAAQK,YAAAA;EACR,eAAeC,YAAAA;EACf,iBAAiBC,YAAAA;EACjB,oBAAoBC,aAAAA,WAAW,IAAI;EACnC;EACA;EACA,mBAAmB,GAAG,aAAa,GAAG;EACtC,WAAA,GAAA,kBAAA,WAAA,CAAqB,CAAC,GAAG,EAAE,EAAE,eAAe;EAC5C,YAAA,GAAA,kBAAA,aAAA,CAAwB,CAAC,GAAG,EAAE,EAAE,YAAY;EAC5C;EACA,aAAa,qBAAqB,OAAA,GAAA,eAAA,eAAA,CAAqB,IAAI;EAC3D,WAAW,KAAK,IAAI;CACtB;AACF"}
1
+ {"version":3,"file":"fingerprint.cjs","names":["Platform","Dimensions","osName","osVersion","supportedCpuArchitectures","modelName","manufacturer","modelId","PixelRatio"],"sources":["../../src/native/fingerprint.ts"],"sourcesContent":["/**\n * reference: https://docs.swmansion.com/detour/docs/Architecture/matching\n *\n */\nimport { getInstallReferrerAsync } from 'expo-application';\nimport { getStringAsync } from 'expo-clipboard';\nimport {\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n supportedCpuArchitectures,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\n\n// used when install referrer on android is available\nexport type DeterministicFingerprint = {\n click_id: string | null;\n};\n\nexport type ProbabilisticFingerprint = {\n os: string | null;\n os_name: string | null;\n os_version: string | null;\n cpu_architecture: string | null;\n platform: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\n device: string | null;\n device_vendor: string | null;\n device_model_id: string | null;\n device_pixel_ratio: number;\n screen_width: number;\n screen_height: number;\n screen_resolution: string;\n language: string | null;\n time_zone: string | null;\n install_referrer: string | null;\n pasted_link: string | null;\n timestamp: number; // 7 days validity\n};\n\nexport async function getDeterministicFingerprint(): Promise<DeterministicFingerprint> {\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n if (!install_referrer) return { click_id: null };\n const params = new URLSearchParams(install_referrer);\n return { click_id: params.get('click_id') ?? null };\n}\n\nexport async function getProbabilisticFingerprint(\n shouldUseClipboard = true\n): Promise<ProbabilisticFingerprint> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n\n return {\n os: osName && osVersion ? `${osName} ${osVersion}` : null,\n os_name: osName,\n os_version: osVersion,\n cpu_architecture: supportedCpuArchitectures?.at(0) ?? null,\n platform: Platform.OS,\n device: modelName,\n device_vendor: manufacturer,\n device_model_id: modelId,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n language: getLocales().at(0)?.languageTag ?? null,\n time_zone: getCalendars().at(0)?.timeZone ?? null,\n install_referrer,\n pasted_link: shouldUseClipboard ? await getStringAsync() : null,\n timestamp: Date.now(),\n };\n}\n"],"mappings":";;;;;;;;;;;AA0CA,eAAsB,8BAAiE;CACrF,MAAM,mBAAmBA,aAAAA,SAAS,OAAO,YAAY,OAAA,GAAA,iBAAA,wBAAA,CAA8B,IAAI;CACvF,IAAI,CAAC,kBAAkB,OAAO,EAAE,UAAU,KAAK;CAE/C,OAAO,EAAE,UAAU,IADA,gBAAgB,gBACX,CAAC,CAAC,IAAI,UAAU,KAAK,KAAK;AACpD;AAEA,eAAsB,4BACpB,qBAAqB,MACc;CACnC,MAAM,SAASC,aAAAA,WAAW,IAAI,QAAQ;CACtC,MAAM,eAAe,KAAK,MAAM,OAAO,KAAK;CAC5C,MAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;CAC9C,MAAM,mBAAmBD,aAAAA,SAAS,OAAO,YAAY,OAAA,GAAA,iBAAA,wBAAA,CAA8B,IAAI;CAEvF,OAAO;EACL,IAAIE,YAAAA,UAAUC,YAAAA,YAAY,GAAGD,YAAAA,OAAO,GAAGC,YAAAA,cAAc;EACrD,SAASD,YAAAA;EACT,YAAYC,YAAAA;EACZ,kBAAkBC,YAAAA,2BAA2B,GAAG,CAAC,KAAK;EACtD,UAAUJ,aAAAA,SAAS;EACnB,QAAQK,YAAAA;EACR,eAAeC,YAAAA;EACf,iBAAiBC,YAAAA;EACjB,oBAAoBC,aAAAA,WAAW,IAAI;EACnC;EACA;EACA,mBAAmB,GAAG,aAAa,GAAG;EACtC,WAAA,GAAA,kBAAA,WAAA,CAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe;EAC7C,YAAA,GAAA,kBAAA,aAAA,CAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY;EAC7C;EACA,aAAa,qBAAqB,OAAA,GAAA,eAAA,eAAA,CAAqB,IAAI;EAC3D,WAAW,KAAK,IAAI;CACtB;AACF"}
@@ -1,8 +1,8 @@
1
- import { Dimensions, PixelRatio, Platform } from "react-native";
2
1
  import { getInstallReferrerAsync } from "expo-application";
3
2
  import { getStringAsync } from "expo-clipboard";
4
3
  import { manufacturer, modelId, modelName, osName, osVersion, supportedCpuArchitectures } from "expo-device";
5
4
  import { getCalendars, getLocales } from "expo-localization";
5
+ import { Dimensions, PixelRatio, Platform } from "react-native";
6
6
  //#region src/native/fingerprint.ts
7
7
  /**
8
8
  * reference: https://docs.swmansion.com/detour/docs/Architecture/matching
@@ -31,8 +31,8 @@ async function getProbabilisticFingerprint(shouldUseClipboard = true) {
31
31
  screen_width,
32
32
  screen_height,
33
33
  screen_resolution: `${screen_width}x${screen_height}`,
34
- language: getLocales()?.[0]?.languageTag ?? null,
35
- time_zone: getCalendars()?.[0]?.timeZone ?? null,
34
+ language: getLocales().at(0)?.languageTag ?? null,
35
+ time_zone: getCalendars().at(0)?.timeZone ?? null,
36
36
  install_referrer,
37
37
  pasted_link: shouldUseClipboard ? await getStringAsync() : null,
38
38
  timestamp: Date.now()
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.mjs","names":[],"sources":["../../src/native/fingerprint.ts"],"sourcesContent":["/**\n * reference: https://docs.swmansion.com/detour/docs/Architecture/matching\n *\n */\nimport { getInstallReferrerAsync } from 'expo-application';\nimport { getStringAsync } from 'expo-clipboard';\nimport {\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n supportedCpuArchitectures,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\n\n// used when install referrer on android is available\nexport type DeterministicFingerprint = {\n click_id: string | null;\n};\n\nexport type ProbabilisticFingerprint = {\n os: string | null;\n os_name: string | null;\n os_version: string | null;\n cpu_architecture: string | null;\n platform: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\n device: string | null;\n device_vendor: string | null;\n device_model_id: string | null;\n device_pixel_ratio: number;\n screen_width: number;\n screen_height: number;\n screen_resolution: string;\n language: string | null;\n time_zone: string | null;\n install_referrer: string | null;\n pasted_link: string | null;\n timestamp: number; // 7 days validity\n};\n\nexport async function getDeterministicFingerprint(): Promise<DeterministicFingerprint> {\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n if (!install_referrer) return { click_id: null };\n const params = new URLSearchParams(install_referrer);\n return { click_id: params.get('click_id') ?? null };\n}\n\nexport async function getProbabilisticFingerprint(\n shouldUseClipboard = true\n): Promise<ProbabilisticFingerprint> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n\n return {\n os: osName && osVersion ? `${osName} ${osVersion}` : null,\n os_name: osName,\n os_version: osVersion,\n cpu_architecture: supportedCpuArchitectures?.at(0) ?? null,\n platform: Platform.OS,\n device: modelName,\n device_vendor: manufacturer,\n device_model_id: modelId,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n language: getLocales()?.[0]?.languageTag ?? null,\n time_zone: getCalendars()?.[0]?.timeZone ?? null,\n install_referrer,\n pasted_link: shouldUseClipboard ? await getStringAsync() : null,\n timestamp: Date.now(),\n };\n}\n"],"mappings":";;;;;;;;;;AA0CA,eAAsB,8BAAiE;CACrF,MAAM,mBAAmB,SAAS,OAAO,YAAY,MAAM,wBAAwB,IAAI;CACvF,IAAI,CAAC,kBAAkB,OAAO,EAAE,UAAU,KAAK;CAE/C,OAAO,EAAE,UAAU,IADA,gBAAgB,gBACX,CAAC,CAAC,IAAI,UAAU,KAAK,KAAK;AACpD;AAEA,eAAsB,4BACpB,qBAAqB,MACc;CACnC,MAAM,SAAS,WAAW,IAAI,QAAQ;CACtC,MAAM,eAAe,KAAK,MAAM,OAAO,KAAK;CAC5C,MAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;CAC9C,MAAM,mBAAmB,SAAS,OAAO,YAAY,MAAM,wBAAwB,IAAI;CAEvF,OAAO;EACL,IAAI,UAAU,YAAY,GAAG,OAAO,GAAG,cAAc;EACrD,SAAS;EACT,YAAY;EACZ,kBAAkB,2BAA2B,GAAG,CAAC,KAAK;EACtD,UAAU,SAAS;EACnB,QAAQ;EACR,eAAe;EACf,iBAAiB;EACjB,oBAAoB,WAAW,IAAI;EACnC;EACA;EACA,mBAAmB,GAAG,aAAa,GAAG;EACtC,UAAU,WAAW,CAAC,GAAG,EAAE,EAAE,eAAe;EAC5C,WAAW,aAAa,CAAC,GAAG,EAAE,EAAE,YAAY;EAC5C;EACA,aAAa,qBAAqB,MAAM,eAAe,IAAI;EAC3D,WAAW,KAAK,IAAI;CACtB;AACF"}
1
+ {"version":3,"file":"fingerprint.mjs","names":[],"sources":["../../src/native/fingerprint.ts"],"sourcesContent":["/**\n * reference: https://docs.swmansion.com/detour/docs/Architecture/matching\n *\n */\nimport { getInstallReferrerAsync } from 'expo-application';\nimport { getStringAsync } from 'expo-clipboard';\nimport {\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n supportedCpuArchitectures,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\n\n// used when install referrer on android is available\nexport type DeterministicFingerprint = {\n click_id: string | null;\n};\n\nexport type ProbabilisticFingerprint = {\n os: string | null;\n os_name: string | null;\n os_version: string | null;\n cpu_architecture: string | null;\n platform: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\n device: string | null;\n device_vendor: string | null;\n device_model_id: string | null;\n device_pixel_ratio: number;\n screen_width: number;\n screen_height: number;\n screen_resolution: string;\n language: string | null;\n time_zone: string | null;\n install_referrer: string | null;\n pasted_link: string | null;\n timestamp: number; // 7 days validity\n};\n\nexport async function getDeterministicFingerprint(): Promise<DeterministicFingerprint> {\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n if (!install_referrer) return { click_id: null };\n const params = new URLSearchParams(install_referrer);\n return { click_id: params.get('click_id') ?? null };\n}\n\nexport async function getProbabilisticFingerprint(\n shouldUseClipboard = true\n): Promise<ProbabilisticFingerprint> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : null;\n\n return {\n os: osName && osVersion ? `${osName} ${osVersion}` : null,\n os_name: osName,\n os_version: osVersion,\n cpu_architecture: supportedCpuArchitectures?.at(0) ?? null,\n platform: Platform.OS,\n device: modelName,\n device_vendor: manufacturer,\n device_model_id: modelId,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n language: getLocales().at(0)?.languageTag ?? null,\n time_zone: getCalendars().at(0)?.timeZone ?? null,\n install_referrer,\n pasted_link: shouldUseClipboard ? await getStringAsync() : null,\n timestamp: Date.now(),\n };\n}\n"],"mappings":";;;;;;;;;;AA0CA,eAAsB,8BAAiE;CACrF,MAAM,mBAAmB,SAAS,OAAO,YAAY,MAAM,wBAAwB,IAAI;CACvF,IAAI,CAAC,kBAAkB,OAAO,EAAE,UAAU,KAAK;CAE/C,OAAO,EAAE,UAAU,IADA,gBAAgB,gBACX,CAAC,CAAC,IAAI,UAAU,KAAK,KAAK;AACpD;AAEA,eAAsB,4BACpB,qBAAqB,MACc;CACnC,MAAM,SAAS,WAAW,IAAI,QAAQ;CACtC,MAAM,eAAe,KAAK,MAAM,OAAO,KAAK;CAC5C,MAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;CAC9C,MAAM,mBAAmB,SAAS,OAAO,YAAY,MAAM,wBAAwB,IAAI;CAEvF,OAAO;EACL,IAAI,UAAU,YAAY,GAAG,OAAO,GAAG,cAAc;EACrD,SAAS;EACT,YAAY;EACZ,kBAAkB,2BAA2B,GAAG,CAAC,KAAK;EACtD,UAAU,SAAS;EACnB,QAAQ;EACR,eAAe;EACf,iBAAiB;EACjB,oBAAoB,WAAW,IAAI;EACnC;EACA;EACA,mBAAmB,GAAG,aAAa,GAAG;EACtC,UAAU,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe;EAC7C,WAAW,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY;EAC7C;EACA,aAAa,qBAAqB,MAAM,eAAe,IAAI;EAC3D,WAAW,KAAK,IAAI;CACtB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"firebase.cjs","names":[],"sources":["../../src/native/firebase.ts"],"sourcesContent":["import { getAnalytics, logEvent } from '@react-native-firebase/analytics';\nimport type { StandardEvents } from '../track/gtag';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nconst analytics = getAnalytics();\n\nexport async function sendFirebaseEvent<T extends EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>\n) {\n if (name === 'screen_view') {\n await logEvent(analytics, 'screen_view', {\n firebase_screen: (properties as StandardEvents['screen_view'])?.screen_name,\n firebase_screen_class: (properties as StandardEvents['screen_view'])?.screen_class,\n });\n } else {\n await logEvent(analytics, name, properties);\n }\n}\n"],"mappings":";;;AAIA,MAAM,aAAA,GAAA,iCAAA,aAAA,CAAyB;AAE/B,eAAsB,kBACpB,MACA,YACA;CACA,IAAI,SAAS,eACX,OAAA,GAAA,iCAAA,SAAA,CAAe,WAAW,eAAe;EACvC,iBAAkB,YAA8C;EAChE,uBAAwB,YAA8C;CACxE,CAAC;MAED,OAAA,GAAA,iCAAA,SAAA,CAAe,WAAW,MAAM,UAAU;AAE9C"}
1
+ {"version":3,"file":"firebase.cjs","names":[],"sources":["../../src/native/firebase.ts"],"sourcesContent":["import { getAnalytics, logEvent } from '@react-native-firebase/analytics';\nimport type { StandardEvents } from '../track/gtag';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nconst analytics = getAnalytics();\n\nexport async function sendFirebaseEvent<T extends EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>\n) {\n if (name === 'screen_view') {\n await logEvent(analytics, 'screen_view', {\n firebase_screen: (properties as StandardEvents['screen_view'] | undefined)?.screen_name,\n firebase_screen_class: (properties as StandardEvents['screen_view'] | undefined)\n ?.screen_class,\n });\n } else {\n await logEvent(analytics, name, properties);\n }\n}\n"],"mappings":";;;AAIA,MAAM,aAAA,GAAA,iCAAA,aAAA,CAAyB;AAE/B,eAAsB,kBACpB,MACA,YACA;CACA,IAAI,SAAS,eACX,OAAA,GAAA,iCAAA,SAAA,CAAe,WAAW,eAAe;EACvC,iBAAkB,YAA0D;EAC5E,uBAAwB,YACpB;CACN,CAAC;MAED,OAAA,GAAA,iCAAA,SAAA,CAAe,WAAW,MAAM,UAAU;AAE9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"firebase.mjs","names":[],"sources":["../../src/native/firebase.ts"],"sourcesContent":["import { getAnalytics, logEvent } from '@react-native-firebase/analytics';\nimport type { StandardEvents } from '../track/gtag';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nconst analytics = getAnalytics();\n\nexport async function sendFirebaseEvent<T extends EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>\n) {\n if (name === 'screen_view') {\n await logEvent(analytics, 'screen_view', {\n firebase_screen: (properties as StandardEvents['screen_view'])?.screen_name,\n firebase_screen_class: (properties as StandardEvents['screen_view'])?.screen_class,\n });\n } else {\n await logEvent(analytics, name, properties);\n }\n}\n"],"mappings":";;AAIA,MAAM,YAAY,aAAa;AAE/B,eAAsB,kBACpB,MACA,YACA;CACA,IAAI,SAAS,eACX,MAAM,SAAS,WAAW,eAAe;EACvC,iBAAkB,YAA8C;EAChE,uBAAwB,YAA8C;CACxE,CAAC;MAED,MAAM,SAAS,WAAW,MAAM,UAAU;AAE9C"}
1
+ {"version":3,"file":"firebase.mjs","names":[],"sources":["../../src/native/firebase.ts"],"sourcesContent":["import { getAnalytics, logEvent } from '@react-native-firebase/analytics';\nimport type { StandardEvents } from '../track/gtag';\nimport type { EventName, TrackName, TrackProperties } from '../track/types';\n\nconst analytics = getAnalytics();\n\nexport async function sendFirebaseEvent<T extends EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>\n) {\n if (name === 'screen_view') {\n await logEvent(analytics, 'screen_view', {\n firebase_screen: (properties as StandardEvents['screen_view'] | undefined)?.screen_name,\n firebase_screen_class: (properties as StandardEvents['screen_view'] | undefined)\n ?.screen_class,\n });\n } else {\n await logEvent(analytics, name, properties);\n }\n}\n"],"mappings":";;AAIA,MAAM,YAAY,aAAa;AAE/B,eAAsB,kBACpB,MACA,YACA;CACA,IAAI,SAAS,eACX,MAAM,SAAS,WAAW,eAAe;EACvC,iBAAkB,YAA0D;EAC5E,uBAAwB,YACpB;CACN,CAAC;MAED,MAAM,SAAS,WAAW,MAAM,UAAU;AAE9C"}
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_hooks_use_app_analytics = require("../hooks/use-app-analytics.cjs");
3
2
  const require_native_fingerprint = require("./fingerprint.cjs");
4
3
  const require_native_setup = require("./setup.cjs");
4
+ const require_hooks_use_app_analytics = require("../hooks/use-app-analytics.cjs");
5
5
  exports.getDeterministicFingerprint = require_native_fingerprint.getDeterministicFingerprint;
6
6
  exports.getDeviceId = require_native_setup.getDeviceId;
7
7
  exports.getDeviceType = require_native_setup.getDeviceType;
@@ -1,4 +1,4 @@
1
- import { useAppAnalytics } from "../hooks/use-app-analytics.mjs";
2
1
  import { getDeterministicFingerprint, getProbabilisticFingerprint } from "./fingerprint.mjs";
3
2
  import { getDeviceId, getDeviceType, getTags, storage } from "./setup.mjs";
3
+ import { useAppAnalytics } from "../hooks/use-app-analytics.mjs";
4
4
  export { getDeterministicFingerprint, getDeviceId, getDeviceType, getProbabilisticFingerprint, getTags, storage, useAppAnalytics };
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_setup_index = require("../setup/index.cjs");
3
- let react_native = require("react-native");
4
3
  let expo_application = require("expo-application");
5
4
  let expo_device = require("expo-device");
6
5
  let expo_localization = require("expo-localization");
6
+ let react_native = require("react-native");
7
7
  require("expo-sqlite/localStorage/install");
8
8
  let expo_crypto = require("expo-crypto");
9
9
  let expo_tracking_transparency = require("expo-tracking-transparency");
@@ -60,7 +60,6 @@ async function getTags() {
60
60
  os: `${expo_device.osName} ${expo_device.osVersion}`,
61
61
  os_name: expo_device.osName ?? void 0,
62
62
  os_version: expo_device.osVersion ?? void 0,
63
- platform: react_native.Platform.OS,
64
63
  device: expo_device.modelName ?? void 0,
65
64
  device_id: await getDeviceId(),
66
65
  device_type: getDeviceType(),
@@ -71,9 +70,8 @@ async function getTags() {
71
70
  screen_height,
72
71
  screen_resolution: `${screen_width}x${screen_height}`,
73
72
  release: require_setup_index.config.release,
74
- language: (0, expo_localization.getLocales)()?.[0]?.languageTag ?? "en",
75
- time_zone: (0, expo_localization.getCalendars)()?.[0]?.timeZone ?? "UTC",
76
- environment: __DEV__ ? "development" : "production",
73
+ language: (0, expo_localization.getLocales)().at(0)?.languageTag ?? "en",
74
+ time_zone: (0, expo_localization.getCalendars)().at(0)?.timeZone ?? "UTC",
77
75
  source: "app",
78
76
  advertising_id: (0, expo_tracking_transparency.getAdvertisingId)() ?? void 0,
79
77
  install_referrer,
@@ -1 +1 @@
1
- {"version":3,"file":"setup.cjs","names":["Platform","deviceType","DeviceType","Dimensions","URLSearchParams","osName","osVersion","modelName","manufacturer","modelId","PixelRatio","config"],"sources":["../../src/native/setup.ts"],"sourcesContent":["import 'expo-sqlite/localStorage/install';\nimport { getAndroidId, getInstallReferrerAsync, getIosIdForVendorAsync } from 'expo-application';\nimport { randomUUID } from 'expo-crypto';\nimport {\n DeviceType,\n deviceType,\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { getAdvertisingId } from 'expo-tracking-transparency';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\nimport { URLSearchParams } from 'react-native-url-polyfill';\nimport { type Storage, cache, config } from '../setup/index';\nimport type { TrackTags } from '../track/types';\n\nconst map = new Map<string, string>();\n\nexport const storage: Storage = {\n getItem: (key) => {\n try {\n return localStorage.getItem(key);\n } catch {\n console.error('localStorage is not available');\n return map.get(key) ?? null;\n }\n },\n setItem: (key, value) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n console.error('localStorage is not available');\n map.set(key, value);\n }\n },\n};\n\nexport async function getDeviceId(): Promise<string> {\n let deviceId: string | null = null;\n if (Platform.OS === 'ios') {\n deviceId = await getIosIdForVendorAsync();\n } else if (Platform.OS === 'android') {\n deviceId = getAndroidId();\n }\n if (!deviceId) {\n deviceId = localStorage.getItem('device_id');\n if (!deviceId) {\n deviceId = randomUUID();\n localStorage.setItem('device_id', deviceId);\n }\n }\n return deviceId;\n}\n\nexport function getDeviceType(): string | undefined {\n switch (deviceType) {\n case DeviceType.PHONE:\n return 'mobile';\n case DeviceType.TABLET:\n return 'tablet';\n case DeviceType.DESKTOP:\n return 'desktop';\n case DeviceType.TV:\n return 'smarttv';\n default:\n return undefined;\n }\n}\n\nexport async function getTags(): Promise<TrackTags> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : undefined;\n const params = new URLSearchParams(install_referrer);\n\n const tags: TrackTags = {\n os: `${osName} ${osVersion}`,\n os_name: osName ?? undefined,\n os_version: osVersion ?? undefined,\n platform: Platform.OS,\n device: modelName ?? undefined,\n device_id: await getDeviceId(),\n device_type: getDeviceType(),\n device_vendor: manufacturer ?? undefined,\n device_model_id: modelId ?? undefined,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n release: config.release,\n language: getLocales()?.[0]?.languageTag ?? 'en',\n time_zone: getCalendars()?.[0]?.timeZone ?? 'UTC',\n environment: __DEV__ ? 'development' : 'production',\n source: 'app',\n // ads\n advertising_id: getAdvertisingId() ?? undefined,\n install_referrer,\n // utm params\n utm_source: params.get('utm_source') ?? undefined,\n utm_medium: params.get('utm_medium') ?? undefined,\n utm_campaign: params.get('utm_campaign') ?? undefined,\n utm_term: params.get('utm_term') ?? undefined,\n utm_content: params.get('utm_content') ?? undefined,\n utm_id: params.get('utm_id') ?? undefined,\n utm_source_platform: params.get('utm_source_platform') ?? undefined,\n utm_creative_format: params.get('utm_creative_format') ?? undefined,\n utm_marketing_tactic: params.get('utm_marketing_tactic') ?? undefined,\n };\n\n cache.tags = tags;\n return tags;\n}\n"],"mappings":";;;;;;;;;;;AAmBA,MAAM,sBAAM,IAAI,IAAoB;AAEpC,MAAa,UAAmB;CAC9B,UAAU,QAAQ;EAChB,IAAI;GACF,OAAO,aAAa,QAAQ,GAAG;EACjC,QAAQ;GACN,QAAQ,MAAM,+BAA+B;GAC7C,OAAO,IAAI,IAAI,GAAG,KAAK;EACzB;CACF;CACA,UAAU,KAAK,UAAU;EACvB,IAAI;GACF,aAAa,QAAQ,KAAK,KAAK;EACjC,QAAQ;GACN,QAAQ,MAAM,+BAA+B;GAC7C,IAAI,IAAI,KAAK,KAAK;EACpB;CACF;AACF;AAEA,eAAsB,cAA+B;CACnD,IAAI,WAA0B;CAC9B,IAAIA,aAAAA,SAAS,OAAO,OAClB,WAAW,OAAA,GAAA,iBAAA,uBAAA,CAA6B;MACnC,IAAIA,aAAAA,SAAS,OAAO,WACzB,YAAA,GAAA,iBAAA,aAAA,CAAwB;CAE1B,IAAI,CAAC,UAAU;EACb,WAAW,aAAa,QAAQ,WAAW;EAC3C,IAAI,CAAC,UAAU;GACb,YAAA,GAAA,YAAA,WAAA,CAAsB;GACtB,aAAa,QAAQ,aAAa,QAAQ;EAC5C;CACF;CACA,OAAO;AACT;AAEA,SAAgB,gBAAoC;CAClD,QAAQC,YAAAA,YAAR;EACE,KAAKC,YAAAA,WAAW,OACd,OAAO;EACT,KAAKA,YAAAA,WAAW,QACd,OAAO;EACT,KAAKA,YAAAA,WAAW,SACd,OAAO;EACT,KAAKA,YAAAA,WAAW,IACd,OAAO;EACT,SACE;CACJ;AACF;AAEA,eAAsB,UAA8B;CAClD,MAAM,SAASC,aAAAA,WAAW,IAAI,QAAQ;CACtC,MAAM,eAAe,KAAK,MAAM,OAAO,KAAK;CAC5C,MAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;CAE9C,MAAM,mBAAmBH,aAAAA,SAAS,OAAO,YAAY,OAAA,GAAA,iBAAA,wBAAA,CAA8B,IAAI,KAAA;CACvF,MAAM,SAAS,IAAII,0BAAAA,gBAAgB,gBAAgB;CAEnD,MAAM,OAAkB;EACtB,IAAI,GAAGC,YAAAA,OAAO,GAAGC,YAAAA;EACjB,SAASD,YAAAA,UAAU,KAAA;EACnB,YAAYC,YAAAA,aAAa,KAAA;EACzB,UAAUN,aAAAA,SAAS;EACnB,QAAQO,YAAAA,aAAa,KAAA;EACrB,WAAW,MAAM,YAAY;EAC7B,aAAa,cAAc;EAC3B,eAAeC,YAAAA,gBAAgB,KAAA;EAC/B,iBAAiBC,YAAAA,WAAW,KAAA;EAC5B,oBAAoBC,aAAAA,WAAW,IAAI;EACnC;EACA;EACA,mBAAmB,GAAG,aAAa,GAAG;EACtC,SAASC,oBAAAA,OAAO;EAChB,WAAA,GAAA,kBAAA,WAAA,CAAqB,CAAC,GAAG,EAAE,EAAE,eAAe;EAC5C,YAAA,GAAA,kBAAA,aAAA,CAAwB,CAAC,GAAG,EAAE,EAAE,YAAY;EAC5C,aAAa,UAAU,gBAAgB;EACvC,QAAQ;EAER,iBAAA,GAAA,2BAAA,iBAAA,CAAiC,KAAK,KAAA;EACtC;EAEA,YAAY,OAAO,IAAI,YAAY,KAAK,KAAA;EACxC,YAAY,OAAO,IAAI,YAAY,KAAK,KAAA;EACxC,cAAc,OAAO,IAAI,cAAc,KAAK,KAAA;EAC5C,UAAU,OAAO,IAAI,UAAU,KAAK,KAAA;EACpC,aAAa,OAAO,IAAI,aAAa,KAAK,KAAA;EAC1C,QAAQ,OAAO,IAAI,QAAQ,KAAK,KAAA;EAChC,qBAAqB,OAAO,IAAI,qBAAqB,KAAK,KAAA;EAC1D,qBAAqB,OAAO,IAAI,qBAAqB,KAAK,KAAA;EAC1D,sBAAsB,OAAO,IAAI,sBAAsB,KAAK,KAAA;CAC9D;CAEA,oBAAA,MAAM,OAAO;CACb,OAAO;AACT"}
1
+ {"version":3,"file":"setup.cjs","names":["Platform","deviceType","DeviceType","Dimensions","URLSearchParams","osName","osVersion","modelName","manufacturer","modelId","PixelRatio","config"],"sources":["../../src/native/setup.ts"],"sourcesContent":["import 'expo-sqlite/localStorage/install';\nimport { getAndroidId, getInstallReferrerAsync, getIosIdForVendorAsync } from 'expo-application';\nimport { randomUUID } from 'expo-crypto';\nimport {\n DeviceType,\n deviceType,\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { getAdvertisingId } from 'expo-tracking-transparency';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\nimport { URLSearchParams } from 'react-native-url-polyfill';\nimport { type Storage, cache, config } from '../setup/index';\nimport type { TrackTags } from '../track/types';\n\nconst map = new Map<string, string>();\n\nexport const storage: Storage = {\n getItem: (key) => {\n try {\n return localStorage.getItem(key);\n } catch {\n console.error('localStorage is not available');\n return map.get(key) ?? null;\n }\n },\n setItem: (key, value) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n console.error('localStorage is not available');\n map.set(key, value);\n }\n },\n};\n\nexport async function getDeviceId(): Promise<string> {\n let deviceId: string | null = null;\n if (Platform.OS === 'ios') {\n deviceId = await getIosIdForVendorAsync();\n } else if (Platform.OS === 'android') {\n deviceId = getAndroidId();\n }\n if (!deviceId) {\n deviceId = localStorage.getItem('device_id');\n if (!deviceId) {\n deviceId = randomUUID();\n localStorage.setItem('device_id', deviceId);\n }\n }\n return deviceId;\n}\n\nexport function getDeviceType(): string | undefined {\n switch (deviceType) {\n case DeviceType.PHONE:\n return 'mobile';\n case DeviceType.TABLET:\n return 'tablet';\n case DeviceType.DESKTOP:\n return 'desktop';\n case DeviceType.TV:\n return 'smarttv';\n default:\n return undefined;\n }\n}\n\nexport async function getTags(): Promise<TrackTags> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : undefined;\n const params = new URLSearchParams(install_referrer);\n\n const tags: TrackTags = {\n os: `${osName} ${osVersion}`,\n os_name: osName ?? undefined,\n os_version: osVersion ?? undefined,\n device: modelName ?? undefined,\n device_id: await getDeviceId(),\n device_type: getDeviceType(),\n device_vendor: manufacturer ?? undefined,\n device_model_id: modelId ?? undefined,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n release: config.release,\n language: getLocales().at(0)?.languageTag ?? 'en',\n time_zone: getCalendars().at(0)?.timeZone ?? 'UTC',\n source: 'app',\n // ads\n advertising_id: getAdvertisingId() ?? undefined,\n install_referrer,\n // utm params\n utm_source: params.get('utm_source') ?? undefined,\n utm_medium: params.get('utm_medium') ?? undefined,\n utm_campaign: params.get('utm_campaign') ?? undefined,\n utm_term: params.get('utm_term') ?? undefined,\n utm_content: params.get('utm_content') ?? undefined,\n utm_id: params.get('utm_id') ?? undefined,\n utm_source_platform: params.get('utm_source_platform') ?? undefined,\n utm_creative_format: params.get('utm_creative_format') ?? undefined,\n utm_marketing_tactic: params.get('utm_marketing_tactic') ?? undefined,\n };\n\n cache.tags = tags;\n return tags;\n}\n"],"mappings":";;;;;;;;;;;AAmBA,MAAM,sBAAM,IAAI,IAAoB;AAEpC,MAAa,UAAmB;CAC9B,UAAU,QAAQ;EAChB,IAAI;GACF,OAAO,aAAa,QAAQ,GAAG;EACjC,QAAQ;GACN,QAAQ,MAAM,+BAA+B;GAC7C,OAAO,IAAI,IAAI,GAAG,KAAK;EACzB;CACF;CACA,UAAU,KAAK,UAAU;EACvB,IAAI;GACF,aAAa,QAAQ,KAAK,KAAK;EACjC,QAAQ;GACN,QAAQ,MAAM,+BAA+B;GAC7C,IAAI,IAAI,KAAK,KAAK;EACpB;CACF;AACF;AAEA,eAAsB,cAA+B;CACnD,IAAI,WAA0B;CAC9B,IAAIA,aAAAA,SAAS,OAAO,OAClB,WAAW,OAAA,GAAA,iBAAA,uBAAA,CAA6B;MACnC,IAAIA,aAAAA,SAAS,OAAO,WACzB,YAAA,GAAA,iBAAA,aAAA,CAAwB;CAE1B,IAAI,CAAC,UAAU;EACb,WAAW,aAAa,QAAQ,WAAW;EAC3C,IAAI,CAAC,UAAU;GACb,YAAA,GAAA,YAAA,WAAA,CAAsB;GACtB,aAAa,QAAQ,aAAa,QAAQ;EAC5C;CACF;CACA,OAAO;AACT;AAEA,SAAgB,gBAAoC;CAClD,QAAQC,YAAAA,YAAR;EACE,KAAKC,YAAAA,WAAW,OACd,OAAO;EACT,KAAKA,YAAAA,WAAW,QACd,OAAO;EACT,KAAKA,YAAAA,WAAW,SACd,OAAO;EACT,KAAKA,YAAAA,WAAW,IACd,OAAO;EACT,SACE;CACJ;AACF;AAEA,eAAsB,UAA8B;CAClD,MAAM,SAASC,aAAAA,WAAW,IAAI,QAAQ;CACtC,MAAM,eAAe,KAAK,MAAM,OAAO,KAAK;CAC5C,MAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;CAE9C,MAAM,mBAAmBH,aAAAA,SAAS,OAAO,YAAY,OAAA,GAAA,iBAAA,wBAAA,CAA8B,IAAI,KAAA;CACvF,MAAM,SAAS,IAAII,0BAAAA,gBAAgB,gBAAgB;CAEnD,MAAM,OAAkB;EACtB,IAAI,GAAGC,YAAAA,OAAO,GAAGC,YAAAA;EACjB,SAASD,YAAAA,UAAU,KAAA;EACnB,YAAYC,YAAAA,aAAa,KAAA;EACzB,QAAQC,YAAAA,aAAa,KAAA;EACrB,WAAW,MAAM,YAAY;EAC7B,aAAa,cAAc;EAC3B,eAAeC,YAAAA,gBAAgB,KAAA;EAC/B,iBAAiBC,YAAAA,WAAW,KAAA;EAC5B,oBAAoBC,aAAAA,WAAW,IAAI;EACnC;EACA;EACA,mBAAmB,GAAG,aAAa,GAAG;EACtC,SAASC,oBAAAA,OAAO;EAChB,WAAA,GAAA,kBAAA,WAAA,CAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe;EAC7C,YAAA,GAAA,kBAAA,aAAA,CAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY;EAC7C,QAAQ;EAER,iBAAA,GAAA,2BAAA,iBAAA,CAAiC,KAAK,KAAA;EACtC;EAEA,YAAY,OAAO,IAAI,YAAY,KAAK,KAAA;EACxC,YAAY,OAAO,IAAI,YAAY,KAAK,KAAA;EACxC,cAAc,OAAO,IAAI,cAAc,KAAK,KAAA;EAC5C,UAAU,OAAO,IAAI,UAAU,KAAK,KAAA;EACpC,aAAa,OAAO,IAAI,aAAa,KAAK,KAAA;EAC1C,QAAQ,OAAO,IAAI,QAAQ,KAAK,KAAA;EAChC,qBAAqB,OAAO,IAAI,qBAAqB,KAAK,KAAA;EAC1D,qBAAqB,OAAO,IAAI,qBAAqB,KAAK,KAAA;EAC1D,sBAAsB,OAAO,IAAI,sBAAsB,KAAK,KAAA;CAC9D;CAEA,oBAAA,MAAM,OAAO;CACb,OAAO;AACT"}
@@ -1,8 +1,8 @@
1
1
  import { cache, config } from "../setup/index.mjs";
2
- import { Dimensions, PixelRatio, Platform } from "react-native";
3
2
  import { getAndroidId, getInstallReferrerAsync, getIosIdForVendorAsync } from "expo-application";
4
3
  import { DeviceType, deviceType, manufacturer, modelId, modelName, osName, osVersion } from "expo-device";
5
4
  import { getCalendars, getLocales } from "expo-localization";
5
+ import { Dimensions, PixelRatio, Platform } from "react-native";
6
6
  import "expo-sqlite/localStorage/install";
7
7
  import { randomUUID } from "expo-crypto";
8
8
  import { getAdvertisingId } from "expo-tracking-transparency";
@@ -59,7 +59,6 @@ async function getTags() {
59
59
  os: `${osName} ${osVersion}`,
60
60
  os_name: osName ?? void 0,
61
61
  os_version: osVersion ?? void 0,
62
- platform: Platform.OS,
63
62
  device: modelName ?? void 0,
64
63
  device_id: await getDeviceId(),
65
64
  device_type: getDeviceType(),
@@ -70,9 +69,8 @@ async function getTags() {
70
69
  screen_height,
71
70
  screen_resolution: `${screen_width}x${screen_height}`,
72
71
  release: config.release,
73
- language: getLocales()?.[0]?.languageTag ?? "en",
74
- time_zone: getCalendars()?.[0]?.timeZone ?? "UTC",
75
- environment: __DEV__ ? "development" : "production",
72
+ language: getLocales().at(0)?.languageTag ?? "en",
73
+ time_zone: getCalendars().at(0)?.timeZone ?? "UTC",
76
74
  source: "app",
77
75
  advertising_id: getAdvertisingId() ?? void 0,
78
76
  install_referrer,
@@ -1 +1 @@
1
- {"version":3,"file":"setup.mjs","names":[],"sources":["../../src/native/setup.ts"],"sourcesContent":["import 'expo-sqlite/localStorage/install';\nimport { getAndroidId, getInstallReferrerAsync, getIosIdForVendorAsync } from 'expo-application';\nimport { randomUUID } from 'expo-crypto';\nimport {\n DeviceType,\n deviceType,\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { getAdvertisingId } from 'expo-tracking-transparency';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\nimport { URLSearchParams } from 'react-native-url-polyfill';\nimport { type Storage, cache, config } from '../setup/index';\nimport type { TrackTags } from '../track/types';\n\nconst map = new Map<string, string>();\n\nexport const storage: Storage = {\n getItem: (key) => {\n try {\n return localStorage.getItem(key);\n } catch {\n console.error('localStorage is not available');\n return map.get(key) ?? null;\n }\n },\n setItem: (key, value) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n console.error('localStorage is not available');\n map.set(key, value);\n }\n },\n};\n\nexport async function getDeviceId(): Promise<string> {\n let deviceId: string | null = null;\n if (Platform.OS === 'ios') {\n deviceId = await getIosIdForVendorAsync();\n } else if (Platform.OS === 'android') {\n deviceId = getAndroidId();\n }\n if (!deviceId) {\n deviceId = localStorage.getItem('device_id');\n if (!deviceId) {\n deviceId = randomUUID();\n localStorage.setItem('device_id', deviceId);\n }\n }\n return deviceId;\n}\n\nexport function getDeviceType(): string | undefined {\n switch (deviceType) {\n case DeviceType.PHONE:\n return 'mobile';\n case DeviceType.TABLET:\n return 'tablet';\n case DeviceType.DESKTOP:\n return 'desktop';\n case DeviceType.TV:\n return 'smarttv';\n default:\n return undefined;\n }\n}\n\nexport async function getTags(): Promise<TrackTags> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : undefined;\n const params = new URLSearchParams(install_referrer);\n\n const tags: TrackTags = {\n os: `${osName} ${osVersion}`,\n os_name: osName ?? undefined,\n os_version: osVersion ?? undefined,\n platform: Platform.OS,\n device: modelName ?? undefined,\n device_id: await getDeviceId(),\n device_type: getDeviceType(),\n device_vendor: manufacturer ?? undefined,\n device_model_id: modelId ?? undefined,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n release: config.release,\n language: getLocales()?.[0]?.languageTag ?? 'en',\n time_zone: getCalendars()?.[0]?.timeZone ?? 'UTC',\n environment: __DEV__ ? 'development' : 'production',\n source: 'app',\n // ads\n advertising_id: getAdvertisingId() ?? undefined,\n install_referrer,\n // utm params\n utm_source: params.get('utm_source') ?? undefined,\n utm_medium: params.get('utm_medium') ?? undefined,\n utm_campaign: params.get('utm_campaign') ?? undefined,\n utm_term: params.get('utm_term') ?? undefined,\n utm_content: params.get('utm_content') ?? undefined,\n utm_id: params.get('utm_id') ?? undefined,\n utm_source_platform: params.get('utm_source_platform') ?? undefined,\n utm_creative_format: params.get('utm_creative_format') ?? undefined,\n utm_marketing_tactic: params.get('utm_marketing_tactic') ?? undefined,\n };\n\n cache.tags = tags;\n return tags;\n}\n"],"mappings":";;;;;;;;;;AAmBA,MAAM,sBAAM,IAAI,IAAoB;AAEpC,MAAa,UAAmB;CAC9B,UAAU,QAAQ;EAChB,IAAI;GACF,OAAO,aAAa,QAAQ,GAAG;EACjC,QAAQ;GACN,QAAQ,MAAM,+BAA+B;GAC7C,OAAO,IAAI,IAAI,GAAG,KAAK;EACzB;CACF;CACA,UAAU,KAAK,UAAU;EACvB,IAAI;GACF,aAAa,QAAQ,KAAK,KAAK;EACjC,QAAQ;GACN,QAAQ,MAAM,+BAA+B;GAC7C,IAAI,IAAI,KAAK,KAAK;EACpB;CACF;AACF;AAEA,eAAsB,cAA+B;CACnD,IAAI,WAA0B;CAC9B,IAAI,SAAS,OAAO,OAClB,WAAW,MAAM,uBAAuB;MACnC,IAAI,SAAS,OAAO,WACzB,WAAW,aAAa;CAE1B,IAAI,CAAC,UAAU;EACb,WAAW,aAAa,QAAQ,WAAW;EAC3C,IAAI,CAAC,UAAU;GACb,WAAW,WAAW;GACtB,aAAa,QAAQ,aAAa,QAAQ;EAC5C;CACF;CACA,OAAO;AACT;AAEA,SAAgB,gBAAoC;CAClD,QAAQ,YAAR;EACE,KAAK,WAAW,OACd,OAAO;EACT,KAAK,WAAW,QACd,OAAO;EACT,KAAK,WAAW,SACd,OAAO;EACT,KAAK,WAAW,IACd,OAAO;EACT,SACE;CACJ;AACF;AAEA,eAAsB,UAA8B;CAClD,MAAM,SAAS,WAAW,IAAI,QAAQ;CACtC,MAAM,eAAe,KAAK,MAAM,OAAO,KAAK;CAC5C,MAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;CAE9C,MAAM,mBAAmB,SAAS,OAAO,YAAY,MAAM,wBAAwB,IAAI,KAAA;CACvF,MAAM,SAAS,IAAI,gBAAgB,gBAAgB;CAEnD,MAAM,OAAkB;EACtB,IAAI,GAAG,OAAO,GAAG;EACjB,SAAS,UAAU,KAAA;EACnB,YAAY,aAAa,KAAA;EACzB,UAAU,SAAS;EACnB,QAAQ,aAAa,KAAA;EACrB,WAAW,MAAM,YAAY;EAC7B,aAAa,cAAc;EAC3B,eAAe,gBAAgB,KAAA;EAC/B,iBAAiB,WAAW,KAAA;EAC5B,oBAAoB,WAAW,IAAI;EACnC;EACA;EACA,mBAAmB,GAAG,aAAa,GAAG;EACtC,SAAS,OAAO;EAChB,UAAU,WAAW,CAAC,GAAG,EAAE,EAAE,eAAe;EAC5C,WAAW,aAAa,CAAC,GAAG,EAAE,EAAE,YAAY;EAC5C,aAAa,UAAU,gBAAgB;EACvC,QAAQ;EAER,gBAAgB,iBAAiB,KAAK,KAAA;EACtC;EAEA,YAAY,OAAO,IAAI,YAAY,KAAK,KAAA;EACxC,YAAY,OAAO,IAAI,YAAY,KAAK,KAAA;EACxC,cAAc,OAAO,IAAI,cAAc,KAAK,KAAA;EAC5C,UAAU,OAAO,IAAI,UAAU,KAAK,KAAA;EACpC,aAAa,OAAO,IAAI,aAAa,KAAK,KAAA;EAC1C,QAAQ,OAAO,IAAI,QAAQ,KAAK,KAAA;EAChC,qBAAqB,OAAO,IAAI,qBAAqB,KAAK,KAAA;EAC1D,qBAAqB,OAAO,IAAI,qBAAqB,KAAK,KAAA;EAC1D,sBAAsB,OAAO,IAAI,sBAAsB,KAAK,KAAA;CAC9D;CAEA,MAAM,OAAO;CACb,OAAO;AACT"}
1
+ {"version":3,"file":"setup.mjs","names":[],"sources":["../../src/native/setup.ts"],"sourcesContent":["import 'expo-sqlite/localStorage/install';\nimport { getAndroidId, getInstallReferrerAsync, getIosIdForVendorAsync } from 'expo-application';\nimport { randomUUID } from 'expo-crypto';\nimport {\n DeviceType,\n deviceType,\n manufacturer,\n modelId,\n modelName,\n osName,\n osVersion,\n} from 'expo-device';\nimport { getCalendars, getLocales } from 'expo-localization';\nimport { getAdvertisingId } from 'expo-tracking-transparency';\nimport { Dimensions, PixelRatio, Platform } from 'react-native';\nimport { URLSearchParams } from 'react-native-url-polyfill';\nimport { type Storage, cache, config } from '../setup/index';\nimport type { TrackTags } from '../track/types';\n\nconst map = new Map<string, string>();\n\nexport const storage: Storage = {\n getItem: (key) => {\n try {\n return localStorage.getItem(key);\n } catch {\n console.error('localStorage is not available');\n return map.get(key) ?? null;\n }\n },\n setItem: (key, value) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n console.error('localStorage is not available');\n map.set(key, value);\n }\n },\n};\n\nexport async function getDeviceId(): Promise<string> {\n let deviceId: string | null = null;\n if (Platform.OS === 'ios') {\n deviceId = await getIosIdForVendorAsync();\n } else if (Platform.OS === 'android') {\n deviceId = getAndroidId();\n }\n if (!deviceId) {\n deviceId = localStorage.getItem('device_id');\n if (!deviceId) {\n deviceId = randomUUID();\n localStorage.setItem('device_id', deviceId);\n }\n }\n return deviceId;\n}\n\nexport function getDeviceType(): string | undefined {\n switch (deviceType) {\n case DeviceType.PHONE:\n return 'mobile';\n case DeviceType.TABLET:\n return 'tablet';\n case DeviceType.DESKTOP:\n return 'desktop';\n case DeviceType.TV:\n return 'smarttv';\n default:\n return undefined;\n }\n}\n\nexport async function getTags(): Promise<TrackTags> {\n const screen = Dimensions.get('screen');\n const screen_width = Math.floor(screen.width);\n const screen_height = Math.floor(screen.height);\n\n const install_referrer = Platform.OS === 'android' ? await getInstallReferrerAsync() : undefined;\n const params = new URLSearchParams(install_referrer);\n\n const tags: TrackTags = {\n os: `${osName} ${osVersion}`,\n os_name: osName ?? undefined,\n os_version: osVersion ?? undefined,\n device: modelName ?? undefined,\n device_id: await getDeviceId(),\n device_type: getDeviceType(),\n device_vendor: manufacturer ?? undefined,\n device_model_id: modelId ?? undefined,\n device_pixel_ratio: PixelRatio.get(),\n screen_width,\n screen_height,\n screen_resolution: `${screen_width}x${screen_height}`,\n release: config.release,\n language: getLocales().at(0)?.languageTag ?? 'en',\n time_zone: getCalendars().at(0)?.timeZone ?? 'UTC',\n source: 'app',\n // ads\n advertising_id: getAdvertisingId() ?? undefined,\n install_referrer,\n // utm params\n utm_source: params.get('utm_source') ?? undefined,\n utm_medium: params.get('utm_medium') ?? undefined,\n utm_campaign: params.get('utm_campaign') ?? undefined,\n utm_term: params.get('utm_term') ?? undefined,\n utm_content: params.get('utm_content') ?? undefined,\n utm_id: params.get('utm_id') ?? undefined,\n utm_source_platform: params.get('utm_source_platform') ?? undefined,\n utm_creative_format: params.get('utm_creative_format') ?? undefined,\n utm_marketing_tactic: params.get('utm_marketing_tactic') ?? undefined,\n };\n\n cache.tags = tags;\n return tags;\n}\n"],"mappings":";;;;;;;;;;AAmBA,MAAM,sBAAM,IAAI,IAAoB;AAEpC,MAAa,UAAmB;CAC9B,UAAU,QAAQ;EAChB,IAAI;GACF,OAAO,aAAa,QAAQ,GAAG;EACjC,QAAQ;GACN,QAAQ,MAAM,+BAA+B;GAC7C,OAAO,IAAI,IAAI,GAAG,KAAK;EACzB;CACF;CACA,UAAU,KAAK,UAAU;EACvB,IAAI;GACF,aAAa,QAAQ,KAAK,KAAK;EACjC,QAAQ;GACN,QAAQ,MAAM,+BAA+B;GAC7C,IAAI,IAAI,KAAK,KAAK;EACpB;CACF;AACF;AAEA,eAAsB,cAA+B;CACnD,IAAI,WAA0B;CAC9B,IAAI,SAAS,OAAO,OAClB,WAAW,MAAM,uBAAuB;MACnC,IAAI,SAAS,OAAO,WACzB,WAAW,aAAa;CAE1B,IAAI,CAAC,UAAU;EACb,WAAW,aAAa,QAAQ,WAAW;EAC3C,IAAI,CAAC,UAAU;GACb,WAAW,WAAW;GACtB,aAAa,QAAQ,aAAa,QAAQ;EAC5C;CACF;CACA,OAAO;AACT;AAEA,SAAgB,gBAAoC;CAClD,QAAQ,YAAR;EACE,KAAK,WAAW,OACd,OAAO;EACT,KAAK,WAAW,QACd,OAAO;EACT,KAAK,WAAW,SACd,OAAO;EACT,KAAK,WAAW,IACd,OAAO;EACT,SACE;CACJ;AACF;AAEA,eAAsB,UAA8B;CAClD,MAAM,SAAS,WAAW,IAAI,QAAQ;CACtC,MAAM,eAAe,KAAK,MAAM,OAAO,KAAK;CAC5C,MAAM,gBAAgB,KAAK,MAAM,OAAO,MAAM;CAE9C,MAAM,mBAAmB,SAAS,OAAO,YAAY,MAAM,wBAAwB,IAAI,KAAA;CACvF,MAAM,SAAS,IAAI,gBAAgB,gBAAgB;CAEnD,MAAM,OAAkB;EACtB,IAAI,GAAG,OAAO,GAAG;EACjB,SAAS,UAAU,KAAA;EACnB,YAAY,aAAa,KAAA;EACzB,QAAQ,aAAa,KAAA;EACrB,WAAW,MAAM,YAAY;EAC7B,aAAa,cAAc;EAC3B,eAAe,gBAAgB,KAAA;EAC/B,iBAAiB,WAAW,KAAA;EAC5B,oBAAoB,WAAW,IAAI;EACnC;EACA;EACA,mBAAmB,GAAG,aAAa,GAAG;EACtC,SAAS,OAAO;EAChB,UAAU,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe;EAC7C,WAAW,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY;EAC7C,QAAQ;EAER,gBAAgB,iBAAiB,KAAK,KAAA;EACtC;EAEA,YAAY,OAAO,IAAI,YAAY,KAAK,KAAA;EACxC,YAAY,OAAO,IAAI,YAAY,KAAK,KAAA;EACxC,cAAc,OAAO,IAAI,cAAc,KAAK,KAAA;EAC5C,UAAU,OAAO,IAAI,UAAU,KAAK,KAAA;EACpC,aAAa,OAAO,IAAI,aAAa,KAAK,KAAA;EAC1C,QAAQ,OAAO,IAAI,QAAQ,KAAK,KAAA;EAChC,qBAAqB,OAAO,IAAI,qBAAqB,KAAK,KAAA;EAC1D,qBAAqB,OAAO,IAAI,qBAAqB,KAAK,KAAA;EAC1D,sBAAsB,OAAO,IAAI,sBAAsB,KAAK,KAAA;CAC9D;CAEA,MAAM,OAAO;CACb,OAAO;AACT"}
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_track_index = require("../track/index.cjs");
3
3
  const require_hooks_use_outbound_click_analytics = require("../hooks/use-outbound-click-analytics.cjs");
4
- const require_hooks_use_report_web_vitals = require("../hooks/use-report-web-vitals.cjs");
5
4
  const require_hooks_use_web_analytics = require("../hooks/use-web-analytics.cjs");
5
+ const require_hooks_use_report_web_vitals = require("../hooks/use-report-web-vitals.cjs");
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
7
  let react_router = require("react-router");
8
8
  //#region src/react-router/index.tsx
@@ -1,7 +1,7 @@
1
1
  import { track } from "../track/index.mjs";
2
2
  import { useOutboundClickAnalytics } from "../hooks/use-outbound-click-analytics.mjs";
3
- import { useReportWebVitals } from "../hooks/use-report-web-vitals.mjs";
4
3
  import { useWebAnalytics } from "../hooks/use-web-analytics.mjs";
4
+ import { useReportWebVitals } from "../hooks/use-report-web-vitals.mjs";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  import { useLocation } from "react-router";
7
7
  //#region src/react-router/index.tsx
@@ -24,7 +24,6 @@ const tagsSchema = (0, zod_mini.object)({
24
24
  browser: (0, zod_mini.optional)((0, zod_mini.string)()),
25
25
  browser_name: (0, zod_mini.optional)((0, zod_mini.string)()),
26
26
  browser_version: (0, zod_mini.optional)((0, zod_mini.string)()),
27
- platform: (0, zod_mini.enum)(ALL_PLATFORMS),
28
27
  device: (0, zod_mini.optional)((0, zod_mini.string)()),
29
28
  device_id: (0, zod_mini.optional)((0, zod_mini.string)().check((0, zod_mini.trim)(), (0, zod_mini.minLength)(1), (0, zod_mini.maxLength)(36))),
30
29
  device_type: (0, zod_mini.optional)((0, zod_mini.string)()),
@@ -36,7 +35,6 @@ const tagsSchema = (0, zod_mini.object)({
36
35
  release: (0, zod_mini.optional)((0, zod_mini.string)()),
37
36
  language: (0, zod_mini.optional)((0, zod_mini.string)()),
38
37
  time_zone: (0, zod_mini.optional)((0, zod_mini.string)()),
39
- environment: (0, zod_mini.enum)(ALL_ENVIRONMENTS),
40
38
  source_url: (0, zod_mini.optional)((0, zod_mini.string)()),
41
39
  source: (0, zod_mini.optional)((0, zod_mini.enum)([
42
40
  "web",
@@ -89,17 +87,6 @@ const propertiesSchema = (0, zod_mini.optional)((0, zod_mini.record)((0, zod_min
89
87
  (0, zod_mini.null)(),
90
88
  items
91
89
  ])).check((0, zod_mini.refine)((data) => Object.keys(data).length <= 64)));
92
- /** @deprecated */
93
- const createTrackEventSchemaV1 = (0, zod_mini.array)((0, zod_mini.object)({
94
- name: (0, zod_mini.string)().check((0, zod_mini.trim)(), (0, zod_mini.minLength)(1), (0, zod_mini.maxLength)(64)),
95
- visitor_id: zod_mini.coerce.bigint(),
96
- session_id: (0, zod_mini.uuid)(),
97
- platform: (0, zod_mini.enum)(ALL_PLATFORMS),
98
- environment: (0, zod_mini.enum)(ALL_ENVIRONMENTS),
99
- timestamp: zod_mini.iso.datetime(),
100
- tags: tagsSchema,
101
- properties: propertiesSchema
102
- })).check((0, zod_mini.minLength)(1), (0, zod_mini.maxLength)(100));
103
90
  const createTrackEventSchema = (0, zod_mini.array)((0, zod_mini.object)({
104
91
  name: (0, zod_mini.string)().check((0, zod_mini.trim)(), (0, zod_mini.minLength)(1), (0, zod_mini.maxLength)(64)),
105
92
  visitor_id: (0, zod_mini.uuid)(),
@@ -218,7 +205,6 @@ exports.ALL_PLATFORMS = ALL_PLATFORMS;
218
205
  exports.createFeedbackSchema = createFeedbackSchema;
219
206
  exports.createLinkSchema = createLinkSchema;
220
207
  exports.createTrackEventSchema = createTrackEventSchema;
221
- exports.createTrackEventSchemaV1 = createTrackEventSchemaV1;
222
208
  exports.createVisitorSchema = createVisitorSchema;
223
209
  exports.propertiesSchema = propertiesSchema;
224
210
  exports.tagsSchema = tagsSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["coerce","iso"],"sources":["../../src/schema/index.ts"],"sourcesContent":["import {\n enum as _enum,\n null as _null,\n array,\n boolean,\n coerce,\n e164,\n email,\n iso,\n maxLength,\n minLength,\n number,\n object,\n optional,\n pipe,\n record,\n refine,\n regex,\n string,\n toLowerCase,\n toUpperCase,\n transform,\n trim,\n union,\n url,\n uuid,\n type z,\n} from 'zod/mini';\nimport type { Environment, Platform } from '../track/types';\n\nconst items = array(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n )\n);\n\nexport const ALL_PLATFORMS = [\n 'ios',\n 'android',\n 'web',\n 'macos',\n 'windows',\n 'linux',\n 'unknown',\n] as const satisfies Platform[];\n\nexport const ALL_ENVIRONMENTS = ['development', 'production'] as const satisfies Environment[];\n\nexport const tagsSchema = object({\n os: optional(string()),\n os_name: optional(string()),\n os_version: optional(string()),\n browser: optional(string()),\n browser_name: optional(string()),\n browser_version: optional(string()),\n platform: _enum(ALL_PLATFORMS),\n device: optional(string()),\n device_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n device_type: optional(string()),\n device_vendor: optional(string()),\n device_pixel_ratio: optional(number()),\n screen_width: optional(number()),\n screen_height: optional(number()),\n screen_resolution: optional(\n pipe(\n string().check(regex(/^\\d+x\\d+$/)),\n transform((v) => v as `${number}x${number}`)\n )\n ),\n release: optional(string()),\n language: optional(string()),\n time_zone: optional(string()),\n environment: _enum(ALL_ENVIRONMENTS),\n source_url: optional(string()),\n source: optional(_enum(['web', 'app', 'offline'])),\n page_referrer: optional(string()),\n // app info\n advertising_id: optional(string()),\n install_referrer: optional(string()),\n // Meta Ads\n fbc: optional(string()),\n fbp: optional(string()),\n fbclid: optional(string()),\n ad_id: optional(string()),\n ad_name: optional(string()),\n adset_id: optional(string()),\n adset_name: optional(string()),\n campaign_id: optional(string()),\n campaign_name: optional(string()),\n placement: optional(string()),\n site_source_name: optional(string()),\n // Google Ads\n gclid: optional(string()),\n gclsrc: optional(string()),\n gad_source: optional(string()),\n gad_campaignid: optional(string()),\n // Reddit ads\n rdt_cid: optional(string()),\n rdt_uuid: optional(string()),\n // click ids\n dclid: optional(string()),\n ko_click_id: optional(string()),\n li_fat_id: optional(string()),\n msclkid: optional(string()),\n sccid: optional(string()),\n ttclid: optional(string()),\n twclid: optional(string()),\n wbraid: optional(string()),\n yclid: optional(string()),\n // utm params\n utm_source: optional(string()),\n utm_medium: optional(string()),\n utm_campaign: optional(string()),\n utm_term: optional(string()),\n utm_content: optional(string()),\n utm_id: optional(string()),\n utm_source_platform: optional(string()),\n utm_creative_format: optional(string()),\n utm_marketing_tactic: optional(string()),\n});\n\nexport const propertiesSchema = optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null(), items])\n ).check(refine((data) => Object.keys(data).length <= 64))\n);\n\n/** @deprecated */\nexport const createTrackEventSchemaV1 = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: coerce.bigint(),\n session_id: uuid(),\n platform: _enum(ALL_PLATFORMS),\n environment: _enum(ALL_ENVIRONMENTS),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createTrackEventSchema = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: uuid(),\n session_id: uuid(),\n platform: _enum(ALL_PLATFORMS),\n environment: _enum(ALL_ENVIRONMENTS),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createVisitorSchema = object({\n device_id: string().check(trim(), minLength(1), maxLength(36)),\n platform: _enum(ALL_PLATFORMS),\n environment: _enum(ALL_ENVIRONMENTS),\n tags: tagsSchema,\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nconst emailValue = pipe(string().check(trim(), toLowerCase(), maxLength(320)), email());\n\n/** E.164: a plus sign (+) prefix, country code, then digits only, no dashes/parens/spaces. */\nconst phoneValue = pipe(string().check(trim()), e164());\n\nconst addressValue = object({\n first_name: optional(string().check(trim(), maxLength(128))),\n last_name: optional(string().check(trim(), maxLength(128))),\n street: optional(string().check(trim(), maxLength(256))),\n city: optional(string().check(trim(), maxLength(128))),\n /** User province, state, or region. Example: `Hampshire` */\n region: optional(string().check(trim(), maxLength(128))),\n postal_code: optional(string().check(trim(), maxLength(32))),\n /** 2-letter country code, per the ISO 3166-1 alpha-2 standard. Example: `UK` */\n country: optional(string().check(trim(), toUpperCase(), regex(/^[A-Z]{2}$/))),\n});\n\n/**\n * User-provided data (UPD) used for enhanced conversions, Customer Match, and demographics.\n * Values are sent unhashed; Google normalizes and hashes them before they reach its servers.\n *\n * Multiple values may be sent to increase the match rate: up to 3 emails, 3 phone numbers, and\n * 2 addresses.\n *\n * @see https://support.google.com/analytics/answer/14078702\n * @see https://support.google.com/google-ads/answer/13258081\n */\nexport const userProvidedDataSchema = object({\n email: optional(union([emailValue, array(emailValue).check(minLength(1), maxLength(3))])),\n phone_number: optional(union([phoneValue, array(phoneValue).check(minLength(1), maxLength(3))])),\n address: optional(union([addressValue, array(addressValue).check(minLength(1), maxLength(2))])),\n});\n\nexport const updateVisitorSchema = object({\n user_id: optional(uuid()),\n user_data: optional(userProvidedDataSchema),\n distinct_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n tags: tagsSchema,\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const createFeedbackSchema = object({\n name: string().check(minLength(1), maxLength(256)),\n email: email().check(maxLength(320)),\n message: string().check(minLength(1), maxLength(65536)),\n});\n\nconst noEmptyString = pipe(\n string().check(maxLength(256)),\n transform((v) => (v ? v : undefined))\n);\n\n/**\n * The schema for creating a link.\n * @see https://support.google.com/analytics/answer/10917952\n * */\nexport const createLinkSchema = object({\n /** The URL that the user is redirected to. */\n url: url().check(minLength(1), maxLength(1024)), // required\n\n /**\n * Campaign ID. Used to identify a specific campaign or promotion. This is a required key for GA4\n * data import. Use the same IDs that you use when uploading campaign cost data.\n */\n utm_id: optional(noEmptyString),\n\n /** Referrer, for example: google, newsletter4, billboard */\n utm_source: string().check(minLength(1), maxLength(256)), // required\n\n /** Marketing medium, for example: cpc, banner, email */\n utm_medium: string().check(minLength(1), maxLength(256)), // required\n\n /** Product, slogan, promo code, for example, spring_sale */\n utm_campaign: string().check(minLength(1), maxLength(256)), // required\n\n /** Paid keyword */\n utm_term: optional(noEmptyString),\n\n /**\n * Use to differentiate creatives. For example, if you have two call-to-action links within the\n * same email message, you can use utm_content and set different values for each so you can tell\n * which version is more effective.\n */\n utm_content: optional(noEmptyString),\n\n /**\n * The platform responsible for directing traffic to a given Analytics property (such as a buying\n * platform that sets budgets and targeting criteria or a platform that manages organic traffic\n * data). For example, Search Ads 360 or Display & Video 360.\n */\n utm_source_platform: optional(noEmptyString),\n\n /**\n * Type of creative, for example, display, native, video, search, utm_creative_format is not\n * currently reported in Google Analytics 4 properties.\n */\n utm_creative_format: optional(noEmptyString),\n\n /**\n * Targeting criteria applied to a campaign, for example, remarketing, prospecting,\n * utm_marketing_tactic is not currently reported in Google Analytics 4 properties.\n * */\n utm_marketing_tactic: optional(noEmptyString),\n});\n\nexport type CreateTrackEventDTO = z.output<typeof createTrackEventSchema>;\nexport type CreateFeedbackDTO = z.output<typeof createFeedbackSchema>;\nexport type CreateLinkDTO = z.output<typeof createLinkSchema>;\nexport type CreateVisitorDTO = z.output<typeof createVisitorSchema>;\nexport type UserProvidedDataDTO = z.output<typeof userProvidedDataSchema>;\nexport type UpdateVisitorDTO = z.output<typeof updateVisitorSchema>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["iso"],"sources":["../../src/schema/index.ts"],"sourcesContent":["import {\n enum as _enum,\n null as _null,\n array,\n boolean,\n e164,\n email,\n iso,\n maxLength,\n minLength,\n number,\n object,\n optional,\n pipe,\n record,\n refine,\n regex,\n string,\n toLowerCase,\n toUpperCase,\n transform,\n trim,\n union,\n url,\n uuid,\n type z,\n} from 'zod/mini';\nimport type { Environment, Platform } from '../track/types';\n\nconst items = array(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n )\n);\n\nexport const ALL_PLATFORMS = [\n 'ios',\n 'android',\n 'web',\n 'macos',\n 'windows',\n 'linux',\n 'unknown',\n] as const satisfies Platform[];\n\nexport const ALL_ENVIRONMENTS = ['development', 'production'] as const satisfies Environment[];\n\nexport const tagsSchema = object({\n os: optional(string()),\n os_name: optional(string()),\n os_version: optional(string()),\n browser: optional(string()),\n browser_name: optional(string()),\n browser_version: optional(string()),\n device: optional(string()),\n device_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n device_type: optional(string()),\n device_vendor: optional(string()),\n device_pixel_ratio: optional(number()),\n screen_width: optional(number()),\n screen_height: optional(number()),\n screen_resolution: optional(\n pipe(\n string().check(regex(/^\\d+x\\d+$/)),\n transform((v) => v as `${number}x${number}`)\n )\n ),\n release: optional(string()),\n language: optional(string()),\n time_zone: optional(string()),\n source_url: optional(string()),\n source: optional(_enum(['web', 'app', 'offline'])),\n page_referrer: optional(string()),\n // app info\n advertising_id: optional(string()),\n install_referrer: optional(string()),\n // Meta Ads\n fbc: optional(string()),\n fbp: optional(string()),\n fbclid: optional(string()),\n ad_id: optional(string()),\n ad_name: optional(string()),\n adset_id: optional(string()),\n adset_name: optional(string()),\n campaign_id: optional(string()),\n campaign_name: optional(string()),\n placement: optional(string()),\n site_source_name: optional(string()),\n // Google Ads\n gclid: optional(string()),\n gclsrc: optional(string()),\n gad_source: optional(string()),\n gad_campaignid: optional(string()),\n // Reddit ads\n rdt_cid: optional(string()),\n rdt_uuid: optional(string()),\n // click ids\n dclid: optional(string()),\n ko_click_id: optional(string()),\n li_fat_id: optional(string()),\n msclkid: optional(string()),\n sccid: optional(string()),\n ttclid: optional(string()),\n twclid: optional(string()),\n wbraid: optional(string()),\n yclid: optional(string()),\n // utm params\n utm_source: optional(string()),\n utm_medium: optional(string()),\n utm_campaign: optional(string()),\n utm_term: optional(string()),\n utm_content: optional(string()),\n utm_id: optional(string()),\n utm_source_platform: optional(string()),\n utm_creative_format: optional(string()),\n utm_marketing_tactic: optional(string()),\n});\n\nexport const propertiesSchema = optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null(), items])\n ).check(refine((data) => Object.keys(data).length <= 64))\n);\n\nexport const createTrackEventSchema = array(\n object({\n name: string().check(trim(), minLength(1), maxLength(64)),\n visitor_id: uuid(),\n session_id: uuid(),\n platform: _enum(ALL_PLATFORMS),\n environment: _enum(ALL_ENVIRONMENTS),\n timestamp: iso.datetime(),\n tags: tagsSchema,\n properties: propertiesSchema,\n })\n).check(minLength(1), maxLength(100));\n\nexport const createVisitorSchema = object({\n device_id: string().check(trim(), minLength(1), maxLength(36)),\n platform: _enum(ALL_PLATFORMS),\n environment: _enum(ALL_ENVIRONMENTS),\n tags: tagsSchema,\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nconst emailValue = pipe(string().check(trim(), toLowerCase(), maxLength(320)), email());\n\n/** E.164: a plus sign (+) prefix, country code, then digits only, no dashes/parens/spaces. */\nconst phoneValue = pipe(string().check(trim()), e164());\n\nconst addressValue = object({\n first_name: optional(string().check(trim(), maxLength(128))),\n last_name: optional(string().check(trim(), maxLength(128))),\n street: optional(string().check(trim(), maxLength(256))),\n city: optional(string().check(trim(), maxLength(128))),\n /** User province, state, or region. Example: `Hampshire` */\n region: optional(string().check(trim(), maxLength(128))),\n postal_code: optional(string().check(trim(), maxLength(32))),\n /** 2-letter country code, per the ISO 3166-1 alpha-2 standard. Example: `UK` */\n country: optional(string().check(trim(), toUpperCase(), regex(/^[A-Z]{2}$/))),\n});\n\n/**\n * User-provided data (UPD) used for enhanced conversions, Customer Match, and demographics.\n * Values are sent unhashed; Google normalizes and hashes them before they reach its servers.\n *\n * Multiple values may be sent to increase the match rate: up to 3 emails, 3 phone numbers, and\n * 2 addresses.\n *\n * @see https://support.google.com/analytics/answer/14078702\n * @see https://support.google.com/google-ads/answer/13258081\n */\nexport const userProvidedDataSchema = object({\n email: optional(union([emailValue, array(emailValue).check(minLength(1), maxLength(3))])),\n phone_number: optional(union([phoneValue, array(phoneValue).check(minLength(1), maxLength(3))])),\n address: optional(union([addressValue, array(addressValue).check(minLength(1), maxLength(2))])),\n});\n\nexport const updateVisitorSchema = object({\n user_id: optional(uuid()),\n user_data: optional(userProvidedDataSchema),\n distinct_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n tags: tagsSchema,\n properties: optional(\n record(\n string().check(trim(), minLength(1), maxLength(128)),\n union([string().check(maxLength(512)), number(), boolean(), _null()])\n ).check(refine((data) => Object.keys(data).length <= 64))\n ),\n});\n\nexport const createFeedbackSchema = object({\n name: string().check(minLength(1), maxLength(256)),\n email: email().check(maxLength(320)),\n message: string().check(minLength(1), maxLength(65536)),\n});\n\nconst noEmptyString = pipe(\n string().check(maxLength(256)),\n transform((v) => (v ? v : undefined))\n);\n\n/**\n * The schema for creating a link.\n * @see https://support.google.com/analytics/answer/10917952\n * */\nexport const createLinkSchema = object({\n /** The URL that the user is redirected to. */\n url: url().check(minLength(1), maxLength(1024)), // required\n\n /**\n * Campaign ID. Used to identify a specific campaign or promotion. This is a required key for GA4\n * data import. Use the same IDs that you use when uploading campaign cost data.\n */\n utm_id: optional(noEmptyString),\n\n /** Referrer, for example: google, newsletter4, billboard */\n utm_source: string().check(minLength(1), maxLength(256)), // required\n\n /** Marketing medium, for example: cpc, banner, email */\n utm_medium: string().check(minLength(1), maxLength(256)), // required\n\n /** Product, slogan, promo code, for example, spring_sale */\n utm_campaign: string().check(minLength(1), maxLength(256)), // required\n\n /** Paid keyword */\n utm_term: optional(noEmptyString),\n\n /**\n * Use to differentiate creatives. For example, if you have two call-to-action links within the\n * same email message, you can use utm_content and set different values for each so you can tell\n * which version is more effective.\n */\n utm_content: optional(noEmptyString),\n\n /**\n * The platform responsible for directing traffic to a given Analytics property (such as a buying\n * platform that sets budgets and targeting criteria or a platform that manages organic traffic\n * data). For example, Search Ads 360 or Display & Video 360.\n */\n utm_source_platform: optional(noEmptyString),\n\n /**\n * Type of creative, for example, display, native, video, search, utm_creative_format is not\n * currently reported in Google Analytics 4 properties.\n */\n utm_creative_format: optional(noEmptyString),\n\n /**\n * Targeting criteria applied to a campaign, for example, remarketing, prospecting,\n * utm_marketing_tactic is not currently reported in Google Analytics 4 properties.\n * */\n utm_marketing_tactic: optional(noEmptyString),\n});\n\nexport type CreateTrackEventDTO = z.output<typeof createTrackEventSchema>;\nexport type CreateFeedbackDTO = z.output<typeof createFeedbackSchema>;\nexport type CreateLinkDTO = z.output<typeof createLinkSchema>;\nexport type CreateVisitorDTO = z.output<typeof createVisitorSchema>;\nexport type UserProvidedDataDTO = z.output<typeof userProvidedDataSchema>;\nexport type UpdateVisitorDTO = z.output<typeof updateVisitorSchema>;\n"],"mappings":"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"}