@shware/analytics 0.1.16 → 0.1.18

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 (67) hide show
  1. package/dist/index.cjs.map +1 -1
  2. package/dist/index.d.cts +3 -1
  3. package/dist/index.d.ts +3 -1
  4. package/dist/index.mjs.map +1 -1
  5. package/dist/next/index.cjs +102 -5
  6. package/dist/next/index.cjs.map +1 -1
  7. package/dist/next/index.d.cts +21 -2
  8. package/dist/next/index.d.ts +21 -2
  9. package/dist/next/index.mjs +89 -4
  10. package/dist/next/index.mjs.map +1 -1
  11. package/dist/react-router/index.cjs +91 -4
  12. package/dist/react-router/index.cjs.map +1 -1
  13. package/dist/react-router/index.d.cts +21 -2
  14. package/dist/react-router/index.d.ts +21 -2
  15. package/dist/react-router/index.mjs +88 -3
  16. package/dist/react-router/index.mjs.map +1 -1
  17. package/dist/schema/index.d.cts +8 -8
  18. package/dist/schema/index.d.ts +8 -8
  19. package/dist/setup/index.cjs.map +1 -1
  20. package/dist/setup/index.d.cts +3 -1
  21. package/dist/setup/index.d.ts +3 -1
  22. package/dist/setup/index.mjs.map +1 -1
  23. package/dist/track/fbq.cjs +143 -0
  24. package/dist/track/fbq.cjs.map +1 -0
  25. package/dist/track/fbq.d.cts +278 -0
  26. package/dist/track/fbq.d.ts +278 -0
  27. package/dist/track/fbq.mjs +117 -0
  28. package/dist/track/fbq.mjs.map +1 -0
  29. package/dist/track/{ga.cjs → gtag.cjs} +5 -5
  30. package/dist/track/gtag.cjs.map +1 -0
  31. package/dist/track/gtag.d.cts +463 -0
  32. package/dist/track/gtag.d.ts +463 -0
  33. package/dist/track/{ga.mjs → gtag.mjs} +2 -2
  34. package/dist/track/gtag.mjs.map +1 -0
  35. package/dist/track/index.cjs.map +1 -1
  36. package/dist/track/index.d.cts +3 -2
  37. package/dist/track/index.d.ts +3 -2
  38. package/dist/track/index.mjs.map +1 -1
  39. package/dist/{types/index.cjs → track/types.cjs} +2 -2
  40. package/dist/track/types.cjs.map +1 -0
  41. package/dist/track/types.d.cts +87 -0
  42. package/dist/track/types.d.ts +87 -0
  43. package/dist/track/types.mjs +1 -0
  44. package/dist/visitor/index.cjs.map +1 -1
  45. package/dist/visitor/index.d.cts +1 -1
  46. package/dist/visitor/index.d.ts +1 -1
  47. package/dist/visitor/index.mjs.map +1 -1
  48. package/dist/visitor/types.cjs +19 -0
  49. package/dist/visitor/types.cjs.map +1 -0
  50. package/dist/visitor/types.d.cts +16 -0
  51. package/dist/visitor/types.d.ts +16 -0
  52. package/dist/visitor/types.mjs +1 -0
  53. package/dist/visitor/types.mjs.map +1 -0
  54. package/dist/web/index.cjs.map +1 -1
  55. package/dist/web/index.d.cts +2 -1
  56. package/dist/web/index.d.ts +2 -1
  57. package/dist/web/index.mjs.map +1 -1
  58. package/package.json +1 -1
  59. package/dist/track/ga.cjs.map +0 -1
  60. package/dist/track/ga.d.cts +0 -4
  61. package/dist/track/ga.d.ts +0 -4
  62. package/dist/track/ga.mjs.map +0 -1
  63. package/dist/types/index.cjs.map +0 -1
  64. package/dist/types/index.d.cts +0 -327
  65. package/dist/types/index.d.ts +0 -327
  66. package/dist/types/index.mjs +0 -1
  67. /package/dist/{types/index.mjs.map → track/types.mjs.map} +0 -0
@@ -0,0 +1,87 @@
1
+ import { StandardEvents } from './gtag.cjs';
2
+ export { Item } from './gtag.cjs';
3
+
4
+ type AllowedPropertyValues = string | number | boolean | null;
5
+ type EventName = Lowercase<string> | 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';
6
+ type TrackName<T extends EventName> = T extends keyof StandardEvents ? T : EventName;
7
+ type TrackProperties<T extends EventName> = T extends keyof StandardEvents ? StandardEvents[T] : Record<Lowercase<string>, AllowedPropertyValues>;
8
+ interface UserData {
9
+ userId: string;
10
+ email?: string;
11
+ firstName?: string;
12
+ lastName?: string;
13
+ phone?: string;
14
+ dateOfBirth?: string;
15
+ gender?: string;
16
+ city?: string;
17
+ state?: string;
18
+ postal?: string;
19
+ country?: string;
20
+ }
21
+ type ThirdPartyTracker = <T extends EventName>(name: TrackName<T>, properties?: TrackProperties<T>, event_id?: string) => void;
22
+ interface PlatformInfo {
23
+ os?: string;
24
+ os_name?: string;
25
+ os_version?: string;
26
+ browser?: string;
27
+ browser_name?: string;
28
+ browser_version?: string;
29
+ platform?: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';
30
+ }
31
+ interface DeviceInfo {
32
+ device?: string;
33
+ device_id?: string;
34
+ device_type?: string;
35
+ device_vendor?: string;
36
+ device_pixel_ratio?: string;
37
+ screen_resolution?: `${number}x${number}`;
38
+ }
39
+ interface EnvironmentInfo {
40
+ release?: string;
41
+ language?: string;
42
+ timezone?: string;
43
+ environment?: 'development' | 'production';
44
+ }
45
+ interface SourceInfo {
46
+ source_url?: string;
47
+ source?: 'app' | 'web' | 'offline';
48
+ }
49
+ interface ThirdPartyFields {
50
+ /**
51
+ * Meta pixel fields
52
+ * ref: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters#fbc
53
+ * Stored in the _fbc/_fbp browser cookie under your domain
54
+ */
55
+ fbc?: string;
56
+ fbp?: string;
57
+ /**
58
+ * Google Analytics fields
59
+ */
60
+ gclid?: string;
61
+ }
62
+ interface UTMParams {
63
+ utm_source?: string;
64
+ utm_medium?: string;
65
+ utm_campaign?: string;
66
+ utm_term?: string;
67
+ utm_content?: string;
68
+ }
69
+ interface TrackTags extends PlatformInfo, DeviceInfo, EnvironmentInfo, SourceInfo, ThirdPartyFields, UTMParams {
70
+ [key: string]: string | undefined;
71
+ }
72
+ interface CreateTrackEventDTO<T extends EventName = EventName> {
73
+ name: string;
74
+ tags: TrackTags;
75
+ visitor_id: string;
76
+ properties?: TrackProperties<T>;
77
+ timestamp: string;
78
+ }
79
+ interface TrackEventResponse {
80
+ /**
81
+ * track event id
82
+ * some tracking system will use event_id and event_name for deduplication
83
+ * */
84
+ id: string;
85
+ }
86
+
87
+ export type { AllowedPropertyValues, CreateTrackEventDTO, DeviceInfo, EnvironmentInfo, EventName, PlatformInfo, SourceInfo, ThirdPartyFields, ThirdPartyTracker, TrackEventResponse, TrackName, TrackProperties, TrackTags, UTMParams, UserData };
@@ -0,0 +1,87 @@
1
+ import { StandardEvents } from './gtag.js';
2
+ export { Item } from './gtag.js';
3
+
4
+ type AllowedPropertyValues = string | number | boolean | null;
5
+ type EventName = Lowercase<string> | 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';
6
+ type TrackName<T extends EventName> = T extends keyof StandardEvents ? T : EventName;
7
+ type TrackProperties<T extends EventName> = T extends keyof StandardEvents ? StandardEvents[T] : Record<Lowercase<string>, AllowedPropertyValues>;
8
+ interface UserData {
9
+ userId: string;
10
+ email?: string;
11
+ firstName?: string;
12
+ lastName?: string;
13
+ phone?: string;
14
+ dateOfBirth?: string;
15
+ gender?: string;
16
+ city?: string;
17
+ state?: string;
18
+ postal?: string;
19
+ country?: string;
20
+ }
21
+ type ThirdPartyTracker = <T extends EventName>(name: TrackName<T>, properties?: TrackProperties<T>, event_id?: string) => void;
22
+ interface PlatformInfo {
23
+ os?: string;
24
+ os_name?: string;
25
+ os_version?: string;
26
+ browser?: string;
27
+ browser_name?: string;
28
+ browser_version?: string;
29
+ platform?: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';
30
+ }
31
+ interface DeviceInfo {
32
+ device?: string;
33
+ device_id?: string;
34
+ device_type?: string;
35
+ device_vendor?: string;
36
+ device_pixel_ratio?: string;
37
+ screen_resolution?: `${number}x${number}`;
38
+ }
39
+ interface EnvironmentInfo {
40
+ release?: string;
41
+ language?: string;
42
+ timezone?: string;
43
+ environment?: 'development' | 'production';
44
+ }
45
+ interface SourceInfo {
46
+ source_url?: string;
47
+ source?: 'app' | 'web' | 'offline';
48
+ }
49
+ interface ThirdPartyFields {
50
+ /**
51
+ * Meta pixel fields
52
+ * ref: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters#fbc
53
+ * Stored in the _fbc/_fbp browser cookie under your domain
54
+ */
55
+ fbc?: string;
56
+ fbp?: string;
57
+ /**
58
+ * Google Analytics fields
59
+ */
60
+ gclid?: string;
61
+ }
62
+ interface UTMParams {
63
+ utm_source?: string;
64
+ utm_medium?: string;
65
+ utm_campaign?: string;
66
+ utm_term?: string;
67
+ utm_content?: string;
68
+ }
69
+ interface TrackTags extends PlatformInfo, DeviceInfo, EnvironmentInfo, SourceInfo, ThirdPartyFields, UTMParams {
70
+ [key: string]: string | undefined;
71
+ }
72
+ interface CreateTrackEventDTO<T extends EventName = EventName> {
73
+ name: string;
74
+ tags: TrackTags;
75
+ visitor_id: string;
76
+ properties?: TrackProperties<T>;
77
+ timestamp: string;
78
+ }
79
+ interface TrackEventResponse {
80
+ /**
81
+ * track event id
82
+ * some tracking system will use event_id and event_name for deduplication
83
+ * */
84
+ id: string;
85
+ }
86
+
87
+ export type { AllowedPropertyValues, CreateTrackEventDTO, DeviceInfo, EnvironmentInfo, EventName, PlatformInfo, SourceInfo, ThirdPartyFields, ThirdPartyTracker, TrackEventResponse, TrackName, TrackProperties, TrackTags, UTMParams, UserData };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/visitor/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport type {\n CreateVisitorDTO,\n UpdateVisitorDTO,\n Visitor,\n VisitorProperties,\n} from '../types/index';\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 response = await config.http.post<Visitor>(`/visitors`, dto);\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 response = await config.http.get<Visitor>(`/visitors/${visitorId}`);\n return response.data;\n } catch (e) {\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(properties: VisitorProperties) {\n const dto: UpdateVisitorDTO = { properties };\n const { id } = await getVisitor();\n const response = await config.http.patch<Visitor>(`/visitors/${id}`, dto);\n config.thirdPartyUserSetters.forEach((setter) => setter(properties));\n visitor = response.data;\n return response.data;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAuB;AAQvB,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,WAAW,MAAM,oBAAO,KAAK,KAAc,aAAa,GAAG;AACjE,SAAO,SAAS;AAClB;AAEA,eAAe,qBAAuC;AACpD,QAAM,YAAY,MAAM,oBAAO,QAAQ,QAAQ,GAAG;AAClD,MAAI,WAAW;AACb,QAAI;AACF,YAAM,WAAW,MAAM,oBAAO,KAAK,IAAa,aAAa,SAAS,EAAE;AACxE,aAAO,SAAS;AAAA,IAClB,SAAS,GAAG;AACV,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,YAA+B;AAC9D,QAAM,MAAwB,EAAE,WAAW;AAC3C,QAAM,EAAE,GAAG,IAAI,MAAM,WAAW;AAChC,QAAM,WAAW,MAAM,oBAAO,KAAK,MAAe,aAAa,EAAE,IAAI,GAAG;AACxE,sBAAO,sBAAsB,QAAQ,CAAC,WAAW,OAAO,UAAU,CAAC;AACnE,YAAU,SAAS;AACnB,SAAO,SAAS;AAClB;","names":["visitor"]}
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 response = await config.http.post<Visitor>(`/visitors`, dto);\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 response = await config.http.get<Visitor>(`/visitors/${visitorId}`);\n return response.data;\n } catch (e) {\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(properties: VisitorProperties) {\n const dto: UpdateVisitorDTO = { properties };\n const { id } = await getVisitor();\n const response = await config.http.patch<Visitor>(`/visitors/${id}`, dto);\n config.thirdPartyUserSetters.forEach((setter) => setter(properties));\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,WAAW,MAAM,oBAAO,KAAK,KAAc,aAAa,GAAG;AACjE,SAAO,SAAS;AAClB;AAEA,eAAe,qBAAuC;AACpD,QAAM,YAAY,MAAM,oBAAO,QAAQ,QAAQ,GAAG;AAClD,MAAI,WAAW;AACb,QAAI;AACF,YAAM,WAAW,MAAM,oBAAO,KAAK,IAAa,aAAa,SAAS,EAAE;AACxE,aAAO,SAAS;AAAA,IAClB,SAAS,GAAG;AACV,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,YAA+B;AAC9D,QAAM,MAAwB,EAAE,WAAW;AAC3C,QAAM,EAAE,GAAG,IAAI,MAAM,WAAW;AAChC,QAAM,WAAW,MAAM,oBAAO,KAAK,MAAe,aAAa,EAAE,IAAI,GAAG;AACxE,sBAAO,sBAAsB,QAAQ,CAAC,WAAW,OAAO,UAAU,CAAC;AACnE,YAAU,SAAS;AACnB,SAAO,SAAS;AAClB;","names":["visitor"]}
@@ -1,4 +1,4 @@
1
- import { Visitor, VisitorProperties } from '../types/index.cjs';
1
+ import { Visitor, VisitorProperties } from './types.cjs';
2
2
 
3
3
  declare function getVisitor(): Promise<Visitor>;
4
4
  declare function setVisitor(properties: VisitorProperties): Promise<Visitor>;
@@ -1,4 +1,4 @@
1
- import { Visitor, VisitorProperties } from '../types/index.js';
1
+ import { Visitor, VisitorProperties } from './types.js';
2
2
 
3
3
  declare function getVisitor(): Promise<Visitor>;
4
4
  declare function setVisitor(properties: VisitorProperties): Promise<Visitor>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/visitor/index.ts"],"sourcesContent":["import { config } from '../setup/index';\nimport type {\n CreateVisitorDTO,\n UpdateVisitorDTO,\n Visitor,\n VisitorProperties,\n} from '../types/index';\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 response = await config.http.post<Visitor>(`/visitors`, dto);\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 response = await config.http.get<Visitor>(`/visitors/${visitorId}`);\n return response.data;\n } catch (e) {\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(properties: VisitorProperties) {\n const dto: UpdateVisitorDTO = { properties };\n const { id } = await getVisitor();\n const response = await config.http.patch<Visitor>(`/visitors/${id}`, dto);\n config.thirdPartyUserSetters.forEach((setter) => setter(properties));\n visitor = response.data;\n return response.data;\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAQvB,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,WAAW,MAAM,OAAO,KAAK,KAAc,aAAa,GAAG;AACjE,SAAO,SAAS;AAClB;AAEA,eAAe,qBAAuC;AACpD,QAAM,YAAY,MAAM,OAAO,QAAQ,QAAQ,GAAG;AAClD,MAAI,WAAW;AACb,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,KAAK,IAAa,aAAa,SAAS,EAAE;AACxE,aAAO,SAAS;AAAA,IAClB,SAAS,GAAG;AACV,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,YAA+B;AAC9D,QAAM,MAAwB,EAAE,WAAW;AAC3C,QAAM,EAAE,GAAG,IAAI,MAAM,WAAW;AAChC,QAAM,WAAW,MAAM,OAAO,KAAK,MAAe,aAAa,EAAE,IAAI,GAAG;AACxE,SAAO,sBAAsB,QAAQ,CAAC,WAAW,OAAO,UAAU,CAAC;AACnE,YAAU,SAAS;AACnB,SAAO,SAAS;AAClB;","names":["visitor"]}
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 response = await config.http.post<Visitor>(`/visitors`, dto);\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 response = await config.http.get<Visitor>(`/visitors/${visitorId}`);\n return response.data;\n } catch (e) {\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(properties: VisitorProperties) {\n const dto: UpdateVisitorDTO = { properties };\n const { id } = await getVisitor();\n const response = await config.http.patch<Visitor>(`/visitors/${id}`, dto);\n config.thirdPartyUserSetters.forEach((setter) => setter(properties));\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,WAAW,MAAM,OAAO,KAAK,KAAc,aAAa,GAAG;AACjE,SAAO,SAAS;AAClB;AAEA,eAAe,qBAAuC;AACpD,QAAM,YAAY,MAAM,OAAO,QAAQ,QAAQ,GAAG;AAClD,MAAI,WAAW;AACb,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,KAAK,IAAa,aAAa,SAAS,EAAE;AACxE,aAAO,SAAS;AAAA,IAClB,SAAS,GAAG;AACV,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,YAA+B;AAC9D,QAAM,MAAwB,EAAE,WAAW;AAC3C,QAAM,EAAE,GAAG,IAAI,MAAM,WAAW;AAChC,QAAM,WAAW,MAAM,OAAO,KAAK,MAAe,aAAa,EAAE,IAAI,GAAG;AACxE,SAAO,sBAAsB,QAAQ,CAAC,WAAW,OAAO,UAAU,CAAC;AACnE,YAAU,SAAS;AACnB,SAAO,SAAS;AAClB;","names":["visitor"]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/visitor/types.ts
17
+ var types_exports = {};
18
+ module.exports = __toCommonJS(types_exports);
19
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/visitor/types.ts"],"sourcesContent":["export type VisitorProperties = Record<Lowercase<string>, string | number | boolean | null>;\n\nexport interface Visitor {\n id: string;\n device_id: string;\n properties: VisitorProperties;\n}\n\nexport interface CreateVisitorDTO {\n device_id: string;\n properties?: VisitorProperties;\n}\n\nexport interface UpdateVisitorDTO {\n properties: VisitorProperties;\n}\n\nexport type ThirdPartyUserSetter = (properties: VisitorProperties) => void;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -0,0 +1,16 @@
1
+ type VisitorProperties = Record<Lowercase<string>, string | number | boolean | null>;
2
+ interface Visitor {
3
+ id: string;
4
+ device_id: string;
5
+ properties: VisitorProperties;
6
+ }
7
+ interface CreateVisitorDTO {
8
+ device_id: string;
9
+ properties?: VisitorProperties;
10
+ }
11
+ interface UpdateVisitorDTO {
12
+ properties: VisitorProperties;
13
+ }
14
+ type ThirdPartyUserSetter = (properties: VisitorProperties) => void;
15
+
16
+ export type { CreateVisitorDTO, ThirdPartyUserSetter, UpdateVisitorDTO, Visitor, VisitorProperties };
@@ -0,0 +1,16 @@
1
+ type VisitorProperties = Record<Lowercase<string>, string | number | boolean | null>;
2
+ interface Visitor {
3
+ id: string;
4
+ device_id: string;
5
+ properties: VisitorProperties;
6
+ }
7
+ interface CreateVisitorDTO {
8
+ device_id: string;
9
+ properties?: VisitorProperties;
10
+ }
11
+ interface UpdateVisitorDTO {
12
+ properties: VisitorProperties;
13
+ }
14
+ type ThirdPartyUserSetter = (properties: VisitorProperties) => void;
15
+
16
+ export type { CreateVisitorDTO, ThirdPartyUserSetter, UpdateVisitorDTO, Visitor, VisitorProperties };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/web/index.ts"],"sourcesContent":["import Bowser from 'bowser';\nimport * as cookie from 'cookie';\nimport { v4 as uuidv4 } from 'uuid';\nimport { TrackTags } from '../types';\n\nexport function getDeviceId() {\n const cached = localStorage.getItem('device_id');\n if (cached) return cached;\n const id = crypto?.randomUUID ? crypto.randomUUID() : uuidv4();\n localStorage.setItem('device_id', id);\n return id;\n}\n\nexport function getTags(release: string) {\n const parser = Bowser.getParser(window.navigator.userAgent);\n const params = new URLSearchParams(window.location.search);\n const os = parser.getOS();\n const browser = parser.getBrowser();\n const platform = parser.getPlatform();\n const parsed = cookie.parse(document.cookie);\n const tags: TrackTags = {\n os: `${os.name} ${os.version}`,\n os_name: os.name,\n os_version: os.version,\n browser: `${browser.name} ${browser.version}`,\n browser_name: browser.name,\n browser_version: browser.version,\n platform: 'web',\n device: platform.model,\n device_id: getDeviceId(),\n device_type: platform.type,\n device_vendor: platform.vendor,\n device_pixel_ratio: `${window.devicePixelRatio}`,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n release,\n language: navigator.language,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n environment: process.env.NODE_ENV === 'development' ? 'development' : 'production',\n fbc: parsed._fbc,\n fbp: parsed._fbp,\n gclid: params.get('gclid') ?? undefined,\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 };\n return tags;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,aAAwB;AACxB,kBAA6B;AAGtB,SAAS,cAAc;AAC5B,QAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,MAAI,OAAQ,QAAO;AACnB,QAAM,MAAK,iCAAQ,cAAa,OAAO,WAAW,QAAI,YAAAA,IAAO;AAC7D,eAAa,QAAQ,aAAa,EAAE;AACpC,SAAO;AACT;AAEO,SAAS,QAAQ,SAAiB;AACvC,QAAM,SAAS,cAAAC,QAAO,UAAU,OAAO,UAAU,SAAS;AAC1D,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,KAAK,OAAO,MAAM;AACxB,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,WAAW,OAAO,YAAY;AACpC,QAAM,SAAgB,aAAM,SAAS,MAAM;AAC3C,QAAM,OAAkB;AAAA,IACtB,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,OAAO;AAAA,IAC5B,SAAS,GAAG;AAAA,IACZ,YAAY,GAAG;AAAA,IACf,SAAS,GAAG,QAAQ,IAAI,IAAI,QAAQ,OAAO;AAAA,IAC3C,cAAc,QAAQ;AAAA,IACtB,iBAAiB,QAAQ;AAAA,IACzB,UAAU;AAAA,IACV,QAAQ,SAAS;AAAA,IACjB,WAAW,YAAY;AAAA,IACvB,aAAa,SAAS;AAAA,IACtB,eAAe,SAAS;AAAA,IACxB,oBAAoB,GAAG,OAAO,gBAAgB;AAAA,IAC9C,mBAAmB,GAAG,OAAO,OAAO,KAAK,IAAI,OAAO,OAAO,MAAM;AAAA,IACjE;AAAA,IACA,UAAU,UAAU;AAAA,IACpB,UAAU,KAAK,eAAe,EAAE,gBAAgB,EAAE;AAAA,IAClD,aAAa,QAAQ,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,IACtE,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,IACZ,OAAO,OAAO,IAAI,OAAO,KAAK;AAAA,IAC9B,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,cAAc,OAAO,IAAI,cAAc,KAAK;AAAA,IAC5C,UAAU,OAAO,IAAI,UAAU,KAAK;AAAA,IACpC,aAAa,OAAO,IAAI,aAAa,KAAK;AAAA,EAC5C;AACA,SAAO;AACT;","names":["uuidv4","Bowser"]}
1
+ {"version":3,"sources":["../../src/web/index.ts"],"sourcesContent":["import Bowser from 'bowser';\nimport * as cookie from 'cookie';\nimport { v4 as uuidv4 } from 'uuid';\nimport type { TrackTags } from '../track/types';\n\nexport function getDeviceId() {\n const cached = localStorage.getItem('device_id');\n if (cached) return cached;\n const id = crypto?.randomUUID ? crypto.randomUUID() : uuidv4();\n localStorage.setItem('device_id', id);\n return id;\n}\n\nexport function getTags(release: string) {\n const parser = Bowser.getParser(window.navigator.userAgent);\n const params = new URLSearchParams(window.location.search);\n const os = parser.getOS();\n const browser = parser.getBrowser();\n const platform = parser.getPlatform();\n const parsed = cookie.parse(document.cookie);\n const tags: TrackTags = {\n os: `${os.name} ${os.version}`,\n os_name: os.name,\n os_version: os.version,\n browser: `${browser.name} ${browser.version}`,\n browser_name: browser.name,\n browser_version: browser.version,\n platform: 'web',\n device: platform.model,\n device_id: getDeviceId(),\n device_type: platform.type,\n device_vendor: platform.vendor,\n device_pixel_ratio: `${window.devicePixelRatio}`,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n release,\n language: navigator.language,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n environment: process.env.NODE_ENV === 'development' ? 'development' : 'production',\n fbc: parsed._fbc,\n fbp: parsed._fbp,\n gclid: params.get('gclid') ?? undefined,\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 };\n return tags;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,aAAwB;AACxB,kBAA6B;AAGtB,SAAS,cAAc;AAC5B,QAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,MAAI,OAAQ,QAAO;AACnB,QAAM,MAAK,iCAAQ,cAAa,OAAO,WAAW,QAAI,YAAAA,IAAO;AAC7D,eAAa,QAAQ,aAAa,EAAE;AACpC,SAAO;AACT;AAEO,SAAS,QAAQ,SAAiB;AACvC,QAAM,SAAS,cAAAC,QAAO,UAAU,OAAO,UAAU,SAAS;AAC1D,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,KAAK,OAAO,MAAM;AACxB,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,WAAW,OAAO,YAAY;AACpC,QAAM,SAAgB,aAAM,SAAS,MAAM;AAC3C,QAAM,OAAkB;AAAA,IACtB,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,OAAO;AAAA,IAC5B,SAAS,GAAG;AAAA,IACZ,YAAY,GAAG;AAAA,IACf,SAAS,GAAG,QAAQ,IAAI,IAAI,QAAQ,OAAO;AAAA,IAC3C,cAAc,QAAQ;AAAA,IACtB,iBAAiB,QAAQ;AAAA,IACzB,UAAU;AAAA,IACV,QAAQ,SAAS;AAAA,IACjB,WAAW,YAAY;AAAA,IACvB,aAAa,SAAS;AAAA,IACtB,eAAe,SAAS;AAAA,IACxB,oBAAoB,GAAG,OAAO,gBAAgB;AAAA,IAC9C,mBAAmB,GAAG,OAAO,OAAO,KAAK,IAAI,OAAO,OAAO,MAAM;AAAA,IACjE;AAAA,IACA,UAAU,UAAU;AAAA,IACpB,UAAU,KAAK,eAAe,EAAE,gBAAgB,EAAE;AAAA,IAClD,aAAa,QAAQ,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,IACtE,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,IACZ,OAAO,OAAO,IAAI,OAAO,KAAK;AAAA,IAC9B,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,cAAc,OAAO,IAAI,cAAc,KAAK;AAAA,IAC5C,UAAU,OAAO,IAAI,UAAU,KAAK;AAAA,IACpC,aAAa,OAAO,IAAI,aAAa,KAAK;AAAA,EAC5C;AACA,SAAO;AACT;","names":["uuidv4","Bowser"]}
@@ -1,4 +1,5 @@
1
- import { TrackTags } from '../types/index.cjs';
1
+ import { TrackTags } from '../track/types.cjs';
2
+ import '../track/gtag.cjs';
2
3
 
3
4
  declare function getDeviceId(): string;
4
5
  declare function getTags(release: string): TrackTags;
@@ -1,4 +1,5 @@
1
- import { TrackTags } from '../types/index.js';
1
+ import { TrackTags } from '../track/types.js';
2
+ import '../track/gtag.js';
2
3
 
3
4
  declare function getDeviceId(): string;
4
5
  declare function getTags(release: string): TrackTags;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/web/index.ts"],"sourcesContent":["import Bowser from 'bowser';\nimport * as cookie from 'cookie';\nimport { v4 as uuidv4 } from 'uuid';\nimport { TrackTags } from '../types';\n\nexport function getDeviceId() {\n const cached = localStorage.getItem('device_id');\n if (cached) return cached;\n const id = crypto?.randomUUID ? crypto.randomUUID() : uuidv4();\n localStorage.setItem('device_id', id);\n return id;\n}\n\nexport function getTags(release: string) {\n const parser = Bowser.getParser(window.navigator.userAgent);\n const params = new URLSearchParams(window.location.search);\n const os = parser.getOS();\n const browser = parser.getBrowser();\n const platform = parser.getPlatform();\n const parsed = cookie.parse(document.cookie);\n const tags: TrackTags = {\n os: `${os.name} ${os.version}`,\n os_name: os.name,\n os_version: os.version,\n browser: `${browser.name} ${browser.version}`,\n browser_name: browser.name,\n browser_version: browser.version,\n platform: 'web',\n device: platform.model,\n device_id: getDeviceId(),\n device_type: platform.type,\n device_vendor: platform.vendor,\n device_pixel_ratio: `${window.devicePixelRatio}`,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n release,\n language: navigator.language,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n environment: process.env.NODE_ENV === 'development' ? 'development' : 'production',\n fbc: parsed._fbc,\n fbp: parsed._fbp,\n gclid: params.get('gclid') ?? undefined,\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 };\n return tags;\n}\n"],"mappings":";AAAA,OAAO,YAAY;AACnB,YAAY,YAAY;AACxB,SAAS,MAAM,cAAc;AAGtB,SAAS,cAAc;AAC5B,QAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,MAAI,OAAQ,QAAO;AACnB,QAAM,MAAK,iCAAQ,cAAa,OAAO,WAAW,IAAI,OAAO;AAC7D,eAAa,QAAQ,aAAa,EAAE;AACpC,SAAO;AACT;AAEO,SAAS,QAAQ,SAAiB;AACvC,QAAM,SAAS,OAAO,UAAU,OAAO,UAAU,SAAS;AAC1D,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,KAAK,OAAO,MAAM;AACxB,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,WAAW,OAAO,YAAY;AACpC,QAAM,SAAgB,aAAM,SAAS,MAAM;AAC3C,QAAM,OAAkB;AAAA,IACtB,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,OAAO;AAAA,IAC5B,SAAS,GAAG;AAAA,IACZ,YAAY,GAAG;AAAA,IACf,SAAS,GAAG,QAAQ,IAAI,IAAI,QAAQ,OAAO;AAAA,IAC3C,cAAc,QAAQ;AAAA,IACtB,iBAAiB,QAAQ;AAAA,IACzB,UAAU;AAAA,IACV,QAAQ,SAAS;AAAA,IACjB,WAAW,YAAY;AAAA,IACvB,aAAa,SAAS;AAAA,IACtB,eAAe,SAAS;AAAA,IACxB,oBAAoB,GAAG,OAAO,gBAAgB;AAAA,IAC9C,mBAAmB,GAAG,OAAO,OAAO,KAAK,IAAI,OAAO,OAAO,MAAM;AAAA,IACjE;AAAA,IACA,UAAU,UAAU;AAAA,IACpB,UAAU,KAAK,eAAe,EAAE,gBAAgB,EAAE;AAAA,IAClD,aAAa,QAAQ,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,IACtE,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,IACZ,OAAO,OAAO,IAAI,OAAO,KAAK;AAAA,IAC9B,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,cAAc,OAAO,IAAI,cAAc,KAAK;AAAA,IAC5C,UAAU,OAAO,IAAI,UAAU,KAAK;AAAA,IACpC,aAAa,OAAO,IAAI,aAAa,KAAK;AAAA,EAC5C;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../src/web/index.ts"],"sourcesContent":["import Bowser from 'bowser';\nimport * as cookie from 'cookie';\nimport { v4 as uuidv4 } from 'uuid';\nimport type { TrackTags } from '../track/types';\n\nexport function getDeviceId() {\n const cached = localStorage.getItem('device_id');\n if (cached) return cached;\n const id = crypto?.randomUUID ? crypto.randomUUID() : uuidv4();\n localStorage.setItem('device_id', id);\n return id;\n}\n\nexport function getTags(release: string) {\n const parser = Bowser.getParser(window.navigator.userAgent);\n const params = new URLSearchParams(window.location.search);\n const os = parser.getOS();\n const browser = parser.getBrowser();\n const platform = parser.getPlatform();\n const parsed = cookie.parse(document.cookie);\n const tags: TrackTags = {\n os: `${os.name} ${os.version}`,\n os_name: os.name,\n os_version: os.version,\n browser: `${browser.name} ${browser.version}`,\n browser_name: browser.name,\n browser_version: browser.version,\n platform: 'web',\n device: platform.model,\n device_id: getDeviceId(),\n device_type: platform.type,\n device_vendor: platform.vendor,\n device_pixel_ratio: `${window.devicePixelRatio}`,\n screen_resolution: `${window.screen.width}x${window.screen.height}`,\n release,\n language: navigator.language,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n environment: process.env.NODE_ENV === 'development' ? 'development' : 'production',\n fbc: parsed._fbc,\n fbp: parsed._fbp,\n gclid: params.get('gclid') ?? undefined,\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 };\n return tags;\n}\n"],"mappings":";AAAA,OAAO,YAAY;AACnB,YAAY,YAAY;AACxB,SAAS,MAAM,cAAc;AAGtB,SAAS,cAAc;AAC5B,QAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,MAAI,OAAQ,QAAO;AACnB,QAAM,MAAK,iCAAQ,cAAa,OAAO,WAAW,IAAI,OAAO;AAC7D,eAAa,QAAQ,aAAa,EAAE;AACpC,SAAO;AACT;AAEO,SAAS,QAAQ,SAAiB;AACvC,QAAM,SAAS,OAAO,UAAU,OAAO,UAAU,SAAS;AAC1D,QAAM,SAAS,IAAI,gBAAgB,OAAO,SAAS,MAAM;AACzD,QAAM,KAAK,OAAO,MAAM;AACxB,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,WAAW,OAAO,YAAY;AACpC,QAAM,SAAgB,aAAM,SAAS,MAAM;AAC3C,QAAM,OAAkB;AAAA,IACtB,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,OAAO;AAAA,IAC5B,SAAS,GAAG;AAAA,IACZ,YAAY,GAAG;AAAA,IACf,SAAS,GAAG,QAAQ,IAAI,IAAI,QAAQ,OAAO;AAAA,IAC3C,cAAc,QAAQ;AAAA,IACtB,iBAAiB,QAAQ;AAAA,IACzB,UAAU;AAAA,IACV,QAAQ,SAAS;AAAA,IACjB,WAAW,YAAY;AAAA,IACvB,aAAa,SAAS;AAAA,IACtB,eAAe,SAAS;AAAA,IACxB,oBAAoB,GAAG,OAAO,gBAAgB;AAAA,IAC9C,mBAAmB,GAAG,OAAO,OAAO,KAAK,IAAI,OAAO,OAAO,MAAM;AAAA,IACjE;AAAA,IACA,UAAU,UAAU;AAAA,IACpB,UAAU,KAAK,eAAe,EAAE,gBAAgB,EAAE;AAAA,IAClD,aAAa,QAAQ,IAAI,aAAa,gBAAgB,gBAAgB;AAAA,IACtE,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,IACZ,OAAO,OAAO,IAAI,OAAO,KAAK;AAAA,IAC9B,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,YAAY,OAAO,IAAI,YAAY,KAAK;AAAA,IACxC,cAAc,OAAO,IAAI,cAAc,KAAK;AAAA,IAC5C,UAAU,OAAO,IAAI,UAAU,KAAK;AAAA,IACpC,aAAa,OAAO,IAAI,aAAa,KAAK;AAAA,EAC5C;AACA,SAAO;AACT;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shware/analytics",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "dev": "tsc --watch",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/track/ga.ts"],"sourcesContent":["export const standardEventNames = [\n 'add_payment_info',\n 'add_shipping_info',\n 'add_to_cart',\n 'add_to_wishlist',\n 'begin_checkout',\n 'close_convert_lead',\n 'close_unconvert_lead',\n 'disqualify_lead',\n 'earn_virtual_currency',\n 'generate_lead',\n 'join_group',\n 'level_end',\n 'level_start',\n 'level_up',\n 'login',\n 'post_score',\n 'purchase',\n 'qualify_lead',\n 'refund',\n 'remove_from_cart',\n 'search',\n 'select_content',\n 'select_item',\n 'select_promotion',\n 'share',\n 'sign_up',\n 'spend_virtual_currency',\n 'tutorial_begin',\n 'tutorial_complete',\n 'unlock_achievement',\n 'view_cart',\n 'view_item',\n 'view_item_list',\n 'view_promotion',\n 'working_lead',\n] as const;\n\nexport const reservedEventNames = [\n 'ad_activeview',\n 'ad_click',\n 'ad_exposure',\n 'ad_query',\n 'ad_reward',\n 'adunit_exposure',\n 'app_background',\n 'app_clear_data',\n 'app_exception',\n 'app_remove',\n 'app_store_refund',\n 'app_store_subscription_cancel',\n 'app_store_subscription_convert',\n 'app_store_subscription_renew',\n 'app_update',\n 'app_upgrade',\n 'dynamic_link_app_open',\n 'dynamic_link_app_update',\n 'dynamic_link_first_open',\n 'error',\n 'first_open',\n 'first_visit',\n 'in_app_purchase',\n 'notification_dismiss',\n 'notification_foreground',\n 'notification_open',\n 'notification_receive',\n 'os_update',\n 'session_start',\n 'session_start_with_rollout',\n 'user_engagement',\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -1,4 +0,0 @@
1
- declare const standardEventNames: readonly ["add_payment_info", "add_shipping_info", "add_to_cart", "add_to_wishlist", "begin_checkout", "close_convert_lead", "close_unconvert_lead", "disqualify_lead", "earn_virtual_currency", "generate_lead", "join_group", "level_end", "level_start", "level_up", "login", "post_score", "purchase", "qualify_lead", "refund", "remove_from_cart", "search", "select_content", "select_item", "select_promotion", "share", "sign_up", "spend_virtual_currency", "tutorial_begin", "tutorial_complete", "unlock_achievement", "view_cart", "view_item", "view_item_list", "view_promotion", "working_lead"];
2
- declare const reservedEventNames: string[];
3
-
4
- export { reservedEventNames, standardEventNames };
@@ -1,4 +0,0 @@
1
- declare const standardEventNames: readonly ["add_payment_info", "add_shipping_info", "add_to_cart", "add_to_wishlist", "begin_checkout", "close_convert_lead", "close_unconvert_lead", "disqualify_lead", "earn_virtual_currency", "generate_lead", "join_group", "level_end", "level_start", "level_up", "login", "post_score", "purchase", "qualify_lead", "refund", "remove_from_cart", "search", "select_content", "select_item", "select_promotion", "share", "sign_up", "spend_virtual_currency", "tutorial_begin", "tutorial_complete", "unlock_achievement", "view_cart", "view_item", "view_item_list", "view_promotion", "working_lead"];
2
- declare const reservedEventNames: string[];
3
-
4
- export { reservedEventNames, standardEventNames };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/track/ga.ts"],"sourcesContent":["export const standardEventNames = [\n 'add_payment_info',\n 'add_shipping_info',\n 'add_to_cart',\n 'add_to_wishlist',\n 'begin_checkout',\n 'close_convert_lead',\n 'close_unconvert_lead',\n 'disqualify_lead',\n 'earn_virtual_currency',\n 'generate_lead',\n 'join_group',\n 'level_end',\n 'level_start',\n 'level_up',\n 'login',\n 'post_score',\n 'purchase',\n 'qualify_lead',\n 'refund',\n 'remove_from_cart',\n 'search',\n 'select_content',\n 'select_item',\n 'select_promotion',\n 'share',\n 'sign_up',\n 'spend_virtual_currency',\n 'tutorial_begin',\n 'tutorial_complete',\n 'unlock_achievement',\n 'view_cart',\n 'view_item',\n 'view_item_list',\n 'view_promotion',\n 'working_lead',\n] as const;\n\nexport const reservedEventNames = [\n 'ad_activeview',\n 'ad_click',\n 'ad_exposure',\n 'ad_query',\n 'ad_reward',\n 'adunit_exposure',\n 'app_background',\n 'app_clear_data',\n 'app_exception',\n 'app_remove',\n 'app_store_refund',\n 'app_store_subscription_cancel',\n 'app_store_subscription_convert',\n 'app_store_subscription_renew',\n 'app_update',\n 'app_upgrade',\n 'dynamic_link_app_open',\n 'dynamic_link_app_update',\n 'dynamic_link_first_open',\n 'error',\n 'first_open',\n 'first_visit',\n 'in_app_purchase',\n 'notification_dismiss',\n 'notification_foreground',\n 'notification_open',\n 'notification_receive',\n 'os_update',\n 'session_start',\n 'session_start_with_rollout',\n 'user_engagement',\n];\n"],"mappings":";AAAO,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["export interface Item {\n item_brand?: string;\n item_id?: string;\n item_name?: string;\n item_category?: string;\n item_category2?: string;\n item_category3?: string;\n item_category4?: string;\n item_category5?: string;\n item_list_id?: string;\n item_list_name?: string;\n item_location_id?: string;\n item_variant?: string;\n quantity?: number;\n price?: number;\n}\n\n/**\n * ref: https://developers.google.com/analytics/devguides/collection/ga4/reference/events?client_type=gtag\n * ref: https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Event\n * */\nexport type StandardEventProperties = {\n // Google Analytics 4 Recommended Events\n add_payment_info: {\n items?: Item[];\n currency?: string;\n value?: number;\n coupon?: string;\n payment_type?: string;\n };\n add_shipping_info: {\n items?: Item[];\n currency?: string;\n value?: number;\n coupon?: string;\n shipping_tier?: string;\n };\n add_to_cart: {\n items?: Item[];\n currency?: string;\n value?: number;\n };\n add_to_wishlist: {\n items?: Item[];\n currency?: string;\n value?: number;\n };\n begin_checkout: {\n currency?: string;\n value?: number;\n coupon?: string;\n items?: Item[];\n [key: string]: any;\n };\n close_convert_lead: { currency: string; value: number };\n close_unconvert_lead: { currency: string; value: number; unconvert_lead_reason?: string };\n disqualify_lead: { currency: string; value: number; disqualified_lead_reason?: string };\n earn_virtual_currency: { virtual_currency_name: string; value: number };\n generate_lead: { currency?: string; value?: number };\n join_group: { group_id: string };\n level_end: { level: number; success?: string };\n level_start: { level: number };\n level_up: { level: number; character?: string };\n login: { method: string };\n post_score: { score: number; level?: number; character?: string };\n purchase: {\n affiliation?: string;\n coupon?: string;\n currency?: string;\n items?: Item[];\n shipping?: number;\n tax?: number;\n value?: number;\n transaction_id?: string;\n [key: string]: any;\n };\n qualify_lead: { currency: string; value: number };\n refund: {\n affiliation?: string;\n coupon?: string;\n currency?: string;\n items?: Item[];\n shipping?: number;\n tax?: number;\n value?: number;\n transaction_id?: string;\n };\n remove_from_cart: { items?: Item[]; value?: number; currency?: string };\n search: {\n search_term: string;\n number_of_nights?: number;\n number_of_rooms?: number;\n number_of_passengers?: number;\n origin?: string;\n destination?: string;\n start_date?: string;\n end_date?: string;\n travel_class?: string;\n };\n select_content: { content_type: string; item_id: string };\n select_item: {\n items?: Item[];\n content_type: string;\n item_list_id: string;\n item_list_name: string;\n };\n select_promotion: {\n creative_name: string;\n creative_slot: string;\n items?: Item[];\n location_id: string;\n promotion_id: string;\n promotion_name: string;\n };\n share: {\n content_type: string;\n item_id: string;\n method: string;\n activity_type?: string | null;\n post_id?: string;\n };\n sign_up: { method: string };\n spend_virtual_currency: { item_name: string; virtual_currency_name: string; value: number };\n tutorial_begin: undefined;\n tutorial_complete: undefined;\n unlock_achievement: { achievement_id: string };\n view_cart: { items?: Item[]; currency?: string; value?: number };\n view_item: { items?: Item[]; currency?: string; value?: number };\n view_item_list: { items?: Item[]; item_list_id?: string; item_list_name?: string };\n view_promotion: {\n items?: Item[];\n location_id?: string;\n creative_name?: string;\n creative_slot?: string;\n promotion_id?: string;\n promotion_name?: string;\n };\n working_lead: { currency: string; value: number; lead_status?: string };\n\n // Firebase Analytics events, event_name 40 characters limit, 25 parameters limit\n ad_impression: {\n value?: number;\n currency?: string;\n ad_format?: string;\n ad_platform?: string;\n ad_source?: string;\n ad_unit_name?: string;\n };\n app_open: undefined;\n campaign_details: {\n source: string;\n medium: string;\n campaign: string;\n term?: string;\n content?: string;\n aclid?: string;\n cp1?: string;\n };\n screen_view: { screen_name?: string; screen_class?: string };\n view_search_results: { search_term: string };\n};\n\nexport type AllowedPropertyValues = string | number | boolean | null;\nexport type EventName = Lowercase<string>;\nexport type CustomEventProperties = Record<Lowercase<string>, AllowedPropertyValues>;\n\nexport type TrackProperties<T extends EventName = EventName> =\n T extends keyof StandardEventProperties ? StandardEventProperties[T] : CustomEventProperties;\n\nexport interface UserData {\n userId: string;\n email?: string;\n firstName?: string;\n lastName?: string;\n phone?: string;\n dateOfBirth?: string;\n gender?: string;\n city?: string;\n state?: string;\n postal?: string;\n country?: string;\n}\n\nexport type ThirdPartyTracker = <T extends EventName = EventName>(\n name: T,\n properties?: TrackProperties<T>,\n event_id?: string\n) => void;\n\nexport interface PlatformInfo {\n os?: string;\n os_name?: string;\n os_version?: string;\n browser?: string;\n browser_name?: string;\n browser_version?: string;\n platform?: 'ios' | 'android' | 'web' | 'macos' | 'windows' | 'linux' | 'unknown';\n}\n\nexport interface DeviceInfo {\n device?: string;\n device_id?: string;\n device_type?: string;\n device_vendor?: string;\n device_pixel_ratio?: string;\n screen_resolution?: `${number}x${number}`;\n}\n\nexport interface EnvironmentInfo {\n release?: string;\n language?: string;\n timezone?: string;\n environment?: 'development' | 'production';\n}\n\nexport interface SourceInfo {\n source_url?: string;\n source?: 'app' | 'web' | 'offline';\n}\n\nexport interface ThirdPartyFields {\n /**\n * Meta pixel fields\n * ref: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters#fbc\n * Stored in the _fbc/_fbp browser cookie under your domain\n */\n fbc?: string;\n fbp?: string;\n /**\n * Google Analytics fields\n */\n gclid?: string;\n}\n\nexport interface UTMParams {\n utm_source?: string;\n utm_medium?: string;\n utm_campaign?: string;\n utm_term?: string;\n utm_content?: string;\n}\n\nexport interface TrackTags\n extends PlatformInfo,\n DeviceInfo,\n EnvironmentInfo,\n SourceInfo,\n ThirdPartyFields,\n UTMParams {\n [key: string]: string | undefined;\n}\n\nexport interface CreateTrackEventDTO<T extends EventName = EventName> {\n name: string;\n tags: TrackTags;\n visitor_id: string;\n properties?: TrackProperties<T>;\n timestamp: string;\n}\n\nexport interface TrackEventResponse {\n /**\n * track event id\n * some tracking system will use event_id and event_name for deduplication\n * */\n id: string;\n}\n\nexport type VisitorProperties = Record<Lowercase<string>, AllowedPropertyValues>;\n\nexport interface Visitor {\n id: string;\n device_id: string;\n properties: VisitorProperties;\n}\n\nexport interface CreateVisitorDTO {\n device_id: string;\n properties?: VisitorProperties;\n}\n\nexport interface UpdateVisitorDTO {\n properties: VisitorProperties;\n}\n\nexport type ThirdPartyUserSetter = (properties: VisitorProperties) => void;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}