@shware/analytics 0.1.17 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) 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 +109 -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 +96 -4
  10. package/dist/next/index.mjs.map +1 -1
  11. package/dist/react-router/index.cjs +98 -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 +95 -3
  16. package/dist/react-router/index.mjs.map +1 -1
  17. package/dist/schema/index.cjs +1 -0
  18. package/dist/schema/index.cjs.map +1 -1
  19. package/dist/schema/index.d.cts +17 -12
  20. package/dist/schema/index.d.ts +17 -12
  21. package/dist/schema/index.mjs +1 -0
  22. package/dist/schema/index.mjs.map +1 -1
  23. package/dist/server/conversions-api.cjs +246 -0
  24. package/dist/server/conversions-api.cjs.map +1 -0
  25. package/dist/server/conversions-api.d.cts +15 -0
  26. package/dist/server/conversions-api.d.ts +15 -0
  27. package/dist/server/conversions-api.mjs +227 -0
  28. package/dist/server/conversions-api.mjs.map +1 -0
  29. package/dist/setup/index.cjs.map +1 -1
  30. package/dist/setup/index.d.cts +3 -1
  31. package/dist/setup/index.d.ts +3 -1
  32. package/dist/setup/index.mjs.map +1 -1
  33. package/dist/track/fbq.cjs +142 -0
  34. package/dist/track/fbq.cjs.map +1 -0
  35. package/dist/track/fbq.d.cts +279 -0
  36. package/dist/track/fbq.d.ts +279 -0
  37. package/dist/track/fbq.mjs +115 -0
  38. package/dist/track/fbq.mjs.map +1 -0
  39. package/dist/track/{ga.cjs → gtag.cjs} +38 -51
  40. package/dist/track/gtag.cjs.map +1 -0
  41. package/dist/track/gtag.d.cts +525 -0
  42. package/dist/track/gtag.d.ts +525 -0
  43. package/dist/track/gtag.mjs +64 -0
  44. package/dist/track/gtag.mjs.map +1 -0
  45. package/dist/track/index.cjs.map +1 -1
  46. package/dist/track/index.d.cts +3 -2
  47. package/dist/track/index.d.ts +3 -2
  48. package/dist/track/index.mjs.map +1 -1
  49. package/dist/{types/index.cjs → track/types.cjs} +2 -2
  50. package/dist/track/types.cjs.map +1 -0
  51. package/dist/track/types.d.cts +116 -0
  52. package/dist/track/types.d.ts +116 -0
  53. package/dist/track/types.mjs +1 -0
  54. package/dist/visitor/index.cjs.map +1 -1
  55. package/dist/visitor/index.d.cts +1 -1
  56. package/dist/visitor/index.d.ts +1 -1
  57. package/dist/visitor/index.mjs.map +1 -1
  58. package/dist/visitor/types.cjs +19 -0
  59. package/dist/visitor/types.cjs.map +1 -0
  60. package/dist/visitor/types.d.cts +16 -0
  61. package/dist/visitor/types.d.ts +16 -0
  62. package/dist/visitor/types.mjs +1 -0
  63. package/dist/visitor/types.mjs.map +1 -0
  64. package/dist/web/index.cjs +4 -0
  65. package/dist/web/index.cjs.map +1 -1
  66. package/dist/web/index.d.cts +2 -1
  67. package/dist/web/index.d.ts +2 -1
  68. package/dist/web/index.mjs +4 -0
  69. package/dist/web/index.mjs.map +1 -1
  70. package/package.json +11 -1
  71. package/dist/track/ga.cjs.map +0 -1
  72. package/dist/track/ga.d.cts +0 -4
  73. package/dist/track/ga.d.ts +0 -4
  74. package/dist/track/ga.mjs +0 -76
  75. package/dist/track/ga.mjs.map +0 -1
  76. package/dist/types/index.cjs.map +0 -1
  77. package/dist/types/index.d.cts +0 -327
  78. package/dist/types/index.d.ts +0 -327
  79. package/dist/types/index.mjs +0 -1
  80. /package/dist/{types/index.mjs.map → track/types.mjs.map} +0 -0
