@shware/analytics 2.12.4 → 2.13.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.
@@ -24,8 +24,17 @@ __export(feedback_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(feedback_exports);
26
26
  var import_setup = require("../setup/index.cjs");
27
+ var import_fetch = require("../utils/fetch.cjs");
27
28
  async function sendFeedback(dto) {
28
- await import_setup.config.http.post("/feedback", dto);
29
+ const response = await (0, import_fetch.fetch)(`${import_setup.config.endpoint}/feedback`, {
30
+ method: "POST",
31
+ credentials: "include",
32
+ headers: await import_setup.config.getHeaders(),
33
+ body: JSON.stringify(dto)
34
+ });
35
+ if (!response.ok) {
36
+ throw new Error(`Failed to send feedback: ${response.status} ${await response.text()}`);
37
+ }
29
38
  }
30
39
  // Annotate the CommonJS export names for ESM import in node:
31
40
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/feedback/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport type { CreateFeedbackDTO } from '../schema/index';\n\nexport async function sendFeedback(dto: CreateFeedbackDTO) {\n await config.http.post('/feedback', dto);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AAGvB,eAAsB,aAAa,KAAwB;AACzD,QAAM,oBAAO,KAAK,KAAK,aAAa,GAAG;AACzC;","names":[]}
1
+ {"version":3,"sources":["../../src/feedback/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { fetch } from '../utils/fetch';\nimport type { CreateFeedbackDTO } from '../schema/index';\n\nexport async function sendFeedback(dto: CreateFeedbackDTO) {\n const response = await fetch(`${config.endpoint}/feedback`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to send feedback: ${response.status} ${await response.text()}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AACvB,mBAAsB;AAGtB,eAAsB,aAAa,KAAwB;AACzD,QAAM,WAAW,UAAM,oBAAM,GAAG,oBAAO,QAAQ,aAAa;AAAA,IAC1D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS,MAAM,oBAAO,WAAW;AAAA,IACjC,MAAM,KAAK,UAAU,GAAG;AAAA,EAC1B,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,4BAA4B,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC,EAAE;AAAA,EACxF;AACF;","names":[]}
@@ -1,7 +1,16 @@
1
1
  // src/feedback/index.ts
2
2
  import { config } from "../setup/index.mjs";
3
+ import { fetch } from "../utils/fetch.mjs";
3
4
  async function sendFeedback(dto) {
4
- await config.http.post("/feedback", dto);
5
+ const response = await fetch(`${config.endpoint}/feedback`, {
6
+ method: "POST",
7
+ credentials: "include",
8
+ headers: await config.getHeaders(),
9
+ body: JSON.stringify(dto)
10
+ });
11
+ if (!response.ok) {
12
+ throw new Error(`Failed to send feedback: ${response.status} ${await response.text()}`);
13
+ }
5
14
  }
6
15
  export {
7
16
  sendFeedback
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/feedback/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport type { CreateFeedbackDTO } from '../schema/index';\n\nexport async function sendFeedback(dto: CreateFeedbackDTO) {\n await config.http.post('/feedback', dto);\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAGvB,eAAsB,aAAa,KAAwB;AACzD,QAAM,OAAO,KAAK,KAAK,aAAa,GAAG;AACzC;","names":[]}
1
+ {"version":3,"sources":["../../src/feedback/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { fetch } from '../utils/fetch';\nimport type { CreateFeedbackDTO } from '../schema/index';\n\nexport async function sendFeedback(dto: CreateFeedbackDTO) {\n const response = await fetch(`${config.endpoint}/feedback`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to send feedback: ${response.status} ${await response.text()}`);\n }\n}\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,aAAa;AAGtB,eAAsB,aAAa,KAAwB;AACzD,QAAM,WAAW,MAAM,MAAM,GAAG,OAAO,QAAQ,aAAa;AAAA,IAC1D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS,MAAM,OAAO,WAAW;AAAA,IACjC,MAAM,KAAK,UAAU,GAAG;AAAA,EAC1B,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,4BAA4B,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC,EAAE;AAAA,EACxF;AACF;","names":[]}
package/dist/index.d.cts CHANGED
@@ -7,6 +7,5 @@ export { CreateFeedbackDTO, CreateLinkDTO, createFeedbackSchema, createLinkSchem
7
7
  export { stripeMinorUnits } from './utils/stripe.cjs';
8
8
  export { AllowedPropertyValues, TrackProperties, TrackTags, UserProvidedData } from './track/types.cjs';
9
9
  export { VisitorProperties } from './visitor/types.cjs';
10
- import 'axios';
11
10
  import 'zod/mini';
12
11
  import './track/gtag.cjs';
package/dist/index.d.ts CHANGED
@@ -7,6 +7,5 @@ export { CreateFeedbackDTO, CreateLinkDTO, createFeedbackSchema, createLinkSchem
7
7
  export { stripeMinorUnits } from './utils/stripe.js';
8
8
  export { AllowedPropertyValues, TrackProperties, TrackTags, UserProvidedData } from './track/types.js';
9
9
  export { VisitorProperties } from './visitor/types.js';
10
- import 'axios';
11
10
  import 'zod/mini';
12
11
  import './track/gtag.js';
@@ -25,15 +25,33 @@ __export(link_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(link_exports);
27
27
  var import_setup = require("../setup/index.cjs");
28
+ var import_fetch = require("../utils/fetch.cjs");
28
29
  async function createLink(dto) {
29
- const response = await import_setup.config.http.post("/links", dto);
30
- return response.data;
30
+ const response = await (0, import_fetch.fetch)(`${import_setup.config.endpoint}/links`, {
31
+ method: "POST",
32
+ credentials: "include",
33
+ headers: await import_setup.config.getHeaders(),
34
+ body: JSON.stringify(dto)
35
+ });
36
+ if (!response.ok) {
37
+ throw new Error(`Failed to create link: ${response.status} ${await response.text()}`);
38
+ }
39
+ return response.json();
31
40
  }
32
41
  async function getLink(id) {
33
42
  try {
34
- const response = await import_setup.config.http.get(`/links/${id}`);
35
- return response.data;
43
+ const response = await (0, import_fetch.fetch)(`${import_setup.config.endpoint}/links/${id}`, {
44
+ method: "GET",
45
+ credentials: "include",
46
+ headers: await import_setup.config.getHeaders()
47
+ });
48
+ if (!response.ok) {
49
+ console.error(`Failed to get link(${id}): ${response.status} ${await response.text()}`);
50
+ return null;
51
+ }
52
+ return response.json();
36
53
  } catch {
54
+ console.error(`Failed to get link(${id}): network error`);
37
55
  return null;
38
56
  }
39
57
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/link/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport type { CreateLinkDTO } from '../schema/index';\n\nexport interface Link extends CreateLinkDTO {\n id: string;\n created_at: string;\n}\n\nexport async function createLink(dto: CreateLinkDTO) {\n const response = await config.http.post<Link>('/links', dto);\n return response.data;\n}\n\nexport async function getLink(id: string): Promise<Link | null> {\n try {\n const response = await config.http.get<Link>(`/links/${id}`);\n return response.data;\n } catch {\n return null;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AAQvB,eAAsB,WAAW,KAAoB;AACnD,QAAM,WAAW,MAAM,oBAAO,KAAK,KAAW,UAAU,GAAG;AAC3D,SAAO,SAAS;AAClB;AAEA,eAAsB,QAAQ,IAAkC;AAC9D,MAAI;AACF,UAAM,WAAW,MAAM,oBAAO,KAAK,IAAU,UAAU,EAAE,EAAE;AAC3D,WAAO,SAAS;AAAA,EAClB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/link/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { fetch } from '../utils/fetch';\nimport type { CreateLinkDTO } from '../schema/index';\n\nexport interface Link extends CreateLinkDTO {\n id: string;\n created_at: string;\n}\n\nexport async function createLink(dto: CreateLinkDTO) {\n const response = await fetch(`${config.endpoint}/links`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create link: ${response.status} ${await response.text()}`);\n }\n return response.json() as Promise<Link>;\n}\n\nexport async function getLink(id: string): Promise<Link | null> {\n try {\n const response = await fetch(`${config.endpoint}/links/${id}`, {\n method: 'GET',\n credentials: 'include',\n headers: await config.getHeaders(),\n });\n\n if (!response.ok) {\n console.error(`Failed to get link(${id}): ${response.status} ${await response.text()}`);\n return null;\n }\n return response.json() as Promise<Link>;\n } catch {\n console.error(`Failed to get link(${id}): network error`);\n return null;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AACvB,mBAAsB;AAQtB,eAAsB,WAAW,KAAoB;AACnD,QAAM,WAAW,UAAM,oBAAM,GAAG,oBAAO,QAAQ,UAAU;AAAA,IACvD,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS,MAAM,oBAAO,WAAW;AAAA,IACjC,MAAM,KAAK,UAAU,GAAG;AAAA,EAC1B,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,0BAA0B,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC,EAAE;AAAA,EACtF;AACA,SAAO,SAAS,KAAK;AACvB;AAEA,eAAsB,QAAQ,IAAkC;AAC9D,MAAI;AACF,UAAM,WAAW,UAAM,oBAAM,GAAG,oBAAO,QAAQ,UAAU,EAAE,IAAI;AAAA,MAC7D,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS,MAAM,oBAAO,WAAW;AAAA,IACnC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,cAAQ,MAAM,sBAAsB,EAAE,MAAM,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC,EAAE;AACtF,aAAO;AAAA,IACT;AACA,WAAO,SAAS,KAAK;AAAA,EACvB,QAAQ;AACN,YAAQ,MAAM,sBAAsB,EAAE,kBAAkB;AACxD,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,14 +1,32 @@
1
1
  // src/link/index.ts
2
2
  import { config } from "../setup/index.mjs";
3
+ import { fetch } from "../utils/fetch.mjs";
3
4
  async function createLink(dto) {
4
- const response = await config.http.post("/links", dto);
5
- return response.data;
5
+ const response = await fetch(`${config.endpoint}/links`, {
6
+ method: "POST",
7
+ credentials: "include",
8
+ headers: await config.getHeaders(),
9
+ body: JSON.stringify(dto)
10
+ });
11
+ if (!response.ok) {
12
+ throw new Error(`Failed to create link: ${response.status} ${await response.text()}`);
13
+ }
14
+ return response.json();
6
15
  }
7
16
  async function getLink(id) {
8
17
  try {
9
- const response = await config.http.get(`/links/${id}`);
10
- return response.data;
18
+ const response = await fetch(`${config.endpoint}/links/${id}`, {
19
+ method: "GET",
20
+ credentials: "include",
21
+ headers: await config.getHeaders()
22
+ });
23
+ if (!response.ok) {
24
+ console.error(`Failed to get link(${id}): ${response.status} ${await response.text()}`);
25
+ return null;
26
+ }
27
+ return response.json();
11
28
  } catch {
29
+ console.error(`Failed to get link(${id}): network error`);
12
30
  return null;
13
31
  }
14
32
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/link/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport type { CreateLinkDTO } from '../schema/index';\n\nexport interface Link extends CreateLinkDTO {\n id: string;\n created_at: string;\n}\n\nexport async function createLink(dto: CreateLinkDTO) {\n const response = await config.http.post<Link>('/links', dto);\n return response.data;\n}\n\nexport async function getLink(id: string): Promise<Link | null> {\n try {\n const response = await config.http.get<Link>(`/links/${id}`);\n return response.data;\n } catch {\n return null;\n }\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAQvB,eAAsB,WAAW,KAAoB;AACnD,QAAM,WAAW,MAAM,OAAO,KAAK,KAAW,UAAU,GAAG;AAC3D,SAAO,SAAS;AAClB;AAEA,eAAsB,QAAQ,IAAkC;AAC9D,MAAI;AACF,UAAM,WAAW,MAAM,OAAO,KAAK,IAAU,UAAU,EAAE,EAAE;AAC3D,WAAO,SAAS;AAAA,EAClB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/link/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { fetch } from '../utils/fetch';\nimport type { CreateLinkDTO } from '../schema/index';\n\nexport interface Link extends CreateLinkDTO {\n id: string;\n created_at: string;\n}\n\nexport async function createLink(dto: CreateLinkDTO) {\n const response = await fetch(`${config.endpoint}/links`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create link: ${response.status} ${await response.text()}`);\n }\n return response.json() as Promise<Link>;\n}\n\nexport async function getLink(id: string): Promise<Link | null> {\n try {\n const response = await fetch(`${config.endpoint}/links/${id}`, {\n method: 'GET',\n credentials: 'include',\n headers: await config.getHeaders(),\n });\n\n if (!response.ok) {\n console.error(`Failed to get link(${id}): ${response.status} ${await response.text()}`);\n return null;\n }\n return response.json() as Promise<Link>;\n } catch {\n console.error(`Failed to get link(${id}): network error`);\n return null;\n }\n}\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,aAAa;AAQtB,eAAsB,WAAW,KAAoB;AACnD,QAAM,WAAW,MAAM,MAAM,GAAG,OAAO,QAAQ,UAAU;AAAA,IACvD,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS,MAAM,OAAO,WAAW;AAAA,IACjC,MAAM,KAAK,UAAU,GAAG;AAAA,EAC1B,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,0BAA0B,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC,EAAE;AAAA,EACtF;AACA,SAAO,SAAS,KAAK;AACvB;AAEA,eAAsB,QAAQ,IAAkC;AAC9D,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,QAAQ,UAAU,EAAE,IAAI;AAAA,MAC7D,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS,MAAM,OAAO,WAAW;AAAA,IACnC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,cAAQ,MAAM,sBAAsB,EAAE,MAAM,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC,EAAE;AACtF,aAAO;AAAA,IACT;AACA,WAAO,SAAS,KAAK;AAAA,EACvB,QAAQ;AACN,YAAQ,MAAM,sBAAsB,EAAE,kBAAkB;AACxD,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -2,7 +2,6 @@ export { getDeviceId, getDeviceType, getTags, storage } from './setup.cjs';
2
2
  export { useScreenViewAnalytics } from './analytics.cjs';
3
3
  export { DeterministicFingerprint, ProbabilisticFingerprint, getDeterministicFingerprint, getProbabilisticFingerprint } from './fingerprint.cjs';
4
4
  import '../setup/index.cjs';
5
- import 'axios';
6
5
  import '../track/types.cjs';
7
6
  import '../track/gtag.cjs';
8
7
  import '../visitor/types.cjs';
@@ -2,7 +2,6 @@ export { getDeviceId, getDeviceType, getTags, storage } from './setup.js';
2
2
  export { useScreenViewAnalytics } from './analytics.js';
3
3
  export { DeterministicFingerprint, ProbabilisticFingerprint, getDeterministicFingerprint, getProbabilisticFingerprint } from './fingerprint.js';
4
4
  import '../setup/index.js';
5
- import 'axios';
6
5
  import '../track/types.js';
7
6
  import '../track/gtag.js';
8
7
  import '../visitor/types.js';
@@ -1,6 +1,5 @@
1
1
  import { Storage } from '../setup/index.cjs';
2
2
  import { TrackTags } from '../track/types.cjs';
3
- import 'axios';
4
3
  import '../visitor/types.cjs';
5
4
  import '../track/gtag.cjs';
6
5
 
@@ -1,6 +1,5 @@
1
1
  import { Storage } from '../setup/index.js';
2
2
  import { TrackTags } from '../track/types.js';
3
- import 'axios';
4
3
  import '../visitor/types.js';
5
4
  import '../track/gtag.js';
6
5
 
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
 
30
20
  // src/setup/index.ts
@@ -34,10 +24,8 @@ __export(setup_exports, {
34
24
  setupAnalytics: () => setupAnalytics
35
25
  });
36
26
  module.exports = __toCommonJS(setup_exports);
37
- var import_axios = __toESM(require("axios"), 1);
38
- var import_axios_retry = __toESM(require("axios-retry"), 1);
39
27
  var config = {
40
- http: null,
28
+ endpoint: "",
41
29
  release: "0.0.0",
42
30
  storage: null,
43
31
  getTags: null,
@@ -49,13 +37,18 @@ var config = {
49
37
  function setupAnalytics(init) {
50
38
  config.release = init.release;
51
39
  config.storage = init.storage;
40
+ config.endpoint = init.endpoint;
52
41
  config.getTags = init.getTags;
53
42
  config.getDeviceId = init.getDeviceId;
54
- config.getHeaders = init.getHeaders ?? (() => ({}));
43
+ config.getHeaders = async () => {
44
+ var _a;
45
+ return {
46
+ "Content-Type": "application/json",
47
+ ...await ((_a = init.getHeaders) == null ? void 0 : _a.call(init))
48
+ };
49
+ };
55
50
  config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];
56
51
  config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];
57
- config.http = import_axios.default.create({ baseURL: init.endpoint, withCredentials: true, adapter: "fetch" });
58
- (0, import_axios_retry.default)(config.http, { retries: 5, retryDelay: import_axios_retry.default.exponentialDelay });
59
52
  }
60
53
  // Annotate the CommonJS export names for ESM import in node:
61
54
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport retry from 'axios-retry';\nimport type { ThirdPartyTracker, TrackTags } from '../track/types';\nimport type { ThirdPartyUserSetter } from '../visitor/types';\n\nexport interface Storage {\n getItem: (key: string) => (string | null) | Promise<string | null>;\n setItem: (key: string, value: string) => void | Promise<void>;\n}\n\nexport interface Options {\n release: string;\n storage: Storage;\n endpoint: string;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers?: ThirdPartyTracker[];\n thirdPartyUserSetters?: ThirdPartyUserSetter[];\n}\n\ninterface Config {\n release: string;\n storage: Storage;\n http: AxiosInstance;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers: ThirdPartyTracker[];\n thirdPartyUserSetters: ThirdPartyUserSetter[];\n}\n\nexport const config: Config = {\n http: null!,\n release: '0.0.0',\n storage: null!,\n getTags: null!,\n getDeviceId: null!,\n getHeaders: null!,\n thirdPartyTrackers: [],\n thirdPartyUserSetters: [],\n};\n\nexport function setupAnalytics(init: Options) {\n config.release = init.release;\n config.storage = init.storage;\n config.getTags = init.getTags;\n config.getDeviceId = init.getDeviceId;\n config.getHeaders = init.getHeaders ?? (() => ({}));\n config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];\n config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];\n config.http = axios.create({ baseURL: init.endpoint, withCredentials: true, adapter: 'fetch' });\n retry(config.http, { retries: 5, retryDelay: retry.exponentialDelay });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAqC;AACrC,yBAAkB;AA+BX,IAAM,SAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,oBAAoB,CAAC;AAAA,EACrB,uBAAuB,CAAC;AAC1B;AAEO,SAAS,eAAe,MAAe;AAC5C,SAAO,UAAU,KAAK;AACtB,SAAO,UAAU,KAAK;AACtB,SAAO,UAAU,KAAK;AACtB,SAAO,cAAc,KAAK;AAC1B,SAAO,aAAa,KAAK,eAAe,OAAO,CAAC;AAChD,SAAO,qBAAqB,KAAK,sBAAsB,CAAC;AACxD,SAAO,wBAAwB,KAAK,yBAAyB,CAAC;AAC9D,SAAO,OAAO,aAAAA,QAAM,OAAO,EAAE,SAAS,KAAK,UAAU,iBAAiB,MAAM,SAAS,QAAQ,CAAC;AAC9F,yBAAAC,SAAM,OAAO,MAAM,EAAE,SAAS,GAAG,YAAY,mBAAAA,QAAM,iBAAiB,CAAC;AACvE;","names":["axios","retry"]}
1
+ {"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import type { ThirdPartyTracker, TrackTags } from '../track/types';\nimport type { ThirdPartyUserSetter } from '../visitor/types';\n\nexport interface Storage {\n getItem: (key: string) => (string | null) | Promise<string | null>;\n setItem: (key: string, value: string) => void | Promise<void>;\n}\n\nexport interface Options {\n release: string;\n storage: Storage;\n endpoint: string;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers?: ThirdPartyTracker[];\n thirdPartyUserSetters?: ThirdPartyUserSetter[];\n}\n\ninterface Config {\n release: string;\n endpoint: string;\n storage: Storage;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers: ThirdPartyTracker[];\n thirdPartyUserSetters: ThirdPartyUserSetter[];\n}\n\nexport const config: Config = {\n endpoint: '',\n release: '0.0.0',\n storage: null!,\n getTags: null!,\n getDeviceId: null!,\n getHeaders: null!,\n thirdPartyTrackers: [],\n thirdPartyUserSetters: [],\n};\n\nexport function setupAnalytics(init: Options) {\n config.release = init.release;\n config.storage = init.storage;\n config.endpoint = init.endpoint;\n config.getTags = init.getTags;\n config.getDeviceId = init.getDeviceId;\n config.getHeaders = async () => ({\n 'Content-Type': 'application/json',\n ...(await init.getHeaders?.()),\n });\n config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];\n config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BO,IAAM,SAAiB;AAAA,EAC5B,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,oBAAoB,CAAC;AAAA,EACrB,uBAAuB,CAAC;AAC1B;AAEO,SAAS,eAAe,MAAe;AAC5C,SAAO,UAAU,KAAK;AACtB,SAAO,UAAU,KAAK;AACtB,SAAO,WAAW,KAAK;AACvB,SAAO,UAAU,KAAK;AACtB,SAAO,cAAc,KAAK;AAC1B,SAAO,aAAa,YAAS;AA/C/B;AA+CmC;AAAA,MAC/B,gBAAgB;AAAA,MAChB,GAAI,QAAM,UAAK,eAAL;AAAA,IACZ;AAAA;AACA,SAAO,qBAAqB,KAAK,sBAAsB,CAAC;AACxD,SAAO,wBAAwB,KAAK,yBAAyB,CAAC;AAChE;","names":[]}
@@ -1,4 +1,3 @@
1
- import { AxiosInstance } from 'axios';
2
1
  import { TrackTags, ThirdPartyTracker } from '../track/types.cjs';
3
2
  import { ThirdPartyUserSetter } from '../visitor/types.cjs';
4
3
  import '../track/gtag.cjs';
@@ -19,8 +18,8 @@ interface Options {
19
18
  }
20
19
  interface Config {
21
20
  release: string;
21
+ endpoint: string;
22
22
  storage: Storage;
23
- http: AxiosInstance;
24
23
  getTags: () => TrackTags | Promise<TrackTags>;
25
24
  getDeviceId: () => string | Promise<string>;
26
25
  getHeaders: () => Record<string, string> | Promise<Record<string, string>>;
@@ -1,4 +1,3 @@
1
- import { AxiosInstance } from 'axios';
2
1
  import { TrackTags, ThirdPartyTracker } from '../track/types.js';
3
2
  import { ThirdPartyUserSetter } from '../visitor/types.js';
4
3
  import '../track/gtag.js';
@@ -19,8 +18,8 @@ interface Options {
19
18
  }
20
19
  interface Config {
21
20
  release: string;
21
+ endpoint: string;
22
22
  storage: Storage;
23
- http: AxiosInstance;
24
23
  getTags: () => TrackTags | Promise<TrackTags>;
25
24
  getDeviceId: () => string | Promise<string>;
26
25
  getHeaders: () => Record<string, string> | Promise<Record<string, string>>;
@@ -1,8 +1,6 @@
1
1
  // src/setup/index.ts
2
- import axios from "axios";
3
- import retry from "axios-retry";
4
2
  var config = {
5
- http: null,
3
+ endpoint: "",
6
4
  release: "0.0.0",
7
5
  storage: null,
8
6
  getTags: null,
@@ -14,13 +12,18 @@ var config = {
14
12
  function setupAnalytics(init) {
15
13
  config.release = init.release;
16
14
  config.storage = init.storage;
15
+ config.endpoint = init.endpoint;
17
16
  config.getTags = init.getTags;
18
17
  config.getDeviceId = init.getDeviceId;
19
- config.getHeaders = init.getHeaders ?? (() => ({}));
18
+ config.getHeaders = async () => {
19
+ var _a;
20
+ return {
21
+ "Content-Type": "application/json",
22
+ ...await ((_a = init.getHeaders) == null ? void 0 : _a.call(init))
23
+ };
24
+ };
20
25
  config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];
21
26
  config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];
22
- config.http = axios.create({ baseURL: init.endpoint, withCredentials: true, adapter: "fetch" });
23
- retry(config.http, { retries: 5, retryDelay: retry.exponentialDelay });
24
27
  }
25
28
  export {
26
29
  config,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport retry from 'axios-retry';\nimport type { ThirdPartyTracker, TrackTags } from '../track/types';\nimport type { ThirdPartyUserSetter } from '../visitor/types';\n\nexport interface Storage {\n getItem: (key: string) => (string | null) | Promise<string | null>;\n setItem: (key: string, value: string) => void | Promise<void>;\n}\n\nexport interface Options {\n release: string;\n storage: Storage;\n endpoint: string;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers?: ThirdPartyTracker[];\n thirdPartyUserSetters?: ThirdPartyUserSetter[];\n}\n\ninterface Config {\n release: string;\n storage: Storage;\n http: AxiosInstance;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers: ThirdPartyTracker[];\n thirdPartyUserSetters: ThirdPartyUserSetter[];\n}\n\nexport const config: Config = {\n http: null!,\n release: '0.0.0',\n storage: null!,\n getTags: null!,\n getDeviceId: null!,\n getHeaders: null!,\n thirdPartyTrackers: [],\n thirdPartyUserSetters: [],\n};\n\nexport function setupAnalytics(init: Options) {\n config.release = init.release;\n config.storage = init.storage;\n config.getTags = init.getTags;\n config.getDeviceId = init.getDeviceId;\n config.getHeaders = init.getHeaders ?? (() => ({}));\n config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];\n config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];\n config.http = axios.create({ baseURL: init.endpoint, withCredentials: true, adapter: 'fetch' });\n retry(config.http, { retries: 5, retryDelay: retry.exponentialDelay });\n}\n"],"mappings":";AAAA,OAAO,WAA8B;AACrC,OAAO,WAAW;AA+BX,IAAM,SAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,oBAAoB,CAAC;AAAA,EACrB,uBAAuB,CAAC;AAC1B;AAEO,SAAS,eAAe,MAAe;AAC5C,SAAO,UAAU,KAAK;AACtB,SAAO,UAAU,KAAK;AACtB,SAAO,UAAU,KAAK;AACtB,SAAO,cAAc,KAAK;AAC1B,SAAO,aAAa,KAAK,eAAe,OAAO,CAAC;AAChD,SAAO,qBAAqB,KAAK,sBAAsB,CAAC;AACxD,SAAO,wBAAwB,KAAK,yBAAyB,CAAC;AAC9D,SAAO,OAAO,MAAM,OAAO,EAAE,SAAS,KAAK,UAAU,iBAAiB,MAAM,SAAS,QAAQ,CAAC;AAC9F,QAAM,OAAO,MAAM,EAAE,SAAS,GAAG,YAAY,MAAM,iBAAiB,CAAC;AACvE;","names":[]}
1
+ {"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import type { ThirdPartyTracker, TrackTags } from '../track/types';\nimport type { ThirdPartyUserSetter } from '../visitor/types';\n\nexport interface Storage {\n getItem: (key: string) => (string | null) | Promise<string | null>;\n setItem: (key: string, value: string) => void | Promise<void>;\n}\n\nexport interface Options {\n release: string;\n storage: Storage;\n endpoint: string;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers?: ThirdPartyTracker[];\n thirdPartyUserSetters?: ThirdPartyUserSetter[];\n}\n\ninterface Config {\n release: string;\n endpoint: string;\n storage: Storage;\n getTags: () => TrackTags | Promise<TrackTags>;\n getDeviceId: () => string | Promise<string>;\n getHeaders: () => Record<string, string> | Promise<Record<string, string>>;\n thirdPartyTrackers: ThirdPartyTracker[];\n thirdPartyUserSetters: ThirdPartyUserSetter[];\n}\n\nexport const config: Config = {\n endpoint: '',\n release: '0.0.0',\n storage: null!,\n getTags: null!,\n getDeviceId: null!,\n getHeaders: null!,\n thirdPartyTrackers: [],\n thirdPartyUserSetters: [],\n};\n\nexport function setupAnalytics(init: Options) {\n config.release = init.release;\n config.storage = init.storage;\n config.endpoint = init.endpoint;\n config.getTags = init.getTags;\n config.getDeviceId = init.getDeviceId;\n config.getHeaders = async () => ({\n 'Content-Type': 'application/json',\n ...(await init.getHeaders?.()),\n });\n config.thirdPartyTrackers = init.thirdPartyTrackers ?? [];\n config.thirdPartyUserSetters = init.thirdPartyUserSetters ?? [];\n}\n"],"mappings":";AA8BO,IAAM,SAAiB;AAAA,EAC5B,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,oBAAoB,CAAC;AAAA,EACrB,uBAAuB,CAAC;AAC1B;AAEO,SAAS,eAAe,MAAe;AAC5C,SAAO,UAAU,KAAK;AACtB,SAAO,UAAU,KAAK;AACtB,SAAO,WAAW,KAAK;AACvB,SAAO,UAAU,KAAK;AACtB,SAAO,cAAc,KAAK;AAC1B,SAAO,aAAa,YAAS;AA/C/B;AA+CmC;AAAA,MAC/B,gBAAgB;AAAA,MAChB,GAAI,QAAM,UAAK,eAAL;AAAA,IACZ;AAAA;AACA,SAAO,qBAAqB,KAAK,sBAAsB,CAAC;AACxD,SAAO,wBAAwB,KAAK,yBAAyB,CAAC;AAChE;","names":[]}
@@ -25,6 +25,7 @@ __export(track_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(track_exports);
27
27
  var import_setup = require("../setup/index.cjs");
28
+ var import_fetch = require("../utils/fetch.cjs");
28
29
  var import_token_bucket = require("../utils/token-bucket.cjs");
29
30
  var import_visitor = require("../visitor/index.cjs");
30
31
  var defaultOptions = { enableThirdPartyTracking: true };
@@ -43,8 +44,16 @@ async function sendEvents(events) {
43
44
  visitor_id,
44
45
  timestamp: event.timestamp
45
46
  }));
46
- const headers = await import_setup.config.getHeaders();
47
- const { data } = await import_setup.config.http.post(`/events`, dto, { headers });
47
+ const response = await (0, import_fetch.fetch)(`${import_setup.config.endpoint}/events`, {
48
+ method: "POST",
49
+ credentials: "include",
50
+ headers: await import_setup.config.getHeaders(),
51
+ body: JSON.stringify(dto)
52
+ });
53
+ if (!response.ok) {
54
+ throw new Error(`Failed to send track event: ${response.status} ${await response.text()}`);
55
+ }
56
+ const data = await response.json();
48
57
  let index = 0;
49
58
  while (events.length > 0) {
50
59
  const { options, name, properties } = events.shift();
@@ -55,7 +64,7 @@ async function sendEvents(events) {
55
64
  import_setup.config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));
56
65
  }
57
66
  } catch (e) {
58
- if (e instanceof Error) console.log("Failed to send track event:", e.message);
67
+ if (e instanceof Error) console.log(e.message);
59
68
  events.forEach((event) => {
60
69
  var _a2, _b;
61
70
  return (_b = (_a2 = event.options).onError) == null ? void 0 : _b.call(_a2, e);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { TokenBucket } from '../utils/token-bucket';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackEventResponse,\n TrackName,\n TrackProperties,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => void;\n onError?: (error: unknown) => void;\n}\n\nconst defaultOptions: TrackOptions = { enableThirdPartyTracking: true };\nconst tokenBucket = new TokenBucket({ rate: 1, capacity: 20, requested: 2 });\n\ntype Item = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n name: TrackName<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens();\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n const headers = await config.getHeaders();\n const { data } = await config.http.post<TrackEventResponse>(`/events`, dto, { headers });\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log('Failed to send track event:', e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n\nexport async function trackAsync<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n await sendEvents([{ name, properties, options, timestamp: new Date().toISOString() }]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AACvB,0BAA4B;AAC5B,qBAA2B;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AACtE,IAAM,cAAc,IAAI,gCAAY,EAAE,MAAM,GAAG,UAAU,IAAI,WAAW,EAAE,CAAC;AAW3E,eAAe,WAAW,QAAgB;AA7B1C;AA8BE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa;AAE/B,UAAM,OAAO,MAAM,oBAAO,QAAQ;AAClC,UAAM,cAAc,UAAM,2BAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AACF,UAAM,UAAU,MAAM,oBAAO,WAAW;AACxC,UAAM,EAAE,KAAK,IAAI,MAAM,oBAAO,KAAK,KAAyB,WAAW,KAAK,EAAE,QAAQ,CAAC;AACvF,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,oBAAO,mBAAoB;AACrE,0BAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,+BAA+B,EAAE,OAAO;AAC5E,WAAO,QAAQ,CAAC,UAAO;AAxD3B,UAAAA,KAAA;AAwD8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;AAEA,eAAsB,WACpB,MACA,YACA,UAAwB,gBACxB;AACA,QAAM,WAAW,CAAC,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC,CAAC;AACvF;","names":["_a"]}
1
+ {"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { fetch } from '../utils/fetch';\nimport { TokenBucket } from '../utils/token-bucket';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackEventResponse,\n TrackName,\n TrackProperties,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => void;\n onError?: (error: unknown) => void;\n}\n\nconst defaultOptions: TrackOptions = { enableThirdPartyTracking: true };\nconst tokenBucket = new TokenBucket({ rate: 1, capacity: 20, requested: 2 });\n\ntype Item = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n name: TrackName<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens();\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n\n const response = await fetch(`${config.endpoint}/events`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to send track event: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as TrackEventResponse;\n\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log(e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n\nexport async function trackAsync<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n await sendEvents([{ name, properties, options, timestamp: new Date().toISOString() }]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AACvB,mBAAsB;AACtB,0BAA4B;AAC5B,qBAA2B;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AACtE,IAAM,cAAc,IAAI,gCAAY,EAAE,MAAM,GAAG,UAAU,IAAI,WAAW,EAAE,CAAC;AAW3E,eAAe,WAAW,QAAgB;AA9B1C;AA+BE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa;AAE/B,UAAM,OAAO,MAAM,oBAAO,QAAQ;AAClC,UAAM,cAAc,UAAM,2BAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AAEF,UAAM,WAAW,UAAM,oBAAM,GAAG,oBAAO,QAAQ,WAAW;AAAA,MACxD,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS,MAAM,oBAAO,WAAW;AAAA,MACjC,MAAM,KAAK,UAAU,GAAG;AAAA,IAC1B,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,+BAA+B,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC,EAAE;AAAA,IAC3F;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,oBAAO,mBAAoB;AACrE,0BAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,EAAE,OAAO;AAC7C,WAAO,QAAQ,CAAC,UAAO;AArE3B,UAAAA,KAAA;AAqE8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;AAEA,eAAsB,WACpB,MACA,YACA,UAAwB,gBACxB;AACA,QAAM,WAAW,CAAC,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC,CAAC;AACvF;","names":["_a"]}
@@ -1,5 +1,6 @@
1
1
  // src/track/index.ts
2
2
  import { config } from "../setup/index.mjs";
3
+ import { fetch } from "../utils/fetch.mjs";
3
4
  import { TokenBucket } from "../utils/token-bucket.mjs";
4
5
  import { getVisitor } from "../visitor/index.mjs";
5
6
  var defaultOptions = { enableThirdPartyTracking: true };
@@ -18,8 +19,16 @@ async function sendEvents(events) {
18
19
  visitor_id,
19
20
  timestamp: event.timestamp
20
21
  }));
21
- const headers = await config.getHeaders();
22
- const { data } = await config.http.post(`/events`, dto, { headers });
22
+ const response = await fetch(`${config.endpoint}/events`, {
23
+ method: "POST",
24
+ credentials: "include",
25
+ headers: await config.getHeaders(),
26
+ body: JSON.stringify(dto)
27
+ });
28
+ if (!response.ok) {
29
+ throw new Error(`Failed to send track event: ${response.status} ${await response.text()}`);
30
+ }
31
+ const data = await response.json();
23
32
  let index = 0;
24
33
  while (events.length > 0) {
25
34
  const { options, name, properties } = events.shift();
@@ -30,7 +39,7 @@ async function sendEvents(events) {
30
39
  config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));
31
40
  }
32
41
  } catch (e) {
33
- if (e instanceof Error) console.log("Failed to send track event:", e.message);
42
+ if (e instanceof Error) console.log(e.message);
34
43
  events.forEach((event) => {
35
44
  var _a2, _b;
36
45
  return (_b = (_a2 = event.options).onError) == null ? void 0 : _b.call(_a2, e);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { TokenBucket } from '../utils/token-bucket';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackEventResponse,\n TrackName,\n TrackProperties,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => void;\n onError?: (error: unknown) => void;\n}\n\nconst defaultOptions: TrackOptions = { enableThirdPartyTracking: true };\nconst tokenBucket = new TokenBucket({ rate: 1, capacity: 20, requested: 2 });\n\ntype Item = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n name: TrackName<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens();\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n const headers = await config.getHeaders();\n const { data } = await config.http.post<TrackEventResponse>(`/events`, dto, { headers });\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log('Failed to send track event:', e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n\nexport async function trackAsync<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n await sendEvents([{ name, properties, options, timestamp: new Date().toISOString() }]);\n}\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AACtE,IAAM,cAAc,IAAI,YAAY,EAAE,MAAM,GAAG,UAAU,IAAI,WAAW,EAAE,CAAC;AAW3E,eAAe,WAAW,QAAgB;AA7B1C;AA8BE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa;AAE/B,UAAM,OAAO,MAAM,OAAO,QAAQ;AAClC,UAAM,cAAc,MAAM,WAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AACF,UAAM,UAAU,MAAM,OAAO,WAAW;AACxC,UAAM,EAAE,KAAK,IAAI,MAAM,OAAO,KAAK,KAAyB,WAAW,KAAK,EAAE,QAAQ,CAAC;AACvF,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,OAAO,mBAAoB;AACrE,aAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,+BAA+B,EAAE,OAAO;AAC5E,WAAO,QAAQ,CAAC,UAAO;AAxD3B,UAAAA,KAAA;AAwD8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;AAEA,eAAsB,WACpB,MACA,YACA,UAAwB,gBACxB;AACA,QAAM,WAAW,CAAC,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC,CAAC;AACvF;","names":["_a"]}
1
+ {"version":3,"sources":["../../src/track/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { fetch } from '../utils/fetch';\nimport { TokenBucket } from '../utils/token-bucket';\nimport { getVisitor } from '../visitor/index';\nimport type {\n CreateTrackEventDTO,\n EventName,\n TrackEventResponse,\n TrackName,\n TrackProperties,\n} from './types';\n\nexport interface TrackOptions {\n enableThirdPartyTracking?: boolean;\n onSucceed?: (response?: TrackEventResponse[number]) => void;\n onError?: (error: unknown) => void;\n}\n\nconst defaultOptions: TrackOptions = { enableThirdPartyTracking: true };\nconst tokenBucket = new TokenBucket({ rate: 1, capacity: 20, requested: 2 });\n\ntype Item = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n name: TrackName<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n properties: TrackProperties<any>;\n timestamp: string;\n options: TrackOptions;\n};\n\nasync function sendEvents(events: Item[]) {\n try {\n if (events.length === 0) return;\n await tokenBucket.removeTokens();\n\n const tags = await config.getTags();\n const visitor_id = (await getVisitor()).id;\n const dto: CreateTrackEventDTO = events.map((event) => ({\n name: event.name,\n properties: event.properties,\n tags,\n visitor_id,\n timestamp: event.timestamp,\n }));\n\n const response = await fetch(`${config.endpoint}/events`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to send track event: ${response.status} ${await response.text()}`);\n }\n\n const data = (await response.json()) as TrackEventResponse;\n\n let index = 0;\n while (events.length > 0) {\n const { options, name, properties } = events.shift()!;\n const eventId = data[index].id;\n options.onSucceed?.({ id: eventId });\n index++;\n if (!options.enableThirdPartyTracking || !config.thirdPartyTrackers) continue;\n config.thirdPartyTrackers.forEach((tracker) => tracker(name, properties, eventId));\n }\n } catch (e: unknown) {\n if (e instanceof Error) console.log(e.message);\n events.forEach((event) => event.options.onError?.(e));\n }\n}\n\nconst batch = 10;\nconst delay = 2000;\nconst list: Item[] = [];\nlet timer: ReturnType<typeof setTimeout> | null = null;\n\nexport function track<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n list.push({ name, properties, options, timestamp: new Date().toISOString() });\n if (list.length >= batch) {\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n const copy = [...list];\n list.length = 0;\n sendEvents(copy);\n }, delay);\n}\n\nexport async function trackAsync<T extends EventName = EventName>(\n name: TrackName<T>,\n properties?: TrackProperties<T>,\n options: TrackOptions = defaultOptions\n) {\n await sendEvents([{ name, properties, options, timestamp: new Date().toISOString() }]);\n}\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAe3B,IAAM,iBAA+B,EAAE,0BAA0B,KAAK;AACtE,IAAM,cAAc,IAAI,YAAY,EAAE,MAAM,GAAG,UAAU,IAAI,WAAW,EAAE,CAAC;AAW3E,eAAe,WAAW,QAAgB;AA9B1C;AA+BE,MAAI;AACF,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,YAAY,aAAa;AAE/B,UAAM,OAAO,MAAM,OAAO,QAAQ;AAClC,UAAM,cAAc,MAAM,WAAW,GAAG;AACxC,UAAM,MAA2B,OAAO,IAAI,CAAC,WAAW;AAAA,MACtD,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AAAA,IACnB,EAAE;AAEF,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,QAAQ,WAAW;AAAA,MACxD,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS,MAAM,OAAO,WAAW;AAAA,MACjC,MAAM,KAAK,UAAU,GAAG;AAAA,IAC1B,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,+BAA+B,SAAS,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC,EAAE;AAAA,IAC3F;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,QAAI,QAAQ;AACZ,WAAO,OAAO,SAAS,GAAG;AACxB,YAAM,EAAE,SAAS,MAAM,WAAW,IAAI,OAAO,MAAM;AACnD,YAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,oBAAQ,cAAR,iCAAoB,EAAE,IAAI,QAAQ;AAClC;AACA,UAAI,CAAC,QAAQ,4BAA4B,CAAC,OAAO,mBAAoB;AACrE,aAAO,mBAAmB,QAAQ,CAAC,YAAY,QAAQ,MAAM,YAAY,OAAO,CAAC;AAAA,IACnF;AAAA,EACF,SAAS,GAAY;AACnB,QAAI,aAAa,MAAO,SAAQ,IAAI,EAAE,OAAO;AAC7C,WAAO,QAAQ,CAAC,UAAO;AArE3B,UAAAA,KAAA;AAqE8B,oBAAAA,MAAA,MAAM,SAAQ,YAAd,wBAAAA,KAAwB;AAAA,KAAE;AAAA,EACtD;AACF;AAEA,IAAM,QAAQ;AACd,IAAM,QAAQ;AACd,IAAM,OAAe,CAAC;AACtB,IAAI,QAA8C;AAE3C,SAAS,MACd,MACA,YACA,UAAwB,gBACxB;AACA,OAAK,KAAK,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAC5E,MAAI,KAAK,UAAU,OAAO;AACxB,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AACf;AAAA,EACF;AACA,MAAI,MAAO,cAAa,KAAK;AAC7B,UAAQ,WAAW,MAAM;AACvB,YAAQ;AACR,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,SAAS;AACd,eAAW,IAAI;AAAA,EACjB,GAAG,KAAK;AACV;AAEA,eAAsB,WACpB,MACA,YACA,UAAwB,gBACxB;AACA,QAAM,WAAW,CAAC,EAAE,MAAM,YAAY,SAAS,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC,CAAC;AACvF;","names":["_a"]}
@@ -25,32 +25,35 @@ __export(visitor_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(visitor_exports);
27
27
  var import_setup = require("../setup/index.cjs");
28
+ var import_fetch = require("../utils/fetch.cjs");
28
29
  var key = "visitor_id";
29
30
  async function createVisitor() {
30
31
  const dto = {
31
32
  device_id: await import_setup.config.getDeviceId(),
32
33
  properties: await import_setup.config.getTags()
33
34
  };
34
- const headers = await import_setup.config.getHeaders();
35
- const response = await import_setup.config.http.post(`/visitors`, dto, { headers });
36
- return response.data;
35
+ const response = await (0, import_fetch.fetch)(`${import_setup.config.endpoint}/visitors`, {
36
+ method: "POST",
37
+ credentials: "include",
38
+ headers: await import_setup.config.getHeaders(),
39
+ body: JSON.stringify(dto)
40
+ });
41
+ const data = await response.json();
42
+ await import_setup.config.storage.setItem(key, data.id);
43
+ return data;
37
44
  }
38
45
  async function getOrCreateVisitor() {
39
46
  const visitorId = await import_setup.config.storage.getItem(key);
40
47
  if (visitorId) {
41
- try {
42
- const headers = await import_setup.config.getHeaders();
43
- const response = await import_setup.config.http.get(`/visitors/${visitorId}`, { headers });
44
- return response.data;
45
- } catch {
46
- const visitor2 = await createVisitor();
47
- await import_setup.config.storage.setItem(key, visitor2.id);
48
- return visitor2;
49
- }
48
+ const response = await (0, import_fetch.fetch)(`${import_setup.config.endpoint}/visitors/${visitorId}`, {
49
+ method: "GET",
50
+ credentials: "include",
51
+ headers: await import_setup.config.getHeaders()
52
+ });
53
+ if (!response.ok) return createVisitor();
54
+ return response.json();
50
55
  } else {
51
- const visitor2 = await createVisitor();
52
- await import_setup.config.storage.setItem(key, visitor2.id);
53
- return visitor2;
56
+ return createVisitor();
54
57
  }
55
58
  }
56
59
  var visitor = null;
@@ -65,11 +68,17 @@ async function getVisitor() {
65
68
  }
66
69
  async function setVisitor(dto) {
67
70
  const { id } = await getVisitor();
68
- const headers = await import_setup.config.getHeaders();
69
- const response = await import_setup.config.http.patch(`/visitors/${id}`, dto, { headers });
71
+ const response = await (0, import_fetch.fetch)(`${import_setup.config.endpoint}/visitors/${id}`, {
72
+ method: "PATCH",
73
+ credentials: "include",
74
+ headers: await import_setup.config.getHeaders(),
75
+ body: JSON.stringify(dto)
76
+ });
77
+ if (!response.ok) throw new Error("Failed to set visitor");
78
+ const data = await response.json();
70
79
  import_setup.config.thirdPartyUserSetters.forEach((setter) => setter(dto));
71
- visitor = response.data;
72
- return response.data;
80
+ visitor = data;
81
+ return data;
73
82
  }
74
83
  // Annotate the CommonJS export names for ESM import in node:
75
84
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/visitor/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport type { CreateVisitorDTO, UpdateVisitorDTO, Visitor, VisitorProperties } from './types';\n\nconst key = 'visitor_id';\n\nasync function createVisitor(): Promise<Visitor> {\n const dto: CreateVisitorDTO = {\n device_id: await config.getDeviceId(),\n properties: (await config.getTags()) as VisitorProperties,\n };\n const headers = await config.getHeaders();\n const response = await config.http.post<Visitor>(`/visitors`, dto, { headers });\n return response.data;\n}\n\nasync function getOrCreateVisitor(): Promise<Visitor> {\n const visitorId = await config.storage.getItem(key);\n if (visitorId) {\n try {\n const headers = await config.getHeaders();\n const response = await config.http.get<Visitor>(`/visitors/${visitorId}`, { headers });\n return response.data;\n } catch {\n const visitor = await createVisitor();\n await config.storage.setItem(key, visitor.id);\n return visitor;\n }\n } else {\n const visitor = await createVisitor();\n await config.storage.setItem(key, visitor.id);\n return visitor;\n }\n}\n\nlet visitor: Visitor | null = null;\nlet visitorFetcher: Promise<Visitor> | null = null;\n\nexport async function getVisitor(): Promise<Visitor> {\n if (visitor) return visitor;\n if (visitorFetcher) return visitorFetcher;\n visitorFetcher = getOrCreateVisitor();\n visitor = await visitorFetcher;\n visitorFetcher = null;\n return visitor;\n}\n\nexport async function setVisitor(dto: UpdateVisitorDTO) {\n const { id } = await getVisitor();\n const headers = await config.getHeaders();\n const response = await config.http.patch<Visitor>(`/visitors/${id}`, dto, { headers });\n config.thirdPartyUserSetters.forEach((setter) => setter(dto));\n visitor = response.data;\n return response.data;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AAGvB,IAAM,MAAM;AAEZ,eAAe,gBAAkC;AAC/C,QAAM,MAAwB;AAAA,IAC5B,WAAW,MAAM,oBAAO,YAAY;AAAA,IACpC,YAAa,MAAM,oBAAO,QAAQ;AAAA,EACpC;AACA,QAAM,UAAU,MAAM,oBAAO,WAAW;AACxC,QAAM,WAAW,MAAM,oBAAO,KAAK,KAAc,aAAa,KAAK,EAAE,QAAQ,CAAC;AAC9E,SAAO,SAAS;AAClB;AAEA,eAAe,qBAAuC;AACpD,QAAM,YAAY,MAAM,oBAAO,QAAQ,QAAQ,GAAG;AAClD,MAAI,WAAW;AACb,QAAI;AACF,YAAM,UAAU,MAAM,oBAAO,WAAW;AACxC,YAAM,WAAW,MAAM,oBAAO,KAAK,IAAa,aAAa,SAAS,IAAI,EAAE,QAAQ,CAAC;AACrF,aAAO,SAAS;AAAA,IAClB,QAAQ;AACN,YAAMA,WAAU,MAAM,cAAc;AACpC,YAAM,oBAAO,QAAQ,QAAQ,KAAKA,SAAQ,EAAE;AAC5C,aAAOA;AAAA,IACT;AAAA,EACF,OAAO;AACL,UAAMA,WAAU,MAAM,cAAc;AACpC,UAAM,oBAAO,QAAQ,QAAQ,KAAKA,SAAQ,EAAE;AAC5C,WAAOA;AAAA,EACT;AACF;AAEA,IAAI,UAA0B;AAC9B,IAAI,iBAA0C;AAE9C,eAAsB,aAA+B;AACnD,MAAI,QAAS,QAAO;AACpB,MAAI,eAAgB,QAAO;AAC3B,mBAAiB,mBAAmB;AACpC,YAAU,MAAM;AAChB,mBAAiB;AACjB,SAAO;AACT;AAEA,eAAsB,WAAW,KAAuB;AACtD,QAAM,EAAE,GAAG,IAAI,MAAM,WAAW;AAChC,QAAM,UAAU,MAAM,oBAAO,WAAW;AACxC,QAAM,WAAW,MAAM,oBAAO,KAAK,MAAe,aAAa,EAAE,IAAI,KAAK,EAAE,QAAQ,CAAC;AACrF,sBAAO,sBAAsB,QAAQ,CAAC,WAAW,OAAO,GAAG,CAAC;AAC5D,YAAU,SAAS;AACnB,SAAO,SAAS;AAClB;","names":["visitor"]}
1
+ {"version":3,"sources":["../../src/visitor/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { fetch } from '../utils/fetch';\nimport type { CreateVisitorDTO, UpdateVisitorDTO, Visitor, VisitorProperties } from './types';\n\nconst key = 'visitor_id';\n\nasync function createVisitor(): Promise<Visitor> {\n const dto: CreateVisitorDTO = {\n device_id: await config.getDeviceId(),\n properties: (await config.getTags()) as VisitorProperties,\n };\n\n const response = await fetch(`${config.endpoint}/visitors`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n const data = (await response.json()) as Visitor;\n await config.storage.setItem(key, data.id);\n return data;\n}\n\nasync function getOrCreateVisitor(): Promise<Visitor> {\n const visitorId = await config.storage.getItem(key);\n if (visitorId) {\n const response = await fetch(`${config.endpoint}/visitors/${visitorId}`, {\n method: 'GET',\n credentials: 'include',\n headers: await config.getHeaders(),\n });\n\n if (!response.ok) return createVisitor();\n return response.json() as Promise<Visitor>;\n } else {\n return createVisitor();\n }\n}\n\nlet visitor: Visitor | null = null;\nlet visitorFetcher: Promise<Visitor> | null = null;\n\nexport async function getVisitor(): Promise<Visitor> {\n if (visitor) return visitor;\n if (visitorFetcher) return visitorFetcher;\n visitorFetcher = getOrCreateVisitor();\n visitor = await visitorFetcher;\n visitorFetcher = null;\n return visitor;\n}\n\nexport async function setVisitor(dto: UpdateVisitorDTO) {\n const { id } = await getVisitor();\n const response = await fetch(`${config.endpoint}/visitors/${id}`, {\n method: 'PATCH',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) throw new Error('Failed to set visitor');\n const data = (await response.json()) as Visitor;\n\n config.thirdPartyUserSetters.forEach((setter) => setter(dto));\n visitor = data;\n return data;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AACvB,mBAAsB;AAGtB,IAAM,MAAM;AAEZ,eAAe,gBAAkC;AAC/C,QAAM,MAAwB;AAAA,IAC5B,WAAW,MAAM,oBAAO,YAAY;AAAA,IACpC,YAAa,MAAM,oBAAO,QAAQ;AAAA,EACpC;AAEA,QAAM,WAAW,UAAM,oBAAM,GAAG,oBAAO,QAAQ,aAAa;AAAA,IAC1D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS,MAAM,oBAAO,WAAW;AAAA,IACjC,MAAM,KAAK,UAAU,GAAG;AAAA,EAC1B,CAAC;AAED,QAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,QAAM,oBAAO,QAAQ,QAAQ,KAAK,KAAK,EAAE;AACzC,SAAO;AACT;AAEA,eAAe,qBAAuC;AACpD,QAAM,YAAY,MAAM,oBAAO,QAAQ,QAAQ,GAAG;AAClD,MAAI,WAAW;AACb,UAAM,WAAW,UAAM,oBAAM,GAAG,oBAAO,QAAQ,aAAa,SAAS,IAAI;AAAA,MACvE,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS,MAAM,oBAAO,WAAW;AAAA,IACnC,CAAC;AAED,QAAI,CAAC,SAAS,GAAI,QAAO,cAAc;AACvC,WAAO,SAAS,KAAK;AAAA,EACvB,OAAO;AACL,WAAO,cAAc;AAAA,EACvB;AACF;AAEA,IAAI,UAA0B;AAC9B,IAAI,iBAA0C;AAE9C,eAAsB,aAA+B;AACnD,MAAI,QAAS,QAAO;AACpB,MAAI,eAAgB,QAAO;AAC3B,mBAAiB,mBAAmB;AACpC,YAAU,MAAM;AAChB,mBAAiB;AACjB,SAAO;AACT;AAEA,eAAsB,WAAW,KAAuB;AACtD,QAAM,EAAE,GAAG,IAAI,MAAM,WAAW;AAChC,QAAM,WAAW,UAAM,oBAAM,GAAG,oBAAO,QAAQ,aAAa,EAAE,IAAI;AAAA,IAChE,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS,MAAM,oBAAO,WAAW;AAAA,IACjC,MAAM,KAAK,UAAU,GAAG;AAAA,EAC1B,CAAC;AAED,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB;AACzD,QAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,sBAAO,sBAAsB,QAAQ,CAAC,WAAW,OAAO,GAAG,CAAC;AAC5D,YAAU;AACV,SAAO;AACT;","names":[]}
@@ -1,31 +1,34 @@
1
1
  // src/visitor/index.ts
2
2
  import { config } from "../setup/index.mjs";
3
+ import { fetch } from "../utils/fetch.mjs";
3
4
  var key = "visitor_id";
4
5
  async function createVisitor() {
5
6
  const dto = {
6
7
  device_id: await config.getDeviceId(),
7
8
  properties: await config.getTags()
8
9
  };
9
- const headers = await config.getHeaders();
10
- const response = await config.http.post(`/visitors`, dto, { headers });
11
- return response.data;
10
+ const response = await fetch(`${config.endpoint}/visitors`, {
11
+ method: "POST",
12
+ credentials: "include",
13
+ headers: await config.getHeaders(),
14
+ body: JSON.stringify(dto)
15
+ });
16
+ const data = await response.json();
17
+ await config.storage.setItem(key, data.id);
18
+ return data;
12
19
  }
13
20
  async function getOrCreateVisitor() {
14
21
  const visitorId = await config.storage.getItem(key);
15
22
  if (visitorId) {
16
- try {
17
- const headers = await config.getHeaders();
18
- const response = await config.http.get(`/visitors/${visitorId}`, { headers });
19
- return response.data;
20
- } catch {
21
- const visitor2 = await createVisitor();
22
- await config.storage.setItem(key, visitor2.id);
23
- return visitor2;
24
- }
23
+ const response = await fetch(`${config.endpoint}/visitors/${visitorId}`, {
24
+ method: "GET",
25
+ credentials: "include",
26
+ headers: await config.getHeaders()
27
+ });
28
+ if (!response.ok) return createVisitor();
29
+ return response.json();
25
30
  } else {
26
- const visitor2 = await createVisitor();
27
- await config.storage.setItem(key, visitor2.id);
28
- return visitor2;
31
+ return createVisitor();
29
32
  }
30
33
  }
31
34
  var visitor = null;
@@ -40,11 +43,17 @@ async function getVisitor() {
40
43
  }
41
44
  async function setVisitor(dto) {
42
45
  const { id } = await getVisitor();
43
- const headers = await config.getHeaders();
44
- const response = await config.http.patch(`/visitors/${id}`, dto, { headers });
46
+ const response = await fetch(`${config.endpoint}/visitors/${id}`, {
47
+ method: "PATCH",
48
+ credentials: "include",
49
+ headers: await config.getHeaders(),
50
+ body: JSON.stringify(dto)
51
+ });
52
+ if (!response.ok) throw new Error("Failed to set visitor");
53
+ const data = await response.json();
45
54
  config.thirdPartyUserSetters.forEach((setter) => setter(dto));
46
- visitor = response.data;
47
- return response.data;
55
+ visitor = data;
56
+ return data;
48
57
  }
49
58
  export {
50
59
  getVisitor,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/visitor/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport type { CreateVisitorDTO, UpdateVisitorDTO, Visitor, VisitorProperties } from './types';\n\nconst key = 'visitor_id';\n\nasync function createVisitor(): Promise<Visitor> {\n const dto: CreateVisitorDTO = {\n device_id: await config.getDeviceId(),\n properties: (await config.getTags()) as VisitorProperties,\n };\n const headers = await config.getHeaders();\n const response = await config.http.post<Visitor>(`/visitors`, dto, { headers });\n return response.data;\n}\n\nasync function getOrCreateVisitor(): Promise<Visitor> {\n const visitorId = await config.storage.getItem(key);\n if (visitorId) {\n try {\n const headers = await config.getHeaders();\n const response = await config.http.get<Visitor>(`/visitors/${visitorId}`, { headers });\n return response.data;\n } catch {\n const visitor = await createVisitor();\n await config.storage.setItem(key, visitor.id);\n return visitor;\n }\n } else {\n const visitor = await createVisitor();\n await config.storage.setItem(key, visitor.id);\n return visitor;\n }\n}\n\nlet visitor: Visitor | null = null;\nlet visitorFetcher: Promise<Visitor> | null = null;\n\nexport async function getVisitor(): Promise<Visitor> {\n if (visitor) return visitor;\n if (visitorFetcher) return visitorFetcher;\n visitorFetcher = getOrCreateVisitor();\n visitor = await visitorFetcher;\n visitorFetcher = null;\n return visitor;\n}\n\nexport async function setVisitor(dto: UpdateVisitorDTO) {\n const { id } = await getVisitor();\n const headers = await config.getHeaders();\n const response = await config.http.patch<Visitor>(`/visitors/${id}`, dto, { headers });\n config.thirdPartyUserSetters.forEach((setter) => setter(dto));\n visitor = response.data;\n return response.data;\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAGvB,IAAM,MAAM;AAEZ,eAAe,gBAAkC;AAC/C,QAAM,MAAwB;AAAA,IAC5B,WAAW,MAAM,OAAO,YAAY;AAAA,IACpC,YAAa,MAAM,OAAO,QAAQ;AAAA,EACpC;AACA,QAAM,UAAU,MAAM,OAAO,WAAW;AACxC,QAAM,WAAW,MAAM,OAAO,KAAK,KAAc,aAAa,KAAK,EAAE,QAAQ,CAAC;AAC9E,SAAO,SAAS;AAClB;AAEA,eAAe,qBAAuC;AACpD,QAAM,YAAY,MAAM,OAAO,QAAQ,QAAQ,GAAG;AAClD,MAAI,WAAW;AACb,QAAI;AACF,YAAM,UAAU,MAAM,OAAO,WAAW;AACxC,YAAM,WAAW,MAAM,OAAO,KAAK,IAAa,aAAa,SAAS,IAAI,EAAE,QAAQ,CAAC;AACrF,aAAO,SAAS;AAAA,IAClB,QAAQ;AACN,YAAMA,WAAU,MAAM,cAAc;AACpC,YAAM,OAAO,QAAQ,QAAQ,KAAKA,SAAQ,EAAE;AAC5C,aAAOA;AAAA,IACT;AAAA,EACF,OAAO;AACL,UAAMA,WAAU,MAAM,cAAc;AACpC,UAAM,OAAO,QAAQ,QAAQ,KAAKA,SAAQ,EAAE;AAC5C,WAAOA;AAAA,EACT;AACF;AAEA,IAAI,UAA0B;AAC9B,IAAI,iBAA0C;AAE9C,eAAsB,aAA+B;AACnD,MAAI,QAAS,QAAO;AACpB,MAAI,eAAgB,QAAO;AAC3B,mBAAiB,mBAAmB;AACpC,YAAU,MAAM;AAChB,mBAAiB;AACjB,SAAO;AACT;AAEA,eAAsB,WAAW,KAAuB;AACtD,QAAM,EAAE,GAAG,IAAI,MAAM,WAAW;AAChC,QAAM,UAAU,MAAM,OAAO,WAAW;AACxC,QAAM,WAAW,MAAM,OAAO,KAAK,MAAe,aAAa,EAAE,IAAI,KAAK,EAAE,QAAQ,CAAC;AACrF,SAAO,sBAAsB,QAAQ,CAAC,WAAW,OAAO,GAAG,CAAC;AAC5D,YAAU,SAAS;AACnB,SAAO,SAAS;AAClB;","names":["visitor"]}
1
+ {"version":3,"sources":["../../src/visitor/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport { fetch } from '../utils/fetch';\nimport type { CreateVisitorDTO, UpdateVisitorDTO, Visitor, VisitorProperties } from './types';\n\nconst key = 'visitor_id';\n\nasync function createVisitor(): Promise<Visitor> {\n const dto: CreateVisitorDTO = {\n device_id: await config.getDeviceId(),\n properties: (await config.getTags()) as VisitorProperties,\n };\n\n const response = await fetch(`${config.endpoint}/visitors`, {\n method: 'POST',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n const data = (await response.json()) as Visitor;\n await config.storage.setItem(key, data.id);\n return data;\n}\n\nasync function getOrCreateVisitor(): Promise<Visitor> {\n const visitorId = await config.storage.getItem(key);\n if (visitorId) {\n const response = await fetch(`${config.endpoint}/visitors/${visitorId}`, {\n method: 'GET',\n credentials: 'include',\n headers: await config.getHeaders(),\n });\n\n if (!response.ok) return createVisitor();\n return response.json() as Promise<Visitor>;\n } else {\n return createVisitor();\n }\n}\n\nlet visitor: Visitor | null = null;\nlet visitorFetcher: Promise<Visitor> | null = null;\n\nexport async function getVisitor(): Promise<Visitor> {\n if (visitor) return visitor;\n if (visitorFetcher) return visitorFetcher;\n visitorFetcher = getOrCreateVisitor();\n visitor = await visitorFetcher;\n visitorFetcher = null;\n return visitor;\n}\n\nexport async function setVisitor(dto: UpdateVisitorDTO) {\n const { id } = await getVisitor();\n const response = await fetch(`${config.endpoint}/visitors/${id}`, {\n method: 'PATCH',\n credentials: 'include',\n headers: await config.getHeaders(),\n body: JSON.stringify(dto),\n });\n\n if (!response.ok) throw new Error('Failed to set visitor');\n const data = (await response.json()) as Visitor;\n\n config.thirdPartyUserSetters.forEach((setter) => setter(dto));\n visitor = data;\n return data;\n}\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,aAAa;AAGtB,IAAM,MAAM;AAEZ,eAAe,gBAAkC;AAC/C,QAAM,MAAwB;AAAA,IAC5B,WAAW,MAAM,OAAO,YAAY;AAAA,IACpC,YAAa,MAAM,OAAO,QAAQ;AAAA,EACpC;AAEA,QAAM,WAAW,MAAM,MAAM,GAAG,OAAO,QAAQ,aAAa;AAAA,IAC1D,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS,MAAM,OAAO,WAAW;AAAA,IACjC,MAAM,KAAK,UAAU,GAAG;AAAA,EAC1B,CAAC;AAED,QAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,QAAM,OAAO,QAAQ,QAAQ,KAAK,KAAK,EAAE;AACzC,SAAO;AACT;AAEA,eAAe,qBAAuC;AACpD,QAAM,YAAY,MAAM,OAAO,QAAQ,QAAQ,GAAG;AAClD,MAAI,WAAW;AACb,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,QAAQ,aAAa,SAAS,IAAI;AAAA,MACvE,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS,MAAM,OAAO,WAAW;AAAA,IACnC,CAAC;AAED,QAAI,CAAC,SAAS,GAAI,QAAO,cAAc;AACvC,WAAO,SAAS,KAAK;AAAA,EACvB,OAAO;AACL,WAAO,cAAc;AAAA,EACvB;AACF;AAEA,IAAI,UAA0B;AAC9B,IAAI,iBAA0C;AAE9C,eAAsB,aAA+B;AACnD,MAAI,QAAS,QAAO;AACpB,MAAI,eAAgB,QAAO;AAC3B,mBAAiB,mBAAmB;AACpC,YAAU,MAAM;AAChB,mBAAiB;AACjB,SAAO;AACT;AAEA,eAAsB,WAAW,KAAuB;AACtD,QAAM,EAAE,GAAG,IAAI,MAAM,WAAW;AAChC,QAAM,WAAW,MAAM,MAAM,GAAG,OAAO,QAAQ,aAAa,EAAE,IAAI;AAAA,IAChE,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS,MAAM,OAAO,WAAW;AAAA,IACjC,MAAM,KAAK,UAAU,GAAG;AAAA,EAC1B,CAAC;AAED,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,uBAAuB;AACzD,QAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,SAAO,sBAAsB,QAAQ,CAAC,WAAW,OAAO,GAAG,CAAC;AAC5D,YAAU;AACV,SAAO;AACT;","names":[]}
@@ -1,6 +1,5 @@
1
1
  import { Storage } from '../setup/index.cjs';
2
2
  import { TrackTags } from '../track/types.cjs';
3
- import 'axios';
4
3
  import '../visitor/types.cjs';
5
4
  import '../track/gtag.cjs';
6
5
 
@@ -1,6 +1,5 @@
1
1
  import { Storage } from '../setup/index.js';
2
2
  import { TrackTags } from '../track/types.js';
3
- import 'axios';
4
3
  import '../visitor/types.js';
5
4
  import '../track/gtag.js';
6
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shware/analytics",
3
- "version": "2.12.4",
3
+ "version": "2.13.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "repository": {
@@ -58,8 +58,6 @@
58
58
  "dist"
59
59
  ],
60
60
  "dependencies": {
61
- "axios": "^1.13.1",
62
- "axios-retry": "^4.5.0",
63
61
  "bowser": "^2.12.1",
64
62
  "cookie": "^1.0.2",
65
63
  "uuid": "^13.0.0",
@@ -68,11 +66,11 @@
68
66
  },
69
67
  "devDependencies": {
70
68
  "@types/facebook-nodejs-business-sdk": "^23.0.0",
71
- "@types/node": "^24.9.2",
69
+ "@types/node": "^24.10.0",
72
70
  "@types/react": "^19.2.2",
73
71
  "typescript": "^5.9.3",
74
- "@repo/eslint-config": "0.0.7",
75
- "@repo/typescript-config": "0.0.0"
72
+ "@repo/typescript-config": "0.0.0",
73
+ "@repo/eslint-config": "0.0.7"
76
74
  },
77
75
  "peerDependencies": {
78
76
  "@react-native-firebase/analytics": "^23.3.1",