@driveflux/web-analytics 1.2.0 → 1.3.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.
- package/dist/cjs/package.json +3 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +17 -0
- package/dist/track-server.d.ts +9 -0
- package/dist/track-server.d.ts.map +1 -0
- package/dist/track-server.js +299 -0
- package/dist/track.d.ts +1 -20
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +2 -138
- package/dist/types.d.ts +40 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +276 -0
- package/package.json +8 -1
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type Config = {
|
|
2
|
+
ga: {
|
|
3
|
+
measurementId: string;
|
|
4
|
+
apiSecret: string;
|
|
5
|
+
};
|
|
6
|
+
};
|
|
7
|
+
export declare let config: Config;
|
|
8
|
+
export declare const resetConfig: () => Config;
|
|
9
|
+
export declare const setConfig: <Key extends keyof Config>(key: Key, value: Config[Key]) => void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,KAAK,MAAM,GAAG;IACb,EAAE,EAAE;QACH,aAAa,EAAE,MAAM,CAAA;QACrB,SAAS,EAAE,MAAM,CAAA;KACjB,CAAA;CACD,CAAA;AASD,eAAO,IAAI,MAAM,EAAE,MAAqD,CAAA;AAExE,eAAO,MAAM,WAAW,cAGvB,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,GAAG,SAAS,MAAM,MAAM,OAC5C,GAAG,SACD,MAAM,CAAC,GAAG,CAAC,SAGlB,CAAA"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { singleton } from '@driveflux/singleton';
|
|
2
|
+
var getConfig = function() {
|
|
3
|
+
return {
|
|
4
|
+
ga: {
|
|
5
|
+
measurementId: process.env.GA_MEASUREMENT_ID,
|
|
6
|
+
apiSecret: process.env.GA_API_SECRET
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export var config = singleton('webAnalyticsConfig', getConfig());
|
|
11
|
+
export var resetConfig = function() {
|
|
12
|
+
config = singleton('webAnalyticsConfig', getConfig(), true);
|
|
13
|
+
return config;
|
|
14
|
+
};
|
|
15
|
+
export var setConfig = function(key, value) {
|
|
16
|
+
config[key] = value;
|
|
17
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './config.js';
|
|
2
|
+
import type { JsonObject } from 'type-fest';
|
|
3
|
+
import type { ServerUserData } from './types.js';
|
|
4
|
+
export declare const trackServerMultiple: (user: ServerUserData, events: {
|
|
5
|
+
name: string;
|
|
6
|
+
data?: JsonObject;
|
|
7
|
+
}[]) => Promise<void>;
|
|
8
|
+
export declare const trackServer: (user: ServerUserData, name: string, data?: JsonObject) => Promise<void>;
|
|
9
|
+
//# sourceMappingURL=track-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-server.d.ts","sourceRoot":"","sources":["../src/track-server.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAE3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,eAAO,MAAM,mBAAmB,SACzB,cAAc,UACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,EAAE,kBAuE7C,CAAA;AAED,eAAO,MAAM,WAAW,SACjB,cAAc,QACd,MAAM,SACL,UAAU,kBAC8B,CAAA"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
2
|
+
try {
|
|
3
|
+
var info = gen[key](arg);
|
|
4
|
+
var value = info.value;
|
|
5
|
+
} catch (error) {
|
|
6
|
+
reject(error);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (info.done) {
|
|
10
|
+
resolve(value);
|
|
11
|
+
} else {
|
|
12
|
+
Promise.resolve(value).then(_next, _throw);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function _async_to_generator(fn) {
|
|
16
|
+
return function() {
|
|
17
|
+
var self = this, args = arguments;
|
|
18
|
+
return new Promise(function(resolve, reject) {
|
|
19
|
+
var gen = fn.apply(self, args);
|
|
20
|
+
function _next(value) {
|
|
21
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
22
|
+
}
|
|
23
|
+
function _throw(err) {
|
|
24
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
25
|
+
}
|
|
26
|
+
_next(undefined);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function _define_property(obj, key, value) {
|
|
31
|
+
if (key in obj) {
|
|
32
|
+
Object.defineProperty(obj, key, {
|
|
33
|
+
value: value,
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
writable: true
|
|
37
|
+
});
|
|
38
|
+
} else {
|
|
39
|
+
obj[key] = value;
|
|
40
|
+
}
|
|
41
|
+
return obj;
|
|
42
|
+
}
|
|
43
|
+
function _object_spread(target) {
|
|
44
|
+
for(var i = 1; i < arguments.length; i++){
|
|
45
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
46
|
+
var ownKeys = Object.keys(source);
|
|
47
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
48
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
49
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
ownKeys.forEach(function(key) {
|
|
53
|
+
_define_property(target, key, source[key]);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return target;
|
|
57
|
+
}
|
|
58
|
+
function ownKeys(object, enumerableOnly) {
|
|
59
|
+
var keys = Object.keys(object);
|
|
60
|
+
if (Object.getOwnPropertySymbols) {
|
|
61
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
62
|
+
if (enumerableOnly) {
|
|
63
|
+
symbols = symbols.filter(function(sym) {
|
|
64
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
keys.push.apply(keys, symbols);
|
|
68
|
+
}
|
|
69
|
+
return keys;
|
|
70
|
+
}
|
|
71
|
+
function _object_spread_props(target, source) {
|
|
72
|
+
source = source != null ? source : {};
|
|
73
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
74
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
75
|
+
} else {
|
|
76
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
77
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return target;
|
|
81
|
+
}
|
|
82
|
+
function _ts_generator(thisArg, body) {
|
|
83
|
+
var f, y, t, g, _ = {
|
|
84
|
+
label: 0,
|
|
85
|
+
sent: function() {
|
|
86
|
+
if (t[0] & 1) throw t[1];
|
|
87
|
+
return t[1];
|
|
88
|
+
},
|
|
89
|
+
trys: [],
|
|
90
|
+
ops: []
|
|
91
|
+
};
|
|
92
|
+
return g = {
|
|
93
|
+
next: verb(0),
|
|
94
|
+
"throw": verb(1),
|
|
95
|
+
"return": verb(2)
|
|
96
|
+
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
97
|
+
return this;
|
|
98
|
+
}), g;
|
|
99
|
+
function verb(n) {
|
|
100
|
+
return function(v) {
|
|
101
|
+
return step([
|
|
102
|
+
n,
|
|
103
|
+
v
|
|
104
|
+
]);
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function step(op) {
|
|
108
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
109
|
+
while(_)try {
|
|
110
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
111
|
+
if (y = 0, t) op = [
|
|
112
|
+
op[0] & 2,
|
|
113
|
+
t.value
|
|
114
|
+
];
|
|
115
|
+
switch(op[0]){
|
|
116
|
+
case 0:
|
|
117
|
+
case 1:
|
|
118
|
+
t = op;
|
|
119
|
+
break;
|
|
120
|
+
case 4:
|
|
121
|
+
_.label++;
|
|
122
|
+
return {
|
|
123
|
+
value: op[1],
|
|
124
|
+
done: false
|
|
125
|
+
};
|
|
126
|
+
case 5:
|
|
127
|
+
_.label++;
|
|
128
|
+
y = op[1];
|
|
129
|
+
op = [
|
|
130
|
+
0
|
|
131
|
+
];
|
|
132
|
+
continue;
|
|
133
|
+
case 7:
|
|
134
|
+
op = _.ops.pop();
|
|
135
|
+
_.trys.pop();
|
|
136
|
+
continue;
|
|
137
|
+
default:
|
|
138
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
139
|
+
_ = 0;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
143
|
+
_.label = op[1];
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
147
|
+
_.label = t[1];
|
|
148
|
+
t = op;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
if (t && _.label < t[2]) {
|
|
152
|
+
_.label = t[2];
|
|
153
|
+
_.ops.push(op);
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
if (t[2]) _.ops.pop();
|
|
157
|
+
_.trys.pop();
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
op = body.call(thisArg, _);
|
|
161
|
+
} catch (e) {
|
|
162
|
+
op = [
|
|
163
|
+
6,
|
|
164
|
+
e
|
|
165
|
+
];
|
|
166
|
+
y = 0;
|
|
167
|
+
} finally{
|
|
168
|
+
f = t = 0;
|
|
169
|
+
}
|
|
170
|
+
if (op[0] & 5) throw op[1];
|
|
171
|
+
return {
|
|
172
|
+
value: op[0] ? op[1] : void 0,
|
|
173
|
+
done: true
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export * from './config.js';
|
|
178
|
+
import { enhancedFetch } from '@driveflux/fetch';
|
|
179
|
+
import { config } from './config';
|
|
180
|
+
import { convertUserData, extractGA4ClientId, extractGA4SessionId, getCurrentTimestampMicros } from './utils.js';
|
|
181
|
+
export var trackServerMultiple = function() {
|
|
182
|
+
var _ref = _async_to_generator(function(user, events) {
|
|
183
|
+
var filtered, _events_, _events_1, _events_2, measurementId, apiSecret, clientId, sessionId, userData, _tmp, _tmp1, url, payload;
|
|
184
|
+
return _ts_generator(this, function(_state) {
|
|
185
|
+
switch(_state.label){
|
|
186
|
+
case 0:
|
|
187
|
+
if (events.length > 1) {
|
|
188
|
+
console.log('🚨🚨🚨🗄️ firing multiple server events', events);
|
|
189
|
+
filtered = events.filter(function(e) {
|
|
190
|
+
return !!e.name;
|
|
191
|
+
});
|
|
192
|
+
if (filtered.length !== events.length) {
|
|
193
|
+
console.log('Not all events have names');
|
|
194
|
+
return [
|
|
195
|
+
2
|
|
196
|
+
];
|
|
197
|
+
}
|
|
198
|
+
} else {
|
|
199
|
+
;
|
|
200
|
+
console.log('🚨🚨🚨🗄️ firing server event', events === null || events === void 0 ? void 0 : (_events_ = events[0]) === null || _events_ === void 0 ? void 0 : _events_.name, events === null || events === void 0 ? void 0 : (_events_1 = events[0]) === null || _events_1 === void 0 ? void 0 : _events_1.data);
|
|
201
|
+
if (!(events === null || events === void 0 ? void 0 : (_events_2 = events[0]) === null || _events_2 === void 0 ? void 0 : _events_2.name)) {
|
|
202
|
+
console.error('The name of the event is missing');
|
|
203
|
+
return [
|
|
204
|
+
2
|
|
205
|
+
];
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
measurementId = config.ga.measurementId;
|
|
209
|
+
apiSecret = config.ga.apiSecret;
|
|
210
|
+
if (!measurementId || !apiSecret) {
|
|
211
|
+
console.log('The configuration is not set up correctly.');
|
|
212
|
+
return [
|
|
213
|
+
2
|
|
214
|
+
];
|
|
215
|
+
}
|
|
216
|
+
clientId = extractGA4ClientId(user.clientIdCookie);
|
|
217
|
+
sessionId = extractGA4SessionId(user.sessionIdCookie);
|
|
218
|
+
if (!clientId || !sessionId) {
|
|
219
|
+
console.log('The user client id or session id are not provided');
|
|
220
|
+
return [
|
|
221
|
+
2
|
|
222
|
+
];
|
|
223
|
+
}
|
|
224
|
+
if (!user.data) return [
|
|
225
|
+
3,
|
|
226
|
+
2
|
|
227
|
+
];
|
|
228
|
+
_tmp1 = {};
|
|
229
|
+
return [
|
|
230
|
+
4,
|
|
231
|
+
convertUserData(user.data)
|
|
232
|
+
];
|
|
233
|
+
case 1:
|
|
234
|
+
_tmp = (_tmp1.user_data = _state.sent(), _tmp1);
|
|
235
|
+
return [
|
|
236
|
+
3,
|
|
237
|
+
3
|
|
238
|
+
];
|
|
239
|
+
case 2:
|
|
240
|
+
_tmp = {};
|
|
241
|
+
_state.label = 3;
|
|
242
|
+
case 3:
|
|
243
|
+
userData = _tmp;
|
|
244
|
+
url = "https://www.google-analytics.com/mp/collect?measurement_id=".concat(measurementId, "&api_secret=").concat(apiSecret);
|
|
245
|
+
payload = {
|
|
246
|
+
client_id: clientId,
|
|
247
|
+
timestamp_micros: getCurrentTimestampMicros(),
|
|
248
|
+
events: events.map(function(e) {
|
|
249
|
+
if (e.name) {
|
|
250
|
+
return {
|
|
251
|
+
name: e.name,
|
|
252
|
+
params: _object_spread_props(_object_spread({}, userData, e.data), {
|
|
253
|
+
session_id: sessionId
|
|
254
|
+
})
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
return null;
|
|
258
|
+
})
|
|
259
|
+
};
|
|
260
|
+
return [
|
|
261
|
+
4,
|
|
262
|
+
enhancedFetch(url, {
|
|
263
|
+
method: 'POST',
|
|
264
|
+
headers: {
|
|
265
|
+
'Content-Type': 'application/json'
|
|
266
|
+
},
|
|
267
|
+
body: JSON.stringify(payload)
|
|
268
|
+
})
|
|
269
|
+
];
|
|
270
|
+
case 4:
|
|
271
|
+
_state.sent();
|
|
272
|
+
return [
|
|
273
|
+
2
|
|
274
|
+
];
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
return function trackServerMultiple(user, events) {
|
|
279
|
+
return _ref.apply(this, arguments);
|
|
280
|
+
};
|
|
281
|
+
}();
|
|
282
|
+
export var trackServer = function() {
|
|
283
|
+
var _ref = _async_to_generator(function(user, name, data) {
|
|
284
|
+
return _ts_generator(this, function(_state) {
|
|
285
|
+
return [
|
|
286
|
+
2,
|
|
287
|
+
trackServerMultiple(user, [
|
|
288
|
+
{
|
|
289
|
+
name: name,
|
|
290
|
+
data: data
|
|
291
|
+
}
|
|
292
|
+
])
|
|
293
|
+
];
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
return function trackServer(user, name, data) {
|
|
297
|
+
return _ref.apply(this, arguments);
|
|
298
|
+
};
|
|
299
|
+
}();
|
package/dist/track.d.ts
CHANGED
|
@@ -1,29 +1,10 @@
|
|
|
1
|
+
import type { UserLikeData } from './types';
|
|
1
2
|
declare global {
|
|
2
3
|
interface Window {
|
|
3
4
|
fluxDataLayer?: object[];
|
|
4
5
|
}
|
|
5
6
|
}
|
|
6
7
|
type ClearMode = 'clearItems';
|
|
7
|
-
interface Address {
|
|
8
|
-
name?: string | null;
|
|
9
|
-
street1: string;
|
|
10
|
-
street2?: string | null;
|
|
11
|
-
city: string;
|
|
12
|
-
state: string;
|
|
13
|
-
country: string;
|
|
14
|
-
postalCode: string;
|
|
15
|
-
}
|
|
16
|
-
interface UserLikeData {
|
|
17
|
-
id: string;
|
|
18
|
-
email: string;
|
|
19
|
-
phoneNumber?: string | null;
|
|
20
|
-
firstName?: string | null;
|
|
21
|
-
lastName?: string | null;
|
|
22
|
-
addresses?: {
|
|
23
|
-
home?: Address | null;
|
|
24
|
-
billing?: Address | null;
|
|
25
|
-
} | null;
|
|
26
|
-
}
|
|
27
8
|
export declare function getGA4ClientId(): string | null;
|
|
28
9
|
export declare const safeSendGTMEvent: (event: Record<string, any>) => Promise<void>;
|
|
29
10
|
export declare const useTrackEvent: () => {
|
package/dist/track.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,YAAY,EAAE,MAAM,SAAS,CAAA;AAG7D,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KACxB;CACD;AAED,KAAK,SAAS,GAAG,YAAY,CAAA;AAa7B,wBAAgB,cAAc,kBAW7B;AAED,eAAO,MAAM,gBAAgB,UAAiB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,kBAOhE,CAAA;AAED,eAAO,MAAM,aAAa;uBAKZ,MAAM,cACL,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,cACnB,SAAS;6BA4B2B,YAAY;CAkC9D,CAAA;AAED,eAAO,MAAM,iBAAiB,cAClB,MAAM,cACL,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAmC/B,CAAA"}
|
package/dist/track.js
CHANGED
|
@@ -178,7 +178,7 @@ function _ts_generator(thisArg, body) {
|
|
|
178
178
|
import { sendGTMEvent } from '@next/third-parties/google';
|
|
179
179
|
import isEqual from 'lodash/isEqual.js';
|
|
180
180
|
import { useCallback, useEffect, useRef } from 'react';
|
|
181
|
-
|
|
181
|
+
import { convertUserData, extractGA4ClientId } from './utils';
|
|
182
182
|
var eventsQueue = new Set();
|
|
183
183
|
var TIMEOUT_TO_CLEAR_EVENTS = 500;
|
|
184
184
|
var drainEvents = function() {
|
|
@@ -214,147 +214,11 @@ export function getGA4ClientId() {
|
|
|
214
214
|
return cookie.trim().startsWith('_ga=');
|
|
215
215
|
});
|
|
216
216
|
if (gaCookie) {
|
|
217
|
-
|
|
218
|
-
if (matches.length > 2) {
|
|
219
|
-
return "".concat(matches[2], ".").concat(matches[3]) // Returns the GA4 client ID
|
|
220
|
-
;
|
|
221
|
-
}
|
|
217
|
+
return extractGA4ClientId(gaCookie);
|
|
222
218
|
}
|
|
223
219
|
return null // If no GA cookie is found or format is unexpected
|
|
224
220
|
;
|
|
225
221
|
}
|
|
226
|
-
function hashData(input) {
|
|
227
|
-
return _hashData.apply(this, arguments);
|
|
228
|
-
}
|
|
229
|
-
function _hashData() {
|
|
230
|
-
_hashData = _async_to_generator(function(input) {
|
|
231
|
-
var encoder, data, hashBuffer, hashArray, hashHex;
|
|
232
|
-
return _ts_generator(this, function(_state) {
|
|
233
|
-
switch(_state.label){
|
|
234
|
-
case 0:
|
|
235
|
-
encoder = new TextEncoder();
|
|
236
|
-
data = encoder.encode(input);
|
|
237
|
-
return [
|
|
238
|
-
4,
|
|
239
|
-
crypto.subtle.digest('SHA-256', data)
|
|
240
|
-
];
|
|
241
|
-
case 1:
|
|
242
|
-
hashBuffer = _state.sent();
|
|
243
|
-
hashArray = Array.from(new Uint8Array(hashBuffer)) // Convert buffer to byte array
|
|
244
|
-
;
|
|
245
|
-
hashHex = hashArray.map(function(b) {
|
|
246
|
-
return b.toString(16).padStart(2, '0');
|
|
247
|
-
}).join('') // Convert bytes to hex string
|
|
248
|
-
;
|
|
249
|
-
return [
|
|
250
|
-
2,
|
|
251
|
-
hashHex
|
|
252
|
-
];
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
return _hashData.apply(this, arguments);
|
|
257
|
-
}
|
|
258
|
-
var convertUserData = function() {
|
|
259
|
-
var _ref = _async_to_generator(function(dataInput) {
|
|
260
|
-
var _dataInput_addresses, _dataInput_addresses1, userAddress, _tmp, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5;
|
|
261
|
-
return _ts_generator(this, function(_state) {
|
|
262
|
-
switch(_state.label){
|
|
263
|
-
case 0:
|
|
264
|
-
userAddress = ((_dataInput_addresses = dataInput.addresses) === null || _dataInput_addresses === void 0 ? void 0 : _dataInput_addresses.home) || ((_dataInput_addresses1 = dataInput.addresses) === null || _dataInput_addresses1 === void 0 ? void 0 : _dataInput_addresses1.billing);
|
|
265
|
-
_tmp = {
|
|
266
|
-
user_id: dataInput.id
|
|
267
|
-
};
|
|
268
|
-
return [
|
|
269
|
-
4,
|
|
270
|
-
hashData(dataInput.email)
|
|
271
|
-
];
|
|
272
|
-
case 1:
|
|
273
|
-
_tmp.email = _state.sent();
|
|
274
|
-
if (!dataInput.phoneNumber) return [
|
|
275
|
-
3,
|
|
276
|
-
3
|
|
277
|
-
];
|
|
278
|
-
return [
|
|
279
|
-
4,
|
|
280
|
-
hashData(dataInput.phoneNumber)
|
|
281
|
-
];
|
|
282
|
-
case 2:
|
|
283
|
-
_tmp1 = _state.sent();
|
|
284
|
-
return [
|
|
285
|
-
3,
|
|
286
|
-
4
|
|
287
|
-
];
|
|
288
|
-
case 3:
|
|
289
|
-
_tmp1 = undefined;
|
|
290
|
-
_state.label = 4;
|
|
291
|
-
case 4:
|
|
292
|
-
_tmp.phone_number = _tmp1;
|
|
293
|
-
if (!userAddress) return [
|
|
294
|
-
3,
|
|
295
|
-
11
|
|
296
|
-
];
|
|
297
|
-
_tmp3 = {};
|
|
298
|
-
if (!dataInput.firstName) return [
|
|
299
|
-
3,
|
|
300
|
-
6
|
|
301
|
-
];
|
|
302
|
-
return [
|
|
303
|
-
4,
|
|
304
|
-
hashData(dataInput.firstName)
|
|
305
|
-
];
|
|
306
|
-
case 5:
|
|
307
|
-
_tmp4 = _state.sent();
|
|
308
|
-
return [
|
|
309
|
-
3,
|
|
310
|
-
7
|
|
311
|
-
];
|
|
312
|
-
case 6:
|
|
313
|
-
_tmp4 = undefined;
|
|
314
|
-
_state.label = 7;
|
|
315
|
-
case 7:
|
|
316
|
-
_tmp3.first_name = _tmp4;
|
|
317
|
-
if (!dataInput.lastName) return [
|
|
318
|
-
3,
|
|
319
|
-
9
|
|
320
|
-
];
|
|
321
|
-
return [
|
|
322
|
-
4,
|
|
323
|
-
hashData(dataInput.lastName)
|
|
324
|
-
];
|
|
325
|
-
case 8:
|
|
326
|
-
_tmp5 = _state.sent();
|
|
327
|
-
return [
|
|
328
|
-
3,
|
|
329
|
-
10
|
|
330
|
-
];
|
|
331
|
-
case 9:
|
|
332
|
-
_tmp5 = undefined;
|
|
333
|
-
_state.label = 10;
|
|
334
|
-
case 10:
|
|
335
|
-
_tmp2 = (_tmp3.last_name = _tmp5, _tmp3.street = [
|
|
336
|
-
userAddress.street1,
|
|
337
|
-
userAddress.street2
|
|
338
|
-
].join(', '), _tmp3.city = userAddress.city, _tmp3.region = userAddress.state, _tmp3.postal_code = userAddress.postalCode, _tmp3.country = userAddress.country, _tmp3);
|
|
339
|
-
return [
|
|
340
|
-
3,
|
|
341
|
-
12
|
|
342
|
-
];
|
|
343
|
-
case 11:
|
|
344
|
-
_tmp2 = undefined;
|
|
345
|
-
_state.label = 12;
|
|
346
|
-
case 12:
|
|
347
|
-
return [
|
|
348
|
-
2,
|
|
349
|
-
(_tmp.address = _tmp2, _tmp)
|
|
350
|
-
];
|
|
351
|
-
}
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
return function convertUserData(dataInput) {
|
|
355
|
-
return _ref.apply(this, arguments);
|
|
356
|
-
};
|
|
357
|
-
}();
|
|
358
222
|
export var safeSendGTMEvent = function() {
|
|
359
223
|
var _ref = _async_to_generator(function(event) {
|
|
360
224
|
return _ts_generator(this, function(_state) {
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface Address {
|
|
2
|
+
name?: string | null;
|
|
3
|
+
street1: string;
|
|
4
|
+
street2?: string | null;
|
|
5
|
+
city: string;
|
|
6
|
+
state: string;
|
|
7
|
+
country: string;
|
|
8
|
+
postalCode: string;
|
|
9
|
+
}
|
|
10
|
+
export interface UserLikeData {
|
|
11
|
+
id: string;
|
|
12
|
+
email: string;
|
|
13
|
+
phoneNumber?: string | null;
|
|
14
|
+
firstName?: string | null;
|
|
15
|
+
lastName?: string | null;
|
|
16
|
+
addresses?: {
|
|
17
|
+
home?: Address | null;
|
|
18
|
+
billing?: Address | null;
|
|
19
|
+
} | null;
|
|
20
|
+
}
|
|
21
|
+
export interface TrackingUserData {
|
|
22
|
+
user_id: string;
|
|
23
|
+
email: string;
|
|
24
|
+
phone_number?: string;
|
|
25
|
+
address?: {
|
|
26
|
+
first_name?: string;
|
|
27
|
+
last_name?: string;
|
|
28
|
+
street?: string;
|
|
29
|
+
city?: string;
|
|
30
|
+
region?: string;
|
|
31
|
+
postal_code?: string;
|
|
32
|
+
country?: string;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface ServerUserData {
|
|
36
|
+
clientIdCookie: string;
|
|
37
|
+
sessionIdCookie: string;
|
|
38
|
+
data?: UserLikeData;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;QACrB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;KACxB,GAAG,IAAI,CAAA;CACR;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACD;AAED,MAAM,WAAW,cAAc;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,YAAY,CAAA;CACnB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TrackingUserData, UserLikeData } from './types';
|
|
2
|
+
export declare function hashData(input: string): Promise<string>;
|
|
3
|
+
export declare const getCurrentTimestampMicros: () => string;
|
|
4
|
+
export declare const extractGA4ClientId: (gaCookie: string) => string | null;
|
|
5
|
+
export declare const extractGA4SessionId: (gaCookie: string) => number | null;
|
|
6
|
+
export declare const convertUserData: (dataInput: UserLikeData) => Promise<TrackingUserData>;
|
|
7
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE7D,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,mBAO3C;AAED,eAAO,MAAM,yBAAyB,QAAO,MAK5C,CAAA;AAED,eAAO,MAAM,kBAAkB,aAAc,MAAM,kBAMlD,CAAA;AAED,eAAO,MAAM,mBAAmB,aAAc,MAAM,kBAMnD,CAAA;AAED,eAAO,MAAM,eAAe,cAChB,YAAY,KACrB,OAAO,CAAC,gBAAgB,CAwB1B,CAAA"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
2
|
+
try {
|
|
3
|
+
var info = gen[key](arg);
|
|
4
|
+
var value = info.value;
|
|
5
|
+
} catch (error) {
|
|
6
|
+
reject(error);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (info.done) {
|
|
10
|
+
resolve(value);
|
|
11
|
+
} else {
|
|
12
|
+
Promise.resolve(value).then(_next, _throw);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function _async_to_generator(fn) {
|
|
16
|
+
return function() {
|
|
17
|
+
var self = this, args = arguments;
|
|
18
|
+
return new Promise(function(resolve, reject) {
|
|
19
|
+
var gen = fn.apply(self, args);
|
|
20
|
+
function _next(value) {
|
|
21
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
22
|
+
}
|
|
23
|
+
function _throw(err) {
|
|
24
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
25
|
+
}
|
|
26
|
+
_next(undefined);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function _ts_generator(thisArg, body) {
|
|
31
|
+
var f, y, t, g, _ = {
|
|
32
|
+
label: 0,
|
|
33
|
+
sent: function() {
|
|
34
|
+
if (t[0] & 1) throw t[1];
|
|
35
|
+
return t[1];
|
|
36
|
+
},
|
|
37
|
+
trys: [],
|
|
38
|
+
ops: []
|
|
39
|
+
};
|
|
40
|
+
return g = {
|
|
41
|
+
next: verb(0),
|
|
42
|
+
"throw": verb(1),
|
|
43
|
+
"return": verb(2)
|
|
44
|
+
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
45
|
+
return this;
|
|
46
|
+
}), g;
|
|
47
|
+
function verb(n) {
|
|
48
|
+
return function(v) {
|
|
49
|
+
return step([
|
|
50
|
+
n,
|
|
51
|
+
v
|
|
52
|
+
]);
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function step(op) {
|
|
56
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
57
|
+
while(_)try {
|
|
58
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
59
|
+
if (y = 0, t) op = [
|
|
60
|
+
op[0] & 2,
|
|
61
|
+
t.value
|
|
62
|
+
];
|
|
63
|
+
switch(op[0]){
|
|
64
|
+
case 0:
|
|
65
|
+
case 1:
|
|
66
|
+
t = op;
|
|
67
|
+
break;
|
|
68
|
+
case 4:
|
|
69
|
+
_.label++;
|
|
70
|
+
return {
|
|
71
|
+
value: op[1],
|
|
72
|
+
done: false
|
|
73
|
+
};
|
|
74
|
+
case 5:
|
|
75
|
+
_.label++;
|
|
76
|
+
y = op[1];
|
|
77
|
+
op = [
|
|
78
|
+
0
|
|
79
|
+
];
|
|
80
|
+
continue;
|
|
81
|
+
case 7:
|
|
82
|
+
op = _.ops.pop();
|
|
83
|
+
_.trys.pop();
|
|
84
|
+
continue;
|
|
85
|
+
default:
|
|
86
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
87
|
+
_ = 0;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
91
|
+
_.label = op[1];
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
95
|
+
_.label = t[1];
|
|
96
|
+
t = op;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
if (t && _.label < t[2]) {
|
|
100
|
+
_.label = t[2];
|
|
101
|
+
_.ops.push(op);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (t[2]) _.ops.pop();
|
|
105
|
+
_.trys.pop();
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
op = body.call(thisArg, _);
|
|
109
|
+
} catch (e) {
|
|
110
|
+
op = [
|
|
111
|
+
6,
|
|
112
|
+
e
|
|
113
|
+
];
|
|
114
|
+
y = 0;
|
|
115
|
+
} finally{
|
|
116
|
+
f = t = 0;
|
|
117
|
+
}
|
|
118
|
+
if (op[0] & 5) throw op[1];
|
|
119
|
+
return {
|
|
120
|
+
value: op[0] ? op[1] : void 0,
|
|
121
|
+
done: true
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export function hashData(input) {
|
|
126
|
+
return _hashData.apply(this, arguments);
|
|
127
|
+
}
|
|
128
|
+
function _hashData() {
|
|
129
|
+
_hashData = _async_to_generator(function(input) {
|
|
130
|
+
var encoder, data, hashBuffer, hashArray, hashHex;
|
|
131
|
+
return _ts_generator(this, function(_state) {
|
|
132
|
+
switch(_state.label){
|
|
133
|
+
case 0:
|
|
134
|
+
encoder = new TextEncoder();
|
|
135
|
+
data = encoder.encode(input);
|
|
136
|
+
return [
|
|
137
|
+
4,
|
|
138
|
+
crypto.subtle.digest('SHA-256', data)
|
|
139
|
+
];
|
|
140
|
+
case 1:
|
|
141
|
+
hashBuffer = _state.sent();
|
|
142
|
+
hashArray = Array.from(new Uint8Array(hashBuffer)) // Convert buffer to byte array
|
|
143
|
+
;
|
|
144
|
+
hashHex = hashArray.map(function(b) {
|
|
145
|
+
return b.toString(16).padStart(2, '0');
|
|
146
|
+
}).join('') // Convert bytes to hex string
|
|
147
|
+
;
|
|
148
|
+
return [
|
|
149
|
+
2,
|
|
150
|
+
hashHex
|
|
151
|
+
];
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
return _hashData.apply(this, arguments);
|
|
156
|
+
}
|
|
157
|
+
export var getCurrentTimestampMicros = function() {
|
|
158
|
+
var now = new Date();
|
|
159
|
+
var epochMillis = now.getTime();
|
|
160
|
+
var epochMicros = epochMillis * 1000;
|
|
161
|
+
return epochMicros.toString();
|
|
162
|
+
};
|
|
163
|
+
export var extractGA4ClientId = function(gaCookie) {
|
|
164
|
+
var matches = gaCookie.split('.');
|
|
165
|
+
if (matches.length > 2) {
|
|
166
|
+
return "".concat(matches[2], ".").concat(matches[3]);
|
|
167
|
+
}
|
|
168
|
+
return null;
|
|
169
|
+
};
|
|
170
|
+
export var extractGA4SessionId = function(gaCookie) {
|
|
171
|
+
var matches = gaCookie.split('.');
|
|
172
|
+
if (matches.length > 2) {
|
|
173
|
+
return Number.parseInt("".concat(matches[2]));
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
};
|
|
177
|
+
export var convertUserData = function() {
|
|
178
|
+
var _ref = _async_to_generator(function(dataInput) {
|
|
179
|
+
var _dataInput_addresses, _dataInput_addresses1, userAddress, _tmp, _tmp1, _tmp2, _tmp3, _tmp4, _tmp5;
|
|
180
|
+
return _ts_generator(this, function(_state) {
|
|
181
|
+
switch(_state.label){
|
|
182
|
+
case 0:
|
|
183
|
+
userAddress = ((_dataInput_addresses = dataInput.addresses) === null || _dataInput_addresses === void 0 ? void 0 : _dataInput_addresses.home) || ((_dataInput_addresses1 = dataInput.addresses) === null || _dataInput_addresses1 === void 0 ? void 0 : _dataInput_addresses1.billing);
|
|
184
|
+
_tmp = {
|
|
185
|
+
user_id: dataInput.id
|
|
186
|
+
};
|
|
187
|
+
return [
|
|
188
|
+
4,
|
|
189
|
+
hashData(dataInput.email)
|
|
190
|
+
];
|
|
191
|
+
case 1:
|
|
192
|
+
_tmp.email = _state.sent();
|
|
193
|
+
if (!dataInput.phoneNumber) return [
|
|
194
|
+
3,
|
|
195
|
+
3
|
|
196
|
+
];
|
|
197
|
+
return [
|
|
198
|
+
4,
|
|
199
|
+
hashData(dataInput.phoneNumber)
|
|
200
|
+
];
|
|
201
|
+
case 2:
|
|
202
|
+
_tmp1 = _state.sent();
|
|
203
|
+
return [
|
|
204
|
+
3,
|
|
205
|
+
4
|
|
206
|
+
];
|
|
207
|
+
case 3:
|
|
208
|
+
_tmp1 = undefined;
|
|
209
|
+
_state.label = 4;
|
|
210
|
+
case 4:
|
|
211
|
+
_tmp.phone_number = _tmp1;
|
|
212
|
+
if (!userAddress) return [
|
|
213
|
+
3,
|
|
214
|
+
11
|
|
215
|
+
];
|
|
216
|
+
_tmp3 = {};
|
|
217
|
+
if (!dataInput.firstName) return [
|
|
218
|
+
3,
|
|
219
|
+
6
|
|
220
|
+
];
|
|
221
|
+
return [
|
|
222
|
+
4,
|
|
223
|
+
hashData(dataInput.firstName)
|
|
224
|
+
];
|
|
225
|
+
case 5:
|
|
226
|
+
_tmp4 = _state.sent();
|
|
227
|
+
return [
|
|
228
|
+
3,
|
|
229
|
+
7
|
|
230
|
+
];
|
|
231
|
+
case 6:
|
|
232
|
+
_tmp4 = undefined;
|
|
233
|
+
_state.label = 7;
|
|
234
|
+
case 7:
|
|
235
|
+
_tmp3.first_name = _tmp4;
|
|
236
|
+
if (!dataInput.lastName) return [
|
|
237
|
+
3,
|
|
238
|
+
9
|
|
239
|
+
];
|
|
240
|
+
return [
|
|
241
|
+
4,
|
|
242
|
+
hashData(dataInput.lastName)
|
|
243
|
+
];
|
|
244
|
+
case 8:
|
|
245
|
+
_tmp5 = _state.sent();
|
|
246
|
+
return [
|
|
247
|
+
3,
|
|
248
|
+
10
|
|
249
|
+
];
|
|
250
|
+
case 9:
|
|
251
|
+
_tmp5 = undefined;
|
|
252
|
+
_state.label = 10;
|
|
253
|
+
case 10:
|
|
254
|
+
_tmp2 = (_tmp3.last_name = _tmp5, _tmp3.street = [
|
|
255
|
+
userAddress.street1,
|
|
256
|
+
userAddress.street2
|
|
257
|
+
].join(', '), _tmp3.city = userAddress.city, _tmp3.region = userAddress.state, _tmp3.postal_code = userAddress.postalCode, _tmp3.country = userAddress.country, _tmp3);
|
|
258
|
+
return [
|
|
259
|
+
3,
|
|
260
|
+
12
|
|
261
|
+
];
|
|
262
|
+
case 11:
|
|
263
|
+
_tmp2 = undefined;
|
|
264
|
+
_state.label = 12;
|
|
265
|
+
case 12:
|
|
266
|
+
return [
|
|
267
|
+
2,
|
|
268
|
+
(_tmp.address = _tmp2, _tmp)
|
|
269
|
+
];
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
return function convertUserData(dataInput) {
|
|
274
|
+
return _ref.apply(this, arguments);
|
|
275
|
+
};
|
|
276
|
+
}();
|
package/package.json
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@driveflux/web-analytics",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./track": {
|
|
7
7
|
"types": "./dist/track.d.ts",
|
|
8
8
|
"import": "./dist/track.js"
|
|
9
|
+
},
|
|
10
|
+
"./track-server": {
|
|
11
|
+
"types": "./dist/track-server.d.ts",
|
|
12
|
+
"import": "./dist/track-server.js"
|
|
9
13
|
}
|
|
10
14
|
},
|
|
11
15
|
"files": [
|
|
12
16
|
"dist"
|
|
13
17
|
],
|
|
14
18
|
"dependencies": {
|
|
19
|
+
"@driveflux/fetch": "6.2.1",
|
|
20
|
+
"@driveflux/singleton": "1.2.0",
|
|
15
21
|
"@next/third-parties": "^14.2.5",
|
|
16
22
|
"lodash": "^4.17.21"
|
|
17
23
|
},
|
|
@@ -25,6 +31,7 @@
|
|
|
25
31
|
"@types/react": "^18.3.3",
|
|
26
32
|
"del-cli": "^5.1.0",
|
|
27
33
|
"react": "^18.3.1",
|
|
34
|
+
"type-fest": "^4.23.0",
|
|
28
35
|
"typescript": "^5.5.4"
|
|
29
36
|
},
|
|
30
37
|
"peerDependencies": {
|