@@ -0,0 +1,246 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/server/conversions-api.ts
21
+ var conversions_api_exports = {};
22
+ __export(conversions_api_exports, {
23
+ getServerEvent: () => getServerEvent,
24
+ sendEvent: () => sendEvent,
25
+ sendTestEvent: () => sendTestEvent
26
+ });
27
+ module.exports = __toCommonJS(conversions_api_exports);
28
+ var import_facebook_nodejs_business_sdk = require("facebook-nodejs-business-sdk");
29
+ var import_fbq = require("../track/fbq.cjs");
30
+ function getUserData(tags, data) {
31
+ const userData = new import_facebook_nodejs_business_sdk.UserData();
32
+ if (data.email) {
33
+ Array.isArray(data.email) ? userData.setEmails(data.email) : userData.setEmail(data.email);
34
+ }
35
+ if (data.phone_number) {
36
+ Array.isArray(data.phone_number) ? userData.setPhones(data.phone_number) : userData.setPhone(data.phone_number);
37
+ }
38
+ if (data.gender) {
39
+ if (data.gender === "female") {
40
+ userData.setGender("f");
41
+ } else if (data.gender === "male") {
42
+ userData.setGender("m");
43
+ }
44
+ }
45
+ if (data.address) {
46
+ if (Array.isArray(data.address)) {
47
+ const firstNames = data.address.map((a) => a.first_name).filter(Boolean);
48
+ const lastNames = data.address.map((a) => a.last_name).filter(Boolean);
49
+ const cities = data.address.map((a) => a.city).filter(Boolean);
50
+ const states = data.address.map((a) => a.region).filter(Boolean);
51
+ const postalCodes = data.address.map((a) => a.postal_code).filter(Boolean);
52
+ const countries = data.address.map((a) => {
53
+ var _a;
54
+ return (_a = a.country) == null ? void 0 : _a.split(/[-_]/).at(0);
55
+ }).filter(Boolean);
56
+ userData.setFirstNames(firstNames);
57
+ userData.setLastNames(lastNames);
58
+ userData.setCities(cities);
59
+ userData.setStates(states);
60
+ userData.setZips(postalCodes);
61
+ userData.setCountries(countries);
62
+ } else {
63
+ if (data.address.first_name) {
64
+ userData.setFirstName(data.address.first_name);
65
+ userData.setF5First(data.address.first_name.slice(0, 5));
66
+ }
67
+ if (data.address.last_name) {
68
+ userData.setLastName(data.address.last_name);
69
+ userData.setF5Last(data.address.last_name.slice(0, 5));
70
+ }
71
+ if (data.address.city) userData.setCity(data.address.city);
72
+ if (data.address.region) userData.setState(data.address.region);
73
+ if (data.address.postal_code) userData.setZip(data.address.postal_code);
74
+ if (data.address.country) userData.setCountry(data.address.country.split(/[-_]/).at(0));
75
+ }
76
+ }
77
+ if (data.birthday) {
78
+ userData.setDoby(data.birthday.year.toString());
79
+ userData.setDobm(data.birthday.month.toString());
80
+ userData.setDobd(data.birthday.day.toString());
81
+ }
82
+ if (data.user_id && data.user_id.length !== 0) {
83
+ userData.setExternalId(data.user_id);
84
+ }
85
+ if (data.ip_address) {
86
+ userData.setClientIpAddress(data.ip_address);
87
+ }
88
+ if (data.user_agent) {
89
+ userData.setClientUserAgent(data.user_agent);
90
+ }
91
+ if (data.fb_login_id) {
92
+ userData.setFbLoginId(data.fb_login_id);
93
+ }
94
+ if (data.fb_page_id) {
95
+ userData.setPageId(data.fb_page_id);
96
+ }
97
+ if (tags.fbc) {
98
+ userData.setFbc(tags.fbc);
99
+ }
100
+ if (tags.fbp) {
101
+ userData.setFbp(tags.fbp);
102
+ }
103
+ if (tags.advertising_id) {
104
+ userData.setMadid(tags.advertising_id);
105
+ }
106
+ return userData;
107
+ }
108
+ function getAppData(tags, appPackageName) {
109
+ var _a;
110
+ const extinfo = new import_facebook_nodejs_business_sdk.ExtendedDeviceInfo();
111
+ if (tags.os_name) {
112
+ if (tags.os_name === "iOS" || tags.os_name === "iPadOS") {
113
+ extinfo.setExtInfoVersion("i2");
114
+ } else if (tags.os_name === "Android") {
115
+ extinfo.setExtInfoVersion("a2");
116
+ }
117
+ }
118
+ extinfo.setAppPackageName(appPackageName);
119
+ const shortVersion = (_a = tags.release) == null ? void 0 : _a.split(".").at(0);
120
+ if (shortVersion) {
121
+ extinfo.setShortVersion(shortVersion);
122
+ }
123
+ if (tags.release) {
124
+ extinfo.setLongVersion(tags.release);
125
+ }
126
+ if (tags.os_version) {
127
+ extinfo.setOsVersion(tags.os_version);
128
+ }
129
+ if (tags.device_model_id) {
130
+ extinfo.setDeviceModelName(tags.device_model_id);
131
+ }
132
+ if (tags.language) {
133
+ extinfo.setLocale(tags.language);
134
+ }
135
+ if (tags.screen_width) {
136
+ extinfo.setScreenWidth(tags.screen_width);
137
+ }
138
+ if (tags.screen_height) {
139
+ extinfo.setScreenHeight(tags.screen_height);
140
+ }
141
+ if (tags.device_pixel_ratio) {
142
+ extinfo.setScreenDensity(tags.device_pixel_ratio);
143
+ }
144
+ const appData = new import_facebook_nodejs_business_sdk.AppData();
145
+ appData.setExtinfo(extinfo);
146
+ if (tags.install_referrer) {
147
+ appData.setInstallReferrer(tags.install_referrer);
148
+ }
149
+ if (tags.advertising_id) {
150
+ appData.setAdvertiserTrackingEnabled(true);
151
+ }
152
+ return appData;
153
+ }
154
+ function getCustomData({ name, properties }) {
155
+ const data = new import_facebook_nodejs_business_sdk.CustomData();
156
+ const [_, _name, fbEventProperties] = (0, import_fbq.mapFBEvent)(name, properties);
157
+ const {
158
+ value,
159
+ currency,
160
+ content_name,
161
+ content_category,
162
+ content_ids,
163
+ contents,
164
+ content_type,
165
+ // order_id,
166
+ predicted_ltv,
167
+ num_items,
168
+ search_string,
169
+ status,
170
+ // item_number,
171
+ delivery_category,
172
+ ...custom_properties
173
+ } = fbEventProperties;
174
+ if (value) data.setValue(value);
175
+ if (currency) data.setCurrency(currency);
176
+ if (content_name) data.setContentName(content_name);
177
+ if (content_category) data.setContentCategory(content_category);
178
+ if (content_ids) data.setContentIds(content_ids);
179
+ if (contents)
180
+ data.setContents(
181
+ contents.map((c) => {
182
+ const result = new import_facebook_nodejs_business_sdk.Content().setId(c.id).setQuantity(c.quantity);
183
+ if (c.item_price) result.setItemPrice(c.item_price);
184
+ if (c.title) result.setTitle(c.title);
185
+ if (c.description) result.setDescription(c.description);
186
+ if (c.brand) result.setBrand(c.brand);
187
+ if (c.category) result.setCategory(c.category);
188
+ if (c.delivery_category) result.setDeliveryCategory(c.delivery_category);
189
+ return result;
190
+ })
191
+ );
192
+ if (content_type) data.setContentType(content_type);
193
+ if (predicted_ltv) data.setPredictedLtv(predicted_ltv);
194
+ if (num_items) data.setNumItems(num_items);
195
+ if (search_string) data.setSearchString(search_string);
196
+ if (status) data.setStatus(status.toString());
197
+ if (delivery_category) data.setDeliveryCategory(delivery_category);
198
+ if (custom_properties) data.setCustomProperties(custom_properties);
199
+ return data;
200
+ }
201
+ function getServerEvent(event, data, appPackageName) {
202
+ const userData = getUserData(event.tags, data);
203
+ const customData = getCustomData(event);
204
+ const serverEvent = new import_facebook_nodejs_business_sdk.ServerEvent().setEventId(event.tags.idempotency_key ?? event.id.toString()).setEventName(event.name).setEventTime(Math.round(Date.now() / 1e3)).setUserData(userData).setCustomData(customData);
205
+ if (event.tags.source === "app" && appPackageName) {
206
+ const appData = getAppData(event.tags, appPackageName);
207
+ serverEvent.setAppData(appData);
208
+ }
209
+ if (event.tags.source_url) {
210
+ serverEvent.setEventSourceUrl(event.tags.source_url);
211
+ }
212
+ switch (event.tags.source) {
213
+ case "app":
214
+ serverEvent.setActionSource("app");
215
+ break;
216
+ case "web":
217
+ serverEvent.setActionSource("website");
218
+ break;
219
+ default:
220
+ break;
221
+ }
222
+ return serverEvent;
223
+ }
224
+ async function sendEvent(accessToken, pixelId, params) {
225
+ const { event, data, appPackageName } = params;
226
+ const request = new import_facebook_nodejs_business_sdk.EventRequest(accessToken, pixelId);
227
+ request.setEvents([getServerEvent(event, data, appPackageName)]);
228
+ return request.execute();
229
+ }
230
+ async function sendTestEvent(accessToken, pixelId, testEventCode) {
231
+ const extinfo = new import_facebook_nodejs_business_sdk.ExtendedDeviceInfo().setExtInfoVersion("a2").setAppPackageName("com.some.app").setShortVersion("771").setLongVersion("Version 7.7.1").setOsVersion("10.1.1").setDeviceModelName("OnePlus6").setLocale("en_US").setTimezoneAbbreviation("GMT-1").setCarrier("TMobile").setScreenWidth(1920).setScreenHeight(1080).setScreenDensity("2.00").setCpuCoreCount(2).setTotalDiskSpaceGb(128).setFreeDiskSpaceGb(8).setDeviceTimeZone("USA/New York");
232
+ const userData = new import_facebook_nodejs_business_sdk.UserData().setEmail("test@example.com");
233
+ const appData = new import_facebook_nodejs_business_sdk.AppData().setExtinfo(extinfo);
234
+ const event = new import_facebook_nodejs_business_sdk.ServerEvent().setEventId(Math.round(Math.random() * 1e6).toString()).setEventName("TestEvent").setEventTime(Math.round(Date.now() / 1e3)).setUserData(userData).setAppData(appData).setActionSource("app");
235
+ const request = new import_facebook_nodejs_business_sdk.EventRequest(accessToken, pixelId);
236
+ request.setTestEventCode(testEventCode);
237
+ request.setEvents([event]);
238
+ return request.execute();
239
+ }
240
+ // Annotate the CommonJS export names for ESM import in node:
241
+ 0 && (module.exports = {
242
+ getServerEvent,
243
+ sendEvent,
244
+ sendTestEvent
245
+ });
246
+ //# sourceMappingURL=conversions-api.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/server/conversions-api.ts"],"sourcesContent":["import {\n AppData,\n Content,\n CustomData,\n EventRequest,\n ExtendedDeviceInfo,\n ServerEvent,\n UserData,\n} from 'facebook-nodejs-business-sdk';\nimport { mapFBEvent } from '../track/fbq';\nimport type { TrackEvent, TrackTags, UserProvidedData } from '../track/types';\n\nfunction getUserData(tags: TrackTags, data: UserProvidedData) {\n const userData = new UserData();\n\n // set user provided data\n if (data.email) {\n Array.isArray(data.email) ? userData.setEmails(data.email) : userData.setEmail(data.email);\n }\n if (data.phone_number) {\n Array.isArray(data.phone_number)\n ? userData.setPhones(data.phone_number)\n : userData.setPhone(data.phone_number);\n }\n if (data.gender) {\n if (data.gender === 'female') {\n userData.setGender('f');\n } else if (data.gender === 'male') {\n userData.setGender('m');\n }\n }\n if (data.address) {\n if (Array.isArray(data.address)) {\n const firstNames = data.address.map((a) => a.first_name).filter(Boolean);\n const lastNames = data.address.map((a) => a.last_name).filter(Boolean);\n const cities = data.address.map((a) => a.city).filter(Boolean);\n const states = data.address.map((a) => a.region).filter(Boolean);\n const postalCodes = data.address.map((a) => a.postal_code).filter(Boolean);\n const countries = data.address.map((a) => a.country?.split(/[-_]/).at(0)).filter(Boolean);\n userData.setFirstNames(firstNames as string[]);\n userData.setLastNames(lastNames as string[]);\n userData.setCities(cities as string[]);\n userData.setStates(states as string[]);\n userData.setZips(postalCodes as string[]);\n userData.setCountries(countries as string[]);\n } else {\n if (data.address.first_name) {\n userData.setFirstName(data.address.first_name);\n userData.setF5First(data.address.first_name.slice(0, 5));\n }\n if (data.address.last_name) {\n userData.setLastName(data.address.last_name);\n userData.setF5Last(data.address.last_name.slice(0, 5));\n }\n if (data.address.city) userData.setCity(data.address.city);\n if (data.address.region) userData.setState(data.address.region);\n if (data.address.postal_code) userData.setZip(data.address.postal_code);\n if (data.address.country) userData.setCountry(data.address.country.split(/[-_]/).at(0)!);\n }\n }\n if (data.birthday) {\n userData.setDoby(data.birthday.year.toString());\n userData.setDobm(data.birthday.month.toString());\n userData.setDobd(data.birthday.day.toString());\n }\n if (data.user_id && data.user_id.length !== 0) {\n userData.setExternalId(data.user_id);\n }\n if (data.ip_address) {\n userData.setClientIpAddress(data.ip_address);\n }\n if (data.user_agent) {\n userData.setClientUserAgent(data.user_agent);\n }\n if (data.fb_login_id) {\n userData.setFbLoginId(data.fb_login_id);\n }\n if (data.fb_page_id) {\n userData.setPageId(data.fb_page_id);\n }\n\n // set tags info\n if (tags.fbc) {\n userData.setFbc(tags.fbc);\n }\n if (tags.fbp) {\n userData.setFbp(tags.fbp);\n }\n if (tags.advertising_id) {\n userData.setMadid(tags.advertising_id);\n }\n\n return userData;\n}\n\nfunction getAppData(tags: TrackTags, appPackageName: string) {\n const extinfo = new ExtendedDeviceInfo();\n if (tags.os_name) {\n if (tags.os_name === 'iOS' || tags.os_name === 'iPadOS') {\n extinfo.setExtInfoVersion('i2');\n } else if (tags.os_name === 'Android') {\n extinfo.setExtInfoVersion('a2');\n }\n }\n extinfo.setAppPackageName(appPackageName);\n const shortVersion = tags.release?.split('.').at(0);\n if (shortVersion) {\n extinfo.setShortVersion(shortVersion);\n }\n if (tags.release) {\n extinfo.setLongVersion(tags.release);\n }\n if (tags.os_version) {\n extinfo.setOsVersion(tags.os_version);\n }\n if (tags.device_model_id) {\n extinfo.setDeviceModelName(tags.device_model_id);\n }\n if (tags.language) {\n extinfo.setLocale(tags.language);\n }\n if (tags.screen_width) {\n extinfo.setScreenWidth(tags.screen_width);\n }\n if (tags.screen_height) {\n extinfo.setScreenHeight(tags.screen_height);\n }\n if (tags.device_pixel_ratio) {\n extinfo.setScreenDensity(tags.device_pixel_ratio);\n }\n\n const appData = new AppData();\n appData.setExtinfo(extinfo);\n if (tags.install_referrer) {\n appData.setInstallReferrer(tags.install_referrer);\n }\n if (tags.advertising_id) {\n appData.setAdvertiserTrackingEnabled(true);\n }\n\n return appData;\n}\n\nfunction getCustomData({ name, properties }: TrackEvent) {\n const data = new CustomData();\n const [_, _name, fbEventProperties] = mapFBEvent(name, properties);\n const {\n value,\n currency,\n content_name,\n content_category,\n content_ids,\n contents,\n content_type,\n // order_id,\n predicted_ltv,\n num_items,\n search_string,\n status,\n // item_number,\n delivery_category,\n ...custom_properties\n } = fbEventProperties;\n if (value) data.setValue(value);\n if (currency) data.setCurrency(currency);\n if (content_name) data.setContentName(content_name);\n if (content_category) data.setContentCategory(content_category);\n if (content_ids) data.setContentIds(content_ids);\n if (contents)\n data.setContents(\n contents.map((c) => {\n const result = new Content().setId(c.id).setQuantity(c.quantity);\n if (c.item_price) result.setItemPrice(c.item_price);\n if (c.title) result.setTitle(c.title);\n if (c.description) result.setDescription(c.description);\n if (c.brand) result.setBrand(c.brand);\n if (c.category) result.setCategory(c.category);\n if (c.delivery_category) result.setDeliveryCategory(c.delivery_category);\n return result;\n })\n );\n if (content_type) data.setContentType(content_type);\n // if (order_id) data.setOrderId(order_id);\n if (predicted_ltv) data.setPredictedLtv(predicted_ltv);\n if (num_items) data.setNumItems(num_items);\n if (search_string) data.setSearchString(search_string);\n if (status) data.setStatus(status.toString());\n // if (item_number) data.setItemNumber(item_number);\n if (delivery_category) data.setDeliveryCategory(delivery_category);\n if (custom_properties) data.setCustomProperties(custom_properties);\n return data;\n}\n\nexport function getServerEvent(event: TrackEvent, data: UserProvidedData, appPackageName?: string) {\n const userData = getUserData(event.tags, data);\n const customData = getCustomData(event);\n const serverEvent = new ServerEvent()\n .setEventId(event.tags.idempotency_key ?? event.id.toString())\n .setEventName(event.name)\n .setEventTime(Math.round(Date.now() / 1000))\n .setUserData(userData)\n .setCustomData(customData);\n\n if (event.tags.source === 'app' && appPackageName) {\n const appData = getAppData(event.tags, appPackageName);\n serverEvent.setAppData(appData);\n }\n if (event.tags.source_url) {\n serverEvent.setEventSourceUrl(event.tags.source_url);\n }\n switch (event.tags.source) {\n case 'app':\n serverEvent.setActionSource('app');\n break;\n case 'web':\n serverEvent.setActionSource('website');\n break;\n default:\n break;\n }\n return serverEvent;\n}\n\nexport interface SendEventParams {\n event: TrackEvent;\n data: UserProvidedData;\n appPackageName?: string;\n}\n\nexport async function sendEvent(accessToken: string, pixelId: string, params: SendEventParams) {\n const { event, data, appPackageName } = params;\n const request = new EventRequest(accessToken, pixelId);\n request.setEvents([getServerEvent(event, data, appPackageName)]);\n return request.execute();\n}\n\nexport async function sendTestEvent(accessToken: string, pixelId: string, testEventCode: string) {\n const extinfo = new ExtendedDeviceInfo()\n .setExtInfoVersion('a2')\n .setAppPackageName('com.some.app')\n .setShortVersion('771')\n .setLongVersion('Version 7.7.1')\n .setOsVersion('10.1.1')\n .setDeviceModelName('OnePlus6')\n .setLocale('en_US')\n .setTimezoneAbbreviation('GMT-1')\n .setCarrier('TMobile')\n .setScreenWidth(1920)\n .setScreenHeight(1080)\n .setScreenDensity('2.00')\n .setCpuCoreCount(2)\n .setTotalDiskSpaceGb(128)\n .setFreeDiskSpaceGb(8)\n .setDeviceTimeZone('USA/New York');\n\n const userData = new UserData().setEmail('test@example.com');\n const appData = new AppData().setExtinfo(extinfo);\n const event = new ServerEvent()\n .setEventId(Math.round(Math.random() * 1000_000).toString())\n .setEventName('TestEvent')\n .setEventTime(Math.round(Date.now() / 1000))\n .setUserData(userData)\n .setAppData(appData)\n .setActionSource('app');\n\n const request = new EventRequest(accessToken, pixelId);\n request.setTestEventCode(testEventCode);\n request.setEvents([event]);\n return request.execute();\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,15 @@
1
+ import * as facebook_nodejs_business_sdk from 'facebook-nodejs-business-sdk';
2
+ import { ServerEvent } from 'facebook-nodejs-business-sdk';
3
+ import { TrackEvent, UserProvidedData } from '../track/types.cjs';
4
+ import '../track/gtag.cjs';
5
+
6
+ declare function getServerEvent(event: TrackEvent, data: UserProvidedData, appPackageName?: string): ServerEvent;
7
+ interface SendEventParams {
8
+ event: TrackEvent;
9
+ data: UserProvidedData;
10
+ appPackageName?: string;
11
+ }
12
+ declare function sendEvent(accessToken: string, pixelId: string, params: SendEventParams): Promise<facebook_nodejs_business_sdk.EventResponse>;
13
+ declare function sendTestEvent(accessToken: string, pixelId: string, testEventCode: string): Promise<facebook_nodejs_business_sdk.EventResponse>;
14
+
15
+ export { type SendEventParams, getServerEvent, sendEvent, sendTestEvent };
@@ -0,0 +1,15 @@
1
+ import * as facebook_nodejs_business_sdk from 'facebook-nodejs-business-sdk';
2
+ import { ServerEvent } from 'facebook-nodejs-business-sdk';
3
+ import { TrackEvent, UserProvidedData } from '../track/types.js';
4
+ import '../track/gtag.js';
5
+
6
+ declare function getServerEvent(event: TrackEvent, data: UserProvidedData, appPackageName?: string): ServerEvent;
7
+ interface SendEventParams {
8
+ event: TrackEvent;
9
+ data: UserProvidedData;
10
+ appPackageName?: string;
11
+ }
12
+ declare function sendEvent(accessToken: string, pixelId: string, params: SendEventParams): Promise<facebook_nodejs_business_sdk.EventResponse>;
13
+ declare function sendTestEvent(accessToken: string, pixelId: string, testEventCode: string): Promise<facebook_nodejs_business_sdk.EventResponse>;
14
+
15
+ export { type SendEventParams, getServerEvent, sendEvent, sendTestEvent };
@@ -0,0 +1,227 @@
1
+ // src/server/conversions-api.ts
2
+ import {
3
+ AppData,
4
+ Content,
5
+ CustomData,
6
+ EventRequest,
7
+ ExtendedDeviceInfo,
8
+ ServerEvent,
9
+ UserData
10
+ } from "facebook-nodejs-business-sdk";
11
+ import { mapFBEvent } from "../track/fbq.mjs";
12
+ function getUserData(tags, data) {
13
+ const userData = new UserData();
14
+ if (data.email) {
15
+ Array.isArray(data.email) ? userData.setEmails(data.email) : userData.setEmail(data.email);
16
+ }
17
+ if (data.phone_number) {
18
+ Array.isArray(data.phone_number) ? userData.setPhones(data.phone_number) : userData.setPhone(data.phone_number);
19
+ }
20
+ if (data.gender) {
21
+ if (data.gender === "female") {
22
+ userData.setGender("f");
23
+ } else if (data.gender === "male") {
24
+ userData.setGender("m");
25
+ }
26
+ }
27
+ if (data.address) {
28
+ if (Array.isArray(data.address)) {
29
+ const firstNames = data.address.map((a) => a.first_name).filter(Boolean);
30
+ const lastNames = data.address.map((a) => a.last_name).filter(Boolean);
31
+ const cities = data.address.map((a) => a.city).filter(Boolean);
32
+ const states = data.address.map((a) => a.region).filter(Boolean);
33
+ const postalCodes = data.address.map((a) => a.postal_code).filter(Boolean);
34
+ const countries = data.address.map((a) => {
35
+ var _a;
36
+ return (_a = a.country) == null ? void 0 : _a.split(/[-_]/).at(0);
37
+ }).filter(Boolean);
38
+ userData.setFirstNames(firstNames);
39
+ userData.setLastNames(lastNames);
40
+ userData.setCities(cities);
41
+ userData.setStates(states);
42
+ userData.setZips(postalCodes);
43
+ userData.setCountries(countries);
44
+ } else {
45
+ if (data.address.first_name) {
46
+ userData.setFirstName(data.address.first_name);
47
+ userData.setF5First(data.address.first_name.slice(0, 5));
48
+ }
49
+ if (data.address.last_name) {
50
+ userData.setLastName(data.address.last_name);
51
+ userData.setF5Last(data.address.last_name.slice(0, 5));
52
+ }
53
+ if (data.address.city) userData.setCity(data.address.city);
54
+ if (data.address.region) userData.setState(data.address.region);
55
+ if (data.address.postal_code) userData.setZip(data.address.postal_code);
56
+ if (data.address.country) userData.setCountry(data.address.country.split(/[-_]/).at(0));
57
+ }
58
+ }
59
+ if (data.birthday) {
60
+ userData.setDoby(data.birthday.year.toString());
61
+ userData.setDobm(data.birthday.month.toString());
62
+ userData.setDobd(data.birthday.day.toString());
63
+ }
64
+ if (data.user_id && data.user_id.length !== 0) {
65
+ userData.setExternalId(data.user_id);
66
+ }
67
+ if (data.ip_address) {
68
+ userData.setClientIpAddress(data.ip_address);
69
+ }
70
+ if (data.user_agent) {
71
+ userData.setClientUserAgent(data.user_agent);
72
+ }
73
+ if (data.fb_login_id) {
74
+ userData.setFbLoginId(data.fb_login_id);
75
+ }
76
+ if (data.fb_page_id) {
77
+ userData.setPageId(data.fb_page_id);
78
+ }
79
+ if (tags.fbc) {
80
+ userData.setFbc(tags.fbc);
81
+ }
82
+ if (tags.fbp) {
83
+ userData.setFbp(tags.fbp);
84
+ }
85
+ if (tags.advertising_id) {
86
+ userData.setMadid(tags.advertising_id);
87
+ }
88
+ return userData;
89
+ }
90
+ function getAppData(tags, appPackageName) {
91
+ var _a;
92
+ const extinfo = new ExtendedDeviceInfo();
93
+ if (tags.os_name) {
94
+ if (tags.os_name === "iOS" || tags.os_name === "iPadOS") {
95
+ extinfo.setExtInfoVersion("i2");
96
+ } else if (tags.os_name === "Android") {
97
+ extinfo.setExtInfoVersion("a2");
98
+ }
99
+ }
100
+ extinfo.setAppPackageName(appPackageName);
101
+ const shortVersion = (_a = tags.release) == null ? void 0 : _a.split(".").at(0);
102
+ if (shortVersion) {
103
+ extinfo.setShortVersion(shortVersion);
104
+ }
105
+ if (tags.release) {
106
+ extinfo.setLongVersion(tags.release);
107
+ }
108
+ if (tags.os_version) {
109
+ extinfo.setOsVersion(tags.os_version);
110
+ }
111
+ if (tags.device_model_id) {
112
+ extinfo.setDeviceModelName(tags.device_model_id);
113
+ }
114
+ if (tags.language) {
115
+ extinfo.setLocale(tags.language);
116
+ }
117
+ if (tags.screen_width) {
118
+ extinfo.setScreenWidth(tags.screen_width);
119
+ }
120
+ if (tags.screen_height) {
121
+ extinfo.setScreenHeight(tags.screen_height);
122
+ }
123
+ if (tags.device_pixel_ratio) {
124
+ extinfo.setScreenDensity(tags.device_pixel_ratio);
125
+ }
126
+ const appData = new AppData();
127
+ appData.setExtinfo(extinfo);
128
+ if (tags.install_referrer) {
129
+ appData.setInstallReferrer(tags.install_referrer);
130
+ }
131
+ if (tags.advertising_id) {
132
+ appData.setAdvertiserTrackingEnabled(true);
133
+ }
134
+ return appData;
135
+ }
136
+ function getCustomData({ name, properties }) {
137
+ const data = new CustomData();
138
+ const [_, _name, fbEventProperties] = mapFBEvent(name, properties);
139
+ const {
140
+ value,
141
+ currency,
142
+ content_name,
143
+ content_category,
144
+ content_ids,
145
+ contents,
146
+ content_type,
147
+ // order_id,
148
+ predicted_ltv,
149
+ num_items,
150
+ search_string,
151
+ status,
152
+ // item_number,
153
+ delivery_category,
154
+ ...custom_properties
155
+ } = fbEventProperties;
156
+ if (value) data.setValue(value);
157
+ if (currency) data.setCurrency(currency);
158
+ if (content_name) data.setContentName(content_name);
159
+ if (content_category) data.setContentCategory(content_category);
160
+ if (content_ids) data.setContentIds(content_ids);
161
+ if (contents)
162
+ data.setContents(
163
+ contents.map((c) => {
164
+ const result = new Content().setId(c.id).setQuantity(c.quantity);
165
+ if (c.item_price) result.setItemPrice(c.item_price);
166
+ if (c.title) result.setTitle(c.title);
167
+ if (c.description) result.setDescription(c.description);
168
+ if (c.brand) result.setBrand(c.brand);
169
+ if (c.category) result.setCategory(c.category);
170
+ if (c.delivery_category) result.setDeliveryCategory(c.delivery_category);
171
+ return result;
172
+ })
173
+ );
174
+ if (content_type) data.setContentType(content_type);
175
+ if (predicted_ltv) data.setPredictedLtv(predicted_ltv);
176
+ if (num_items) data.setNumItems(num_items);
177
+ if (search_string) data.setSearchString(search_string);
178
+ if (status) data.setStatus(status.toString());
179
+ if (delivery_category) data.setDeliveryCategory(delivery_category);
180
+ if (custom_properties) data.setCustomProperties(custom_properties);
181
+ return data;
182
+ }
183
+ function getServerEvent(event, data, appPackageName) {
184
+ const userData = getUserData(event.tags, data);
185
+ const customData = getCustomData(event);
186
+ const serverEvent = new ServerEvent().setEventId(event.tags.idempotency_key ?? event.id.toString()).setEventName(event.name).setEventTime(Math.round(Date.now() / 1e3)).setUserData(userData).setCustomData(customData);
187
+ if (event.tags.source === "app" && appPackageName) {
188
+ const appData = getAppData(event.tags, appPackageName);
189
+ serverEvent.setAppData(appData);
190
+ }
191
+ if (event.tags.source_url) {
192
+ serverEvent.setEventSourceUrl(event.tags.source_url);
193
+ }
194
+ switch (event.tags.source) {
195
+ case "app":
196
+ serverEvent.setActionSource("app");
197
+ break;
198
+ case "web":
199
+ serverEvent.setActionSource("website");
200
+ break;
201
+ default:
202
+ break;
203
+ }
204
+ return serverEvent;
205
+ }
206
+ async function sendEvent(accessToken, pixelId, params) {
207
+ const { event, data, appPackageName } = params;
208
+ const request = new EventRequest(accessToken, pixelId);
209
+ request.setEvents([getServerEvent(event, data, appPackageName)]);
210
+ return request.execute();
211
+ }
212
+ async function sendTestEvent(accessToken, pixelId, testEventCode) {
213
+ const extinfo = new ExtendedDeviceInfo().setExtInfoVersion("a2").setAppPackageName("com.some.app").setShortVersion("771").setLongVersion("Version 7.7.1").setOsVersion("10.1.1").setDeviceModelName("OnePlus6").setLocale("en_US").setTimezoneAbbreviation("GMT-1").setCarrier("TMobile").setScreenWidth(1920).setScreenHeight(1080).setScreenDensity("2.00").setCpuCoreCount(2).setTotalDiskSpaceGb(128).setFreeDiskSpaceGb(8).setDeviceTimeZone("USA/New York");
214
+ const userData = new UserData().setEmail("test@example.com");
215
+ const appData = new AppData().setExtinfo(extinfo);
216
+ const event = new ServerEvent().setEventId(Math.round(Math.random() * 1e6).toString()).setEventName("TestEvent").setEventTime(Math.round(Date.now() / 1e3)).setUserData(userData).setAppData(appData).setActionSource("app");
217
+ const request = new EventRequest(accessToken, pixelId);
218
+ request.setTestEventCode(testEventCode);
219
+ request.setEvents([event]);
220
+ return request.execute();
221
+ }
222
+ export {
223
+ getServerEvent,
224
+ sendEvent,
225
+ sendTestEvent
226
+ };
227
+ //# sourceMappingURL=conversions-api.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/server/conversions-api.ts"],"sourcesContent":["import {\n AppData,\n Content,\n CustomData,\n EventRequest,\n ExtendedDeviceInfo,\n ServerEvent,\n UserData,\n} from 'facebook-nodejs-business-sdk';\nimport { mapFBEvent } from '../track/fbq';\nimport type { TrackEvent, TrackTags, UserProvidedData } from '../track/types';\n\nfunction getUserData(tags: TrackTags, data: UserProvidedData) {\n const userData = new UserData();\n\n // set user provided data\n if (data.email) {\n Array.isArray(data.email) ? userData.setEmails(data.email) : userData.setEmail(data.email);\n }\n if (data.phone_number) {\n Array.isArray(data.phone_number)\n ? userData.setPhones(data.phone_number)\n : userData.setPhone(data.phone_number);\n }\n if (data.gender) {\n if (data.gender === 'female') {\n userData.setGender('f');\n } else if (data.gender === 'male') {\n userData.setGender('m');\n }\n }\n if (data.address) {\n if (Array.isArray(data.address)) {\n const firstNames = data.address.map((a) => a.first_name).filter(Boolean);\n const lastNames = data.address.map((a) => a.last_name).filter(Boolean);\n const cities = data.address.map((a) => a.city).filter(Boolean);\n const states = data.address.map((a) => a.region).filter(Boolean);\n const postalCodes = data.address.map((a) => a.postal_code).filter(Boolean);\n const countries = data.address.map((a) => a.country?.split(/[-_]/).at(0)).filter(Boolean);\n userData.setFirstNames(firstNames as string[]);\n userData.setLastNames(lastNames as string[]);\n userData.setCities(cities as string[]);\n userData.setStates(states as string[]);\n userData.setZips(postalCodes as string[]);\n userData.setCountries(countries as string[]);\n } else {\n if (data.address.first_name) {\n userData.setFirstName(data.address.first_name);\n userData.setF5First(data.address.first_name.slice(0, 5));\n }\n if (data.address.last_name) {\n userData.setLastName(data.address.last_name);\n userData.setF5Last(data.address.last_name.slice(0, 5));\n }\n if (data.address.city) userData.setCity(data.address.city);\n if (data.address.region) userData.setState(data.address.region);\n if (data.address.postal_code) userData.setZip(data.address.postal_code);\n if (data.address.country) userData.setCountry(data.address.country.split(/[-_]/).at(0)!);\n }\n }\n if (data.birthday) {\n userData.setDoby(data.birthday.year.toString());\n userData.setDobm(data.birthday.month.toString());\n userData.setDobd(data.birthday.day.toString());\n }\n if (data.user_id && data.user_id.length !== 0) {\n userData.setExternalId(data.user_id);\n }\n if (data.ip_address) {\n userData.setClientIpAddress(data.ip_address);\n }\n if (data.user_agent) {\n userData.setClientUserAgent(data.user_agent);\n }\n if (data.fb_login_id) {\n userData.setFbLoginId(data.fb_login_id);\n }\n if (data.fb_page_id) {\n userData.setPageId(data.fb_page_id);\n }\n\n // set tags info\n if (tags.fbc) {\n userData.setFbc(tags.fbc);\n }\n if (tags.fbp) {\n userData.setFbp(tags.fbp);\n }\n if (tags.advertising_id) {\n userData.setMadid(tags.advertising_id);\n }\n\n return userData;\n}\n\nfunction getAppData(tags: TrackTags, appPackageName: string) {\n const extinfo = new ExtendedDeviceInfo();\n if (tags.os_name) {\n if (tags.os_name === 'iOS' || tags.os_name === 'iPadOS') {\n extinfo.setExtInfoVersion('i2');\n } else if (tags.os_name === 'Android') {\n extinfo.setExtInfoVersion('a2');\n }\n }\n extinfo.setAppPackageName(appPackageName);\n const shortVersion = tags.release?.split('.').at(0);\n if (shortVersion) {\n extinfo.setShortVersion(shortVersion);\n }\n if (tags.release) {\n extinfo.setLongVersion(tags.release);\n }\n if (tags.os_version) {\n extinfo.setOsVersion(tags.os_version);\n }\n if (tags.device_model_id) {\n extinfo.setDeviceModelName(tags.device_model_id);\n }\n if (tags.language) {\n extinfo.setLocale(tags.language);\n }\n if (tags.screen_width) {\n extinfo.setScreenWidth(tags.screen_width);\n }\n if (tags.screen_height) {\n extinfo.setScreenHeight(tags.screen_height);\n }\n if (tags.device_pixel_ratio) {\n extinfo.setScreenDensity(tags.device_pixel_ratio);\n }\n\n const appData = new AppData();\n appData.setExtinfo(extinfo);\n if (tags.install_referrer) {\n appData.setInstallReferrer(tags.install_referrer);\n }\n if (tags.advertising_id) {\n appData.setAdvertiserTrackingEnabled(true);\n }\n\n return appData;\n}\n\nfunction getCustomData({ name, properties }: TrackEvent) {\n const data = new CustomData();\n const [_, _name, fbEventProperties] = mapFBEvent(name, properties);\n const {\n value,\n currency,\n content_name,\n content_category,\n content_ids,\n contents,\n content_type,\n // order_id,\n predicted_ltv,\n num_items,\n search_string,\n status,\n // item_number,\n delivery_category,\n ...custom_properties\n } = fbEventProperties;\n if (value) data.setValue(value);\n if (currency) data.setCurrency(currency);\n if (content_name) data.setContentName(content_name);\n if (content_category) data.setContentCategory(content_category);\n if (content_ids) data.setContentIds(content_ids);\n if (contents)\n data.setContents(\n contents.map((c) => {\n const result = new Content().setId(c.id).setQuantity(c.quantity);\n if (c.item_price) result.setItemPrice(c.item_price);\n if (c.title) result.setTitle(c.title);\n if (c.description) result.setDescription(c.description);\n if (c.brand) result.setBrand(c.brand);\n if (c.category) result.setCategory(c.category);\n if (c.delivery_category) result.setDeliveryCategory(c.delivery_category);\n return result;\n })\n );\n if (content_type) data.setContentType(content_type);\n // if (order_id) data.setOrderId(order_id);\n if (predicted_ltv) data.setPredictedLtv(predicted_ltv);\n if (num_items) data.setNumItems(num_items);\n if (search_string) data.setSearchString(search_string);\n if (status) data.setStatus(status.toString());\n // if (item_number) data.setItemNumber(item_number);\n if (delivery_category) data.setDeliveryCategory(delivery_category);\n if (custom_properties) data.setCustomProperties(custom_properties);\n return data;\n}\n\nexport function getServerEvent(event: TrackEvent, data: UserProvidedData, appPackageName?: string) {\n const userData = getUserData(event.tags, data);\n const customData = getCustomData(event);\n const serverEvent = new ServerEvent()\n .setEventId(event.tags.idempotency_key ?? event.id.toString())\n .setEventName(event.name)\n .setEventTime(Math.round(Date.now() / 1000))\n .setUserData(userData)\n .setCustomData(customData);\n\n if (event.tags.source === 'app' && appPackageName) {\n const appData = getAppData(event.tags, appPackageName);\n serverEvent.setAppData(appData);\n }\n if (event.tags.source_url) {\n serverEvent.setEventSourceUrl(event.tags.source_url);\n }\n switch (event.tags.source) {\n case 'app':\n serverEvent.setActionSource('app');\n break;\n case 'web':\n serverEvent.setActionSource('website');\n break;\n default:\n break;\n }\n return serverEvent;\n}\n\nexport interface SendEventParams {\n event: TrackEvent;\n data: UserProvidedData;\n appPackageName?: string;\n}\n\nexport async function sendEvent(accessToken: string, pixelId: string, params: SendEventParams) {\n const { event, data, appPackageName } = params;\n const request = new EventRequest(accessToken, pixelId);\n request.setEvents([getServerEvent(event, data, appPackageName)]);\n return request.execute();\n}\n\nexport async function sendTestEvent(accessToken: string, pixelId: string, testEventCode: string) {\n const extinfo = new ExtendedDeviceInfo()\n .setExtInfoVersion('a2')\n .setAppPackageName('com.some.app')\n .setShortVersion('771')\n .setLongVersion('Version 7.7.1')\n .setOsVersion('10.1.1')\n .setDeviceModelName('OnePlus6')\n .setLocale('en_US')\n .setTimezoneAbbreviation('GMT-1')\n .setCarrier('TMobile')\n .setScreenWidth(1920)\n .setScreenHeight(1080)\n .setScreenDensity('2.00')\n .setCpuCoreCount(2)\n .setTotalDiskSpaceGb(128)\n .setFreeDiskSpaceGb(8)\n .setDeviceTimeZone('USA/New York');\n\n const userData = new UserData().setEmail('test@example.com');\n const appData = new AppData().setExtinfo(extinfo);\n const event = new ServerEvent()\n .setEventId(Math.round(Math.random() * 1000_000).toString())\n .setEventName('TestEvent')\n .setEventTime(Math.round(Date.now() / 1000))\n .setUserData(userData)\n .setAppData(appData)\n .setActionSource('app');\n\n const request = new EventRequest(accessToken, pixelId);\n request.setTestEventCode(testEventCode);\n request.setEvents([event]);\n return request.execute();\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport retry from 'axios-retry';\nimport { ThirdPartyTracker, ThirdPartyUserSetter, TrackTags } from '../types/index';\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 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 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 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.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;AA4BX,IAAM,SAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,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,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 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 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 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 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.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;AA6BX,IAAM,SAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,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,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,5 +1,7 @@
1
1
  import { AxiosInstance } from 'axios';
2
- import { TrackTags, ThirdPartyTracker, ThirdPartyUserSetter } from '../types/index.cjs';
2
+ import { TrackTags, ThirdPartyTracker } from '../track/types.cjs';
3
+ import { ThirdPartyUserSetter } from '../visitor/types.cjs';
4
+ import '../track/gtag.cjs';
3
5
 
4
6
  interface Storage {
5
7
  getItem: (key: string) => (string | null) | Promise<string | null>;
@@ -1,5 +1,7 @@
1
1
  import { AxiosInstance } from 'axios';
2
- import { TrackTags, ThirdPartyTracker, ThirdPartyUserSetter } from '../types/index.js';
2
+ import { TrackTags, ThirdPartyTracker } from '../track/types.js';
3
+ import { ThirdPartyUserSetter } from '../visitor/types.js';
4
+ import '../track/gtag.js';
3
5
 
4
6
  interface Storage {
5
7
  getItem: (key: string) => (string | null) | Promise<string | null>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/setup/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport retry from 'axios-retry';\nimport { ThirdPartyTracker, ThirdPartyUserSetter, TrackTags } from '../types/index';\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 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 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 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.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;AA4BX,IAAM,SAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,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,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 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 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 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 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.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;AA6BX,IAAM,SAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,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,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":[]}