@shware/analytics 4.0.0 → 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 (119) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +2 -0
  2. package/dist/_virtual/_rolldown/runtime.mjs +24 -0
  3. package/dist/hooks/use-outbound-click-analytics.cjs +2 -2
  4. package/dist/hooks/use-outbound-click-analytics.cjs.map +1 -1
  5. package/dist/hooks/use-outbound-click-analytics.mjs +2 -2
  6. package/dist/hooks/use-outbound-click-analytics.mjs.map +1 -1
  7. package/dist/index.cjs +0 -1
  8. package/dist/index.d.cts +2 -2
  9. package/dist/index.d.mts +2 -2
  10. package/dist/index.mjs +2 -2
  11. package/dist/native/fingerprint.cjs +3 -3
  12. package/dist/native/fingerprint.cjs.map +1 -1
  13. package/dist/native/fingerprint.mjs +3 -3
  14. package/dist/native/fingerprint.mjs.map +1 -1
  15. package/dist/native/firebase.cjs.map +1 -1
  16. package/dist/native/firebase.mjs.map +1 -1
  17. package/dist/native/index.cjs +1 -1
  18. package/dist/native/index.mjs +1 -1
  19. package/dist/native/setup.cjs +3 -5
  20. package/dist/native/setup.cjs.map +1 -1
  21. package/dist/native/setup.mjs +3 -5
  22. package/dist/native/setup.mjs.map +1 -1
  23. package/dist/next/index.cjs +1 -1
  24. package/dist/next/index.mjs +1 -1
  25. package/dist/node_modules/.pnpm/bowser@2.14.1/node_modules/bowser/es5.cjs +1725 -0
  26. package/dist/node_modules/.pnpm/bowser@2.14.1/node_modules/bowser/es5.cjs.map +1 -0
  27. package/dist/node_modules/.pnpm/bowser@2.14.1/node_modules/bowser/es5.mjs +1722 -0
  28. package/dist/node_modules/.pnpm/bowser@2.14.1/node_modules/bowser/es5.mjs.map +1 -0
  29. package/dist/react-router/index.cjs +2 -2
  30. package/dist/react-router/index.mjs +2 -2
  31. package/dist/schema/index.cjs +0 -14
  32. package/dist/schema/index.cjs.map +1 -1
  33. package/dist/schema/index.d.cts +1 -150
  34. package/dist/schema/index.d.cts.map +1 -1
  35. package/dist/schema/index.d.mts +1 -150
  36. package/dist/schema/index.d.mts.map +1 -1
  37. package/dist/schema/index.mjs +2 -15
  38. package/dist/schema/index.mjs.map +1 -1
  39. package/dist/server/linkedin-conversions-api.cjs +1 -1
  40. package/dist/server/linkedin-conversions-api.cjs.map +1 -1
  41. package/dist/server/linkedin-conversions-api.mjs +1 -1
  42. package/dist/server/linkedin-conversions-api.mjs.map +1 -1
  43. package/dist/server/meta-conversions-api.cjs +4 -4
  44. package/dist/server/meta-conversions-api.cjs.map +1 -1
  45. package/dist/server/meta-conversions-api.d.cts.map +1 -1
  46. package/dist/server/meta-conversions-api.d.mts.map +1 -1
  47. package/dist/server/meta-conversions-api.mjs +4 -4
  48. package/dist/server/meta-conversions-api.mjs.map +1 -1
  49. package/dist/server/openai-conversions-api.cjs +1 -1
  50. package/dist/server/openai-conversions-api.cjs.map +1 -1
  51. package/dist/server/openai-conversions-api.mjs +1 -1
  52. package/dist/server/openai-conversions-api.mjs.map +1 -1
  53. package/dist/server/reddit-conversions-api.cjs +3 -3
  54. package/dist/server/reddit-conversions-api.cjs.map +1 -1
  55. package/dist/server/reddit-conversions-api.mjs +3 -3
  56. package/dist/server/reddit-conversions-api.mjs.map +1 -1
  57. package/dist/setup/session.cjs.map +1 -1
  58. package/dist/setup/session.mjs.map +1 -1
  59. package/dist/tanstack/analytics.cjs +1 -1
  60. package/dist/tanstack/analytics.mjs +1 -1
  61. package/dist/third-parties/google-analytics.cjs.map +1 -1
  62. package/dist/third-parties/google-analytics.d.cts +4 -1
  63. package/dist/third-parties/google-analytics.d.cts.map +1 -1
  64. package/dist/third-parties/google-analytics.d.mts +4 -1
  65. package/dist/third-parties/google-analytics.d.mts.map +1 -1
  66. package/dist/third-parties/google-analytics.mjs.map +1 -1
  67. package/dist/third-parties/linkedin-insight-tag.cjs.map +1 -1
  68. package/dist/third-parties/linkedin-insight-tag.d.cts +4 -1
  69. package/dist/third-parties/linkedin-insight-tag.d.cts.map +1 -1
  70. package/dist/third-parties/linkedin-insight-tag.d.mts +4 -1
  71. package/dist/third-parties/linkedin-insight-tag.d.mts.map +1 -1
  72. package/dist/third-parties/linkedin-insight-tag.mjs.map +1 -1
  73. package/dist/third-parties/meta-pixel.cjs.map +1 -1
  74. package/dist/third-parties/meta-pixel.d.cts +4 -1
  75. package/dist/third-parties/meta-pixel.d.cts.map +1 -1
  76. package/dist/third-parties/meta-pixel.d.mts +4 -1
  77. package/dist/third-parties/meta-pixel.d.mts.map +1 -1
  78. package/dist/third-parties/meta-pixel.mjs.map +1 -1
  79. package/dist/third-parties/openai-pixel.cjs +2 -1
  80. package/dist/third-parties/openai-pixel.cjs.map +1 -1
  81. package/dist/third-parties/openai-pixel.d.cts +4 -1
  82. package/dist/third-parties/openai-pixel.d.cts.map +1 -1
  83. package/dist/third-parties/openai-pixel.d.mts +4 -1
  84. package/dist/third-parties/openai-pixel.d.mts.map +1 -1
  85. package/dist/third-parties/openai-pixel.mjs +2 -1
  86. package/dist/third-parties/openai-pixel.mjs.map +1 -1
  87. package/dist/third-parties/reddit-pixel.cjs.map +1 -1
  88. package/dist/third-parties/reddit-pixel.d.cts +4 -1
  89. package/dist/third-parties/reddit-pixel.d.cts.map +1 -1
  90. package/dist/third-parties/reddit-pixel.d.mts +4 -1
  91. package/dist/third-parties/reddit-pixel.d.mts.map +1 -1
  92. package/dist/third-parties/reddit-pixel.mjs.map +1 -1
  93. package/dist/track/index.cjs +1 -1
  94. package/dist/track/index.cjs.map +1 -1
  95. package/dist/track/index.d.cts.map +1 -1
  96. package/dist/track/index.d.mts.map +1 -1
  97. package/dist/track/index.mjs +1 -1
  98. package/dist/track/index.mjs.map +1 -1
  99. package/dist/track/oaiq.cjs.map +1 -1
  100. package/dist/track/oaiq.d.cts +1 -1
  101. package/dist/track/oaiq.d.cts.map +1 -1
  102. package/dist/track/oaiq.d.mts +1 -1
  103. package/dist/track/oaiq.d.mts.map +1 -1
  104. package/dist/track/oaiq.mjs.map +1 -1
  105. package/dist/track/rdt.cjs +3 -4
  106. package/dist/track/rdt.cjs.map +1 -1
  107. package/dist/track/rdt.mjs +3 -4
  108. package/dist/track/rdt.mjs.map +1 -1
  109. package/dist/track/types.d.cts +0 -4
  110. package/dist/track/types.d.cts.map +1 -1
  111. package/dist/track/types.d.mts +0 -4
  112. package/dist/track/types.d.mts.map +1 -1
  113. package/dist/web/index.cjs +4 -4
  114. package/dist/web/index.cjs.map +1 -1
  115. package/dist/web/index.d.cts.map +1 -1
  116. package/dist/web/index.d.mts.map +1 -1
  117. package/dist/web/index.mjs +5 -3
  118. package/dist/web/index.mjs.map +1 -1
  119. package/package.json +16 -16
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
8
9
  var __copyProps = (to, from, except, desc) => {
9
10
  if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
11
  key = keys[i];
@@ -20,4 +21,5 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
20
21
  enumerable: true
21
22
  }) : target, mod));
22
23
  //#endregion
24
+ exports.__commonJSMin = __commonJSMin;
23
25
  exports.__toESM = __toESM;
@@ -0,0 +1,24 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
+ get: ((k) => from[k]).bind(null, key),
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
20
+ value: mod,
21
+ enumerable: true
22
+ }) : target, mod));
23
+ //#endregion
24
+ export { __commonJSMin, __toESM };
@@ -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"}
@@ -4,11 +4,11 @@ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
4
4
  const require_track_index = require("../track/index.cjs");
5
5
  const require_hooks_use_outbound_click_analytics = require("../hooks/use-outbound-click-analytics.cjs");
6
6
  const require_hooks_use_web_analytics = require("../hooks/use-web-analytics.cjs");
7
- let react_jsx_runtime = require("react/jsx-runtime");
8
7
  let next_navigation_js = require("next/navigation.js");
9
8
  let next_script_js = require("next/script.js");
10
9
  next_script_js = require_runtime.__toESM(next_script_js, 1);
11
10
  let next_web_vitals_js = require("next/web-vitals.js");
11
+ let react_jsx_runtime = require("react/jsx-runtime");
12
12
  //#region src/next/index.tsx
13
13
  function Analytics({ gaId, gaSrc, nonce, debugMode, metaPixelId, hotjarId, redditPixelId, linkedInPartnerId, facebookAppId, reportWebVitals = true }) {
14
14
  require_hooks_use_web_analytics.useWebAnalytics((0, next_navigation_js.usePathname)());
@@ -2,10 +2,10 @@
2
2
  import { track } from "../track/index.mjs";
3
3
  import { useOutboundClickAnalytics } from "../hooks/use-outbound-click-analytics.mjs";
4
4
  import { useWebAnalytics } from "../hooks/use-web-analytics.mjs";
5
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
5
  import { usePathname } from "next/navigation.js";
7
6
  import Script from "next/script.js";
8
7
  import { useReportWebVitals } from "next/web-vitals.js";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
9
  //#region src/next/index.tsx
10
10
  function Analytics({ gaId, gaSrc, nonce, debugMode, metaPixelId, hotjarId, redditPixelId, linkedInPartnerId, facebookAppId, reportWebVitals = true }) {
11
11
  useWebAnalytics(usePathname());