@jitsu/js 1.1.1 → 1.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.
@@ -1,65 +1,95 @@
1
- @jitsu/js:build: cache hit, replaying output 03414e3b139b4a1c
2
- @jitsu/js:build: 
3
- @jitsu/js:build: > @jitsu/js@0.0.0 build /Users/vklmn/dev2/onetag/libs/jitsu-js
4
- @jitsu/js:build: > tsc -p . && rollup -c && cp compiled/src/*.d.ts dist
5
- @jitsu/js:build: 
6
- @jitsu/js:build: 
7
- @jitsu/js:build: ./compiled/src/browser.js → dist/web/p.js.txt...
8
- @jitsu/js:build: (!) "this" has been rewritten to "undefined"
9
- @jitsu/js:build: https://rollupjs.org/troubleshooting/#error-this-is-undefined
10
- @jitsu/js:build: compiled/src/analytics-plugin.js
11
- @jitsu/js:build: 1: /* global analytics */
12
- @jitsu/js:build: 2: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
- @jitsu/js:build:  ^
14
- @jitsu/js:build: 3: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- @jitsu/js:build: 4: return new (P || (P = Promise))(function (resolve, reject) {
16
- @jitsu/js:build: ...and 1 other occurrence
17
- @jitsu/js:build: compiled/src/destination-plugins.js
18
- @jitsu/js:build: 1: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
19
- @jitsu/js:build:  ^
20
- @jitsu/js:build: 2: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
21
- @jitsu/js:build: 3: return new (P || (P = Promise))(function (resolve, reject) {
22
- @jitsu/js:build: ...and 1 other occurrence
23
- @jitsu/js:build: (!) Circular dependencies
24
- @jitsu/js:build: compiled/src/index.js -> compiled/src/analytics-plugin.js -> compiled/src/index.js
25
- @jitsu/js:build: compiled/src/analytics-plugin.js -> compiled/src/destination-plugins.js -> compiled/src/analytics-plugin.js
26
- @jitsu/js:build: (!) Use of eval is strongly discouraged
27
- @jitsu/js:build: https://rollupjs.org/troubleshooting/#avoiding-eval
28
- @jitsu/js:build: compiled/src/destination-plugins.js
29
- @jitsu/js:build: 146: })()`;
30
- @jitsu/js:build: 147: try {
31
- @jitsu/js:build: 148: eval(iif);
32
- @jitsu/js:build:  ^
33
- @jitsu/js:build: 149: }
34
- @jitsu/js:build: 150: catch (e) {
35
- @jitsu/js:build: created dist/web/p.js.txt in 195ms
36
- @jitsu/js:build: 
37
- @jitsu/js:build: ./compiled/src/index.js, ./compiled/src/jitsu.js, ./compiled/src/analytics-plugin.js → dist/jitsu.es.js, dist/jitsu.cjs.js...
38
- @jitsu/js:build: (!) "this" has been rewritten to "undefined"
39
- @jitsu/js:build: https://rollupjs.org/troubleshooting/#error-this-is-undefined
40
- @jitsu/js:build: compiled/src/analytics-plugin.js
41
- @jitsu/js:build: 1: /* global analytics */
42
- @jitsu/js:build: 2: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
43
- @jitsu/js:build:  ^
44
- @jitsu/js:build: 3: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
45
- @jitsu/js:build: 4: return new (P || (P = Promise))(function (resolve, reject) {
46
- @jitsu/js:build: ...and 1 other occurrence
47
- @jitsu/js:build: compiled/src/destination-plugins.js
48
- @jitsu/js:build: 1: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
49
- @jitsu/js:build:  ^
50
- @jitsu/js:build: 2: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
51
- @jitsu/js:build: 3: return new (P || (P = Promise))(function (resolve, reject) {
52
- @jitsu/js:build: ...and 1 other occurrence
53
- @jitsu/js:build: (!) Circular dependencies
54
- @jitsu/js:build: compiled/src/index.js -> compiled/src/analytics-plugin.js -> compiled/src/index.js
55
- @jitsu/js:build: compiled/src/analytics-plugin.js -> compiled/src/destination-plugins.js -> compiled/src/analytics-plugin.js
56
- @jitsu/js:build: (!) Use of eval is strongly discouraged
57
- @jitsu/js:build: https://rollupjs.org/troubleshooting/#avoiding-eval
58
- @jitsu/js:build: compiled/src/destination-plugins.js
59
- @jitsu/js:build: 146: })()`;
60
- @jitsu/js:build: 147: try {
61
- @jitsu/js:build: 148: eval(iif);
62
- @jitsu/js:build:  ^
63
- @jitsu/js:build: 149: }
64
- @jitsu/js:build: 150: catch (e) {
65
- @jitsu/js:build: created dist/jitsu.es.js, dist/jitsu.cjs.js in 133ms
1
+ @jitsu/js:build: cache hit, replaying output edacae6711c3e992
2
+ @jitsu/js:build: 
3
+ @jitsu/js:build: > @jitsu/js@0.0.0 build /Users/ildarnurislamov/Projects/newjitsu/libs/jitsu-js
4
+ @jitsu/js:build: > tsc -p . && rollup -c && cp compiled/src/*.d.ts dist
5
+ @jitsu/js:build: 
6
+ @jitsu/js:build: 
7
+ @jitsu/js:build: ./compiled/src/browser.js → dist/web/p.js.txt...
8
+ @jitsu/js:build: (!) "this" has been rewritten to "undefined"
9
+ @jitsu/js:build: https://rollupjs.org/troubleshooting/#error-this-is-undefined
10
+ @jitsu/js:build: compiled/src/analytics-plugin.js
11
+ @jitsu/js:build: 1: /* global analytics */
12
+ @jitsu/js:build: 2: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ @jitsu/js:build:  ^
14
+ @jitsu/js:build: 3: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ @jitsu/js:build: 4: return new (P || (P = Promise))(function (resolve, reject) {
16
+ @jitsu/js:build: ...and 1 other occurrence
17
+ @jitsu/js:build: compiled/src/destination-plugins/tag.js
18
+ @jitsu/js:build: 1: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
19
+ @jitsu/js:build:  ^
20
+ @jitsu/js:build: 2: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
21
+ @jitsu/js:build: 3: return new (P || (P = Promise))(function (resolve, reject) {
22
+ @jitsu/js:build: ...and 1 other occurrence
23
+ @jitsu/js:build: compiled/src/destination-plugins/gtm.js
24
+ @jitsu/js:build: 1: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
25
+ @jitsu/js:build:  ^
26
+ @jitsu/js:build: 2: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ @jitsu/js:build: 3: return new (P || (P = Promise))(function (resolve, reject) {
28
+ @jitsu/js:build: ...and 1 other occurrence
29
+ @jitsu/js:build: compiled/src/destination-plugins/logrocket.js
30
+ @jitsu/js:build: 1: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
31
+ @jitsu/js:build:  ^
32
+ @jitsu/js:build: 2: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
33
+ @jitsu/js:build: 3: return new (P || (P = Promise))(function (resolve, reject) {
34
+ @jitsu/js:build: ...and 1 other occurrence
35
+ @jitsu/js:build: (!) Circular dependencies
36
+ @jitsu/js:build: compiled/src/index.js -> compiled/src/analytics-plugin.js -> compiled/src/index.js
37
+ @jitsu/js:build: compiled/src/destination-plugins/index.js -> compiled/src/destination-plugins/tag.js -> compiled/src/destination-plugins/index.js
38
+ @jitsu/js:build: compiled/src/analytics-plugin.js -> compiled/src/destination-plugins/index.js -> compiled/src/destination-plugins/tag.js -> compiled/src/analytics-plugin.js
39
+ @jitsu/js:build: compiled/src/destination-plugins/index.js -> compiled/src/destination-plugins/logrocket.js -> compiled/src/destination-plugins/index.js
40
+ @jitsu/js:build: compiled/src/destination-plugins/index.js -> compiled/src/destination-plugins/gtm.js -> compiled/src/destination-plugins/index.js
41
+ @jitsu/js:build: (!) Use of eval is strongly discouraged
42
+ @jitsu/js:build: https://rollupjs.org/troubleshooting/#avoiding-eval
43
+ @jitsu/js:build: compiled/src/destination-plugins/tag.js
44
+ @jitsu/js:build: 68: })()`;
45
+ @jitsu/js:build: 69: try {
46
+ @jitsu/js:build: 70: eval(iif);
47
+ @jitsu/js:build:  ^
48
+ @jitsu/js:build: 71: }
49
+ @jitsu/js:build: 72: catch (e) {
50
+ @jitsu/js:build: created dist/web/p.js.txt in 221ms
51
+ @jitsu/js:build: 
52
+ @jitsu/js:build: ./compiled/src/index.js, ./compiled/src/jitsu.js, ./compiled/src/analytics-plugin.js → dist/jitsu.es.js, dist/jitsu.cjs.js...
53
+ @jitsu/js:build: (!) "this" has been rewritten to "undefined"
54
+ @jitsu/js:build: https://rollupjs.org/troubleshooting/#error-this-is-undefined
55
+ @jitsu/js:build: compiled/src/analytics-plugin.js
56
+ @jitsu/js:build: 1: /* global analytics */
57
+ @jitsu/js:build: 2: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
58
+ @jitsu/js:build:  ^
59
+ @jitsu/js:build: 3: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
60
+ @jitsu/js:build: 4: return new (P || (P = Promise))(function (resolve, reject) {
61
+ @jitsu/js:build: ...and 1 other occurrence
62
+ @jitsu/js:build: compiled/src/destination-plugins/gtm.js
63
+ @jitsu/js:build: 1: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
64
+ @jitsu/js:build:  ^
65
+ @jitsu/js:build: 2: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
66
+ @jitsu/js:build: 3: return new (P || (P = Promise))(function (resolve, reject) {
67
+ @jitsu/js:build: ...and 1 other occurrence
68
+ @jitsu/js:build: compiled/src/destination-plugins/tag.js
69
+ @jitsu/js:build: 1: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
70
+ @jitsu/js:build:  ^
71
+ @jitsu/js:build: 2: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
72
+ @jitsu/js:build: 3: return new (P || (P = Promise))(function (resolve, reject) {
73
+ @jitsu/js:build: ...and 1 other occurrence
74
+ @jitsu/js:build: compiled/src/destination-plugins/logrocket.js
75
+ @jitsu/js:build: 1: var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
76
+ @jitsu/js:build:  ^
77
+ @jitsu/js:build: 2: function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
78
+ @jitsu/js:build: 3: return new (P || (P = Promise))(function (resolve, reject) {
79
+ @jitsu/js:build: ...and 1 other occurrence
80
+ @jitsu/js:build: (!) Circular dependencies
81
+ @jitsu/js:build: compiled/src/index.js -> compiled/src/analytics-plugin.js -> compiled/src/index.js
82
+ @jitsu/js:build: compiled/src/destination-plugins/index.js -> compiled/src/destination-plugins/tag.js -> compiled/src/destination-plugins/index.js
83
+ @jitsu/js:build: compiled/src/analytics-plugin.js -> compiled/src/destination-plugins/index.js -> compiled/src/destination-plugins/tag.js -> compiled/src/analytics-plugin.js
84
+ @jitsu/js:build: compiled/src/destination-plugins/index.js -> compiled/src/destination-plugins/logrocket.js -> compiled/src/destination-plugins/index.js
85
+ @jitsu/js:build: compiled/src/destination-plugins/index.js -> compiled/src/destination-plugins/gtm.js -> compiled/src/destination-plugins/index.js
86
+ @jitsu/js:build: (!) Use of eval is strongly discouraged
87
+ @jitsu/js:build: https://rollupjs.org/troubleshooting/#avoiding-eval
88
+ @jitsu/js:build: compiled/src/destination-plugins/tag.js
89
+ @jitsu/js:build: 68: })()`;
90
+ @jitsu/js:build: 69: try {
91
+ @jitsu/js:build: 70: eval(iif);
92
+ @jitsu/js:build:  ^
93
+ @jitsu/js:build: 71: }
94
+ @jitsu/js:build: 72: catch (e) {
95
+ @jitsu/js:build: created dist/jitsu.es.js, dist/jitsu.cjs.js in 148ms
@@ -1,5 +1,5 @@
1
- @jitsu/js:clean: cache hit, replaying output 02a6b0bcaf2c7148
2
- @jitsu/js:clean: 
3
- @jitsu/js:clean: > @jitsu/js@0.0.0 clean /Users/vklmn/dev2/onetag/libs/jitsu-js
4
- @jitsu/js:clean: > rm -rf ./dist
5
- @jitsu/js:clean: 
1
+ @jitsu/js:clean: cache hit, replaying output b68b755cf7d79e69
2
+ @jitsu/js:clean: 
3
+ @jitsu/js:clean: > @jitsu/js@0.0.0 clean /Users/ildarnurislamov/Projects/newjitsu/libs/jitsu-js
4
+ @jitsu/js:clean: > rm -rf ./dist
5
+ @jitsu/js:clean: 
package/dist/jitsu.cjs.js CHANGED
@@ -110,7 +110,7 @@ function loadScript(src, attributes) {
110
110
  });
111
111
  }
112
112
 
113
- var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
113
+ var __awaiter$3 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
114
114
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
115
115
  return new (P || (P = Promise))(function (resolve, reject) {
116
116
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -119,18 +119,10 @@ var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _argu
119
119
  step((generator = generator.apply(thisArg, _arguments || [])).next());
120
120
  });
121
121
  };
122
- function satisfyFilter(filter, subject) {
123
- return filter === "*" || filter.toLowerCase().trim() === (subject || "").trim().toLowerCase();
124
- }
125
- function applyFilters(event, creds) {
126
- const { hosts = ["*"], events = ["*"] } = creds;
127
- return (!!hosts.find(hostFilter => { var _a; return satisfyFilter(hostFilter, (_a = event.context) === null || _a === void 0 ? void 0 : _a.host); }) &&
128
- !!events.find(eventFilter => satisfyFilter(eventFilter, event.type)));
129
- }
130
122
  const tagPlugin = {
131
123
  id: "tag",
132
124
  handle(config, payload) {
133
- return __awaiter$1(this, void 0, void 0, function* () {
125
+ return __awaiter$3(this, void 0, void 0, function* () {
134
126
  if (!applyFilters(payload, config)) {
135
127
  return;
136
128
  }
@@ -138,6 +130,96 @@ const tagPlugin = {
138
130
  });
139
131
  },
140
132
  };
133
+ function insertTags(code, event, opts = {}) {
134
+ let tag;
135
+ try {
136
+ tag = JSON.parse(code);
137
+ }
138
+ catch (e) {
139
+ tag = { code, lang: "javascript" };
140
+ }
141
+ const debug = opts.debug || false;
142
+ if (isInBrowser()) {
143
+ if (tag.lang === "javascript") {
144
+ execJs(tag.code, event);
145
+ }
146
+ else {
147
+ const codeHolder = document.createElement("span");
148
+ codeHolder.innerHTML = replaceMacro(tag.code, event);
149
+ document.body.insertAdjacentElement("beforeend", codeHolder);
150
+ const scripts = codeHolder.querySelectorAll("script");
151
+ scripts.forEach(script => {
152
+ const scriptClone = document.createElement("script");
153
+ scriptClone.type = scriptClone.type || "text/javascript";
154
+ if (script.hasAttribute("src")) {
155
+ scriptClone.src = script.src;
156
+ }
157
+ scriptClone.text = script.text;
158
+ if (debug) {
159
+ console.log(`[JITSU] Executing script${script.hasAttribute("src") ? ` ${script.src}` : ""}`, scriptClone.text);
160
+ }
161
+ document.head.appendChild(scriptClone);
162
+ document.head.removeChild(scriptClone);
163
+ });
164
+ }
165
+ }
166
+ else {
167
+ if (debug) {
168
+ console.log(`[JITSU] insertTags(): cannot insert tags in non-browser environment`);
169
+ }
170
+ }
171
+ }
172
+ function execJs(code, event) {
173
+ const varName = `jitsu_event_${randomId()}`;
174
+ window[varName] = event;
175
+ const iif = `(function(){
176
+ const event = ${varName};
177
+ ${code}
178
+ })()`;
179
+ try {
180
+ eval(iif);
181
+ }
182
+ catch (e) {
183
+ console.error(`[JITSU] Error executing JS code: ${e.message}. Code: `, iif);
184
+ }
185
+ finally {
186
+ delete window[varName];
187
+ }
188
+ return iif;
189
+ }
190
+ function replaceMacro(code, event) {
191
+ return code.replace(/{{\s*event\s*}}/g, JSON.stringify(event));
192
+ }
193
+
194
+ var __awaiter$2 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
195
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
196
+ return new (P || (P = Promise))(function (resolve, reject) {
197
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
198
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
199
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
200
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
201
+ });
202
+ };
203
+ const logrocketPlugin = {
204
+ id: "logrocket",
205
+ handle(config, payload) {
206
+ return __awaiter$2(this, void 0, void 0, function* () {
207
+ if (!applyFilters(payload, config)) {
208
+ return;
209
+ }
210
+ initLogrocketIfNeeded(config.appId);
211
+ const action = logRocket => {
212
+ if (payload.type === "identify" && payload.userId) {
213
+ logRocket.identify(payload.userId, payload.traits || {});
214
+ }
215
+ };
216
+ getLogRocketQueue().push(action);
217
+ if (getLogRocketState() === "loaded") {
218
+ flushLogRocketQueue(window["LogRocket"]);
219
+ }
220
+ });
221
+ },
222
+ };
141
223
  function getLogRocketState() {
142
224
  return window["__jitsuLrState"] || "fresh";
143
225
  }
@@ -163,7 +245,7 @@ function flushLogRocketQueue(lr) {
163
245
  }
164
246
  }
165
247
  function initLogrocketIfNeeded(appId) {
166
- return __awaiter$1(this, void 0, void 0, function* () {
248
+ return __awaiter$2(this, void 0, void 0, function* () {
167
249
  if (getLogRocketState() !== "fresh") {
168
250
  return;
169
251
  }
@@ -188,88 +270,142 @@ function initLogrocketIfNeeded(appId) {
188
270
  });
189
271
  });
190
272
  }
191
- const logrocketPlugin = {
192
- id: "logrocket",
273
+
274
+ var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
275
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
276
+ return new (P || (P = Promise))(function (resolve, reject) {
277
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
278
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
279
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
280
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
281
+ });
282
+ };
283
+ const defaultScriptSrc = "https://www.googletagmanager.com/gtag/js";
284
+ const gtmPlugin = {
285
+ id: "gtm",
193
286
  handle(config, payload) {
287
+ var _a, _b;
194
288
  return __awaiter$1(this, void 0, void 0, function* () {
195
289
  if (!applyFilters(payload, config)) {
196
290
  return;
197
291
  }
198
- initLogrocketIfNeeded(config.appId);
199
- const action = logRocket => {
200
- if (payload.type === "identify" && payload.userId) {
201
- logRocket.identify(payload.userId, payload.traits || {});
202
- }
203
- };
204
- getLogRocketQueue().push(action);
205
- if (getLogRocketState() === "loaded") {
206
- flushLogRocketQueue(window["LogRocket"]);
292
+ yield initGtmIfNeeded(config);
293
+ const dataLayer = window[config.dataLayerName || "dataLayer"];
294
+ switch (payload.type) {
295
+ case "page":
296
+ const { properties: pageProperties, context } = payload;
297
+ const pageEvent = {
298
+ event: "page_view",
299
+ url: pageProperties.url,
300
+ title: pageProperties.title,
301
+ referer: (_b = (_a = context === null || context === void 0 ? void 0 : context.page) === null || _a === void 0 ? void 0 : _a.referrer) !== null && _b !== void 0 ? _b : "",
302
+ };
303
+ if (config.debug) {
304
+ console.log("gtag push", pageEvent);
305
+ }
306
+ dataLayer.push(pageEvent);
307
+ break;
308
+ case "track":
309
+ const { properties: trackProperties } = payload;
310
+ const trackEvent = Object.assign({ event: payload.event }, trackProperties);
311
+ if (payload.userId) {
312
+ trackEvent.userId = payload.userId;
313
+ }
314
+ if (payload.anonymousId) {
315
+ trackEvent.anonymousId = payload.anonymousId;
316
+ }
317
+ if (config.debug) {
318
+ console.log("gtag push", trackEvent);
319
+ }
320
+ dataLayer.push(trackEvent);
321
+ break;
322
+ case "identify":
323
+ const { traits } = payload;
324
+ const identifyEvent = Object.assign({ event: "identify" }, traits);
325
+ if (payload.userId) {
326
+ identifyEvent.userId = payload.userId;
327
+ }
328
+ if (payload.anonymousId) {
329
+ identifyEvent.anonymousId = payload.anonymousId;
330
+ }
331
+ if (config.debug) {
332
+ console.log("gtag push", identifyEvent);
333
+ }
334
+ dataLayer.push(identifyEvent);
335
+ break;
207
336
  }
208
337
  });
209
338
  },
210
339
  };
211
- function insertTags(code, event, opts = {}) {
212
- let tag;
213
- try {
214
- tag = JSON.parse(code);
215
- }
216
- catch (e) {
217
- tag = { code, lang: "javascript" };
218
- }
219
- const debug = opts.debug || false;
220
- if (isInBrowser()) {
221
- if (tag.lang === "javascript") {
222
- execJs(tag.code, event);
223
- }
224
- else {
225
- const codeHolder = document.createElement("span");
226
- codeHolder.innerHTML = replaceMacro(tag.code, event);
227
- document.body.insertAdjacentElement("beforeend", codeHolder);
228
- const scripts = codeHolder.querySelectorAll("script");
229
- scripts.forEach(script => {
230
- const scriptClone = document.createElement("script");
231
- scriptClone.type = scriptClone.type || "text/javascript";
232
- if (script.hasAttribute("src")) {
233
- scriptClone.src = script.src;
234
- }
235
- scriptClone.text = script.text;
236
- if (debug) {
237
- console.log(`[JITSU] Executing script${script.hasAttribute("src") ? ` ${script.src}` : ""}`, scriptClone.text);
238
- }
239
- document.head.appendChild(scriptClone);
240
- document.head.removeChild(scriptClone);
241
- });
340
+ function getGtmState() {
341
+ return window["__jitsuGtmState"] || "fresh";
342
+ }
343
+ function setGtmState(s) {
344
+ window["__jitsuGtmState"] = s;
345
+ }
346
+ function initGtmIfNeeded(config) {
347
+ return __awaiter$1(this, void 0, void 0, function* () {
348
+ if (getGtmState() !== "fresh") {
349
+ return;
242
350
  }
351
+ setGtmState("loading");
352
+ const dlName = config.dataLayerName || "dataLayer";
353
+ const dlParam = dlName !== "dataLayer" ? "&l=" + dlName : "";
354
+ const previewParams = config.preview
355
+ ? `&gtm_preview=${config.preview}&gtm_auth=${config.auth}&gtm_cookies_win=x`
356
+ : "";
357
+ const scriptSrc = `${config.customScriptSrc || defaultScriptSrc}?id=${config.containerId}${dlParam}${previewParams}`;
358
+ window[dlName] = window[dlName] || [];
359
+ const gtag = function () {
360
+ window[dlName].push(arguments);
361
+ };
362
+ // @ts-ignore
363
+ gtag("js", new Date());
364
+ // @ts-ignore
365
+ gtag("config", config.containerId);
366
+ loadScript(scriptSrc)
367
+ .then(() => {
368
+ setGtmState("loaded");
369
+ })
370
+ .catch(e => {
371
+ console.warn(`GTM (containerId=${config.containerId}) init failed: ${e.message}`, e);
372
+ setGtmState("failed");
373
+ });
374
+ });
375
+ }
376
+
377
+ function satisfyFilter(filter, subject) {
378
+ return filter === "*" || filter.toLowerCase().trim() === (subject || "").trim().toLowerCase();
379
+ }
380
+ function satisfyDomainFilter(filter, subject) {
381
+ if (filter === "*") {
382
+ return true;
383
+ }
384
+ subject = subject || "";
385
+ if (filter.startsWith("*.")) {
386
+ return subject.endsWith(filter.substring(1));
243
387
  }
244
388
  else {
245
- if (debug) {
246
- console.log(`[JITSU] insertTags(): cannot insert tags in non-browser environment`);
247
- }
389
+ return filter === subject;
248
390
  }
249
391
  }
250
- function execJs(code, event) {
251
- const varName = `jitsu_event_${randomId()}`;
252
- window[varName] = event;
253
- const iif = `(function(){
254
- const event = ${varName};
255
- ${code}
256
- })()`;
392
+ function applyFilters(event, creds) {
393
+ const { hosts = "*", events = "*" } = creds;
257
394
  try {
258
- eval(iif);
395
+ const eventsArray = Array.isArray(events) ? events : events.split("\n");
396
+ const hostsArray = Array.isArray(hosts) ? hosts : hosts.split("\n");
397
+ return (!!hostsArray.find(hostFilter => { var _a; return satisfyDomainFilter(hostFilter, (_a = event.context) === null || _a === void 0 ? void 0 : _a.host); }) &&
398
+ (!!eventsArray.find(eventFilter => satisfyFilter(eventFilter, event.type)) ||
399
+ !!eventsArray.find(eventFilter => satisfyFilter(eventFilter, event.event))));
259
400
  }
260
401
  catch (e) {
261
- console.error(`[JITSU] Error executing JS code: ${e.message}. Code: `, iif);
262
- }
263
- finally {
264
- delete window[varName];
402
+ console.warn(`Failed to apply filters: ${e.message}. Typeof events: ${typeof events}, typeof hosts: ${typeof hosts}. Values`, events, hosts);
403
+ throw new Error(`Failed to apply filters: ${e.message}. Typeof events: ${typeof events}, typeof hosts: ${typeof hosts}`);
265
404
  }
266
- return iif;
267
- }
268
- function replaceMacro(code, event) {
269
- return code.replace(/{{\s*event\s*}}/g, JSON.stringify(event));
270
405
  }
271
406
  const internalDestinationPlugins = {
272
407
  [tagPlugin.id]: tagPlugin,
408
+ [gtmPlugin.id]: gtmPlugin,
273
409
  [logrocketPlugin.id]: logrocketPlugin,
274
410
  };
275
411
 
@@ -286,7 +422,7 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume
286
422
  step((generator = generator.apply(thisArg, _arguments || [])).next());
287
423
  });
288
424
  };
289
- const config = {
425
+ const defaultConfig = {
290
426
  /* Your segment writeKey */
291
427
  writeKey: null,
292
428
  /* Disable anonymous MTU */
@@ -377,7 +513,7 @@ const defaultCookie2Key = {
377
513
  const cookieStorage = (cookieDomain, key2cookie) => {
378
514
  return {
379
515
  setItem(key, val) {
380
- const strVal = typeof val === "object" && val !== null ? JSON.stringify(val) : val;
516
+ const strVal = typeof val === "object" && val !== null ? encodeURIComponent(JSON.stringify(val)) : val;
381
517
  const cookieName = key2cookie[key] || key;
382
518
  setCookie(cookieName, strVal, {
383
519
  domain: cookieDomain,
@@ -532,7 +668,7 @@ function adjustPayload(payload, config, storage) {
532
668
  },
533
669
  campaign: parseUtms(query),
534
670
  };
535
- const withContext = Object.assign(Object.assign({}, payload), { timestamp: new Date().toISOString(), sentAt: new Date().toISOString(), messageId: randomId(properties.path || (parsedUrl && parsedUrl.pathname)), writeKey: validateWriteKey(config.writeKey), context: deepMerge(context, customContext) });
671
+ const withContext = Object.assign(Object.assign({}, payload), { timestamp: new Date().toISOString(), sentAt: new Date().toISOString(), messageId: randomId(properties.path || (parsedUrl && parsedUrl.pathname)), writeKey: maskWriteKey(config.writeKey), context: deepMerge(context, customContext) });
536
672
  delete withContext.meta;
537
673
  delete withContext.options;
538
674
  return withContext;
@@ -593,15 +729,30 @@ function processDestinations(destinations, method, event, debug, analyticsInstan
593
729
  }
594
730
  });
595
731
  }
732
+ function looksLikeCuid(id) {
733
+ return id.length === 25 && id.charAt(0) === "c";
734
+ }
596
735
  function validateWriteKey(writeKey) {
597
736
  if (writeKey) {
598
737
  const [, secret] = writeKey.split(":", 2);
599
- if (!secret) {
738
+ if (!secret && !looksLikeCuid(writeKey)) {
600
739
  throw new Error(`Legacy write key detected - ${writeKey}! This format doesn't work anymore, it should be 'key:secret'. Please download a new key from Jitsu UI`);
601
740
  }
602
741
  }
603
742
  return writeKey;
604
743
  }
744
+ function maskWriteKey(writeKey) {
745
+ if (writeKey) {
746
+ const [id, secret] = writeKey.split(":", 2);
747
+ if (secret) {
748
+ return `${id}:***`;
749
+ }
750
+ else {
751
+ return id;
752
+ }
753
+ }
754
+ return writeKey;
755
+ }
605
756
  function send(method, payload, jitsuConfig, instance, store) {
606
757
  if (jitsuConfig.echoEvents) {
607
758
  console.log(`[JITSU] sending '${method}' event:`, payload);
@@ -617,7 +768,7 @@ function send(method, payload, jitsuConfig, instance, store) {
617
768
  // console.log(`[JITSU] Sending event to ${url}: `, JSON.stringify(payload, null, 2));
618
769
  // }
619
770
  const adjustedPayload = adjustPayload(payload, jitsuConfig, store);
620
- const authHeader = config.writeKey ? { "X-Write-Key": validateWriteKey(config.writeKey) } : {};
771
+ const authHeader = jitsuConfig.writeKey ? { "X-Write-Key": jitsuConfig.writeKey } : {};
621
772
  return fetch(url, {
622
773
  method: "POST",
623
774
  headers: Object.assign(Object.assign({ "Content-Type": "application/json" }, authHeader), debugHeader),
@@ -673,7 +824,7 @@ const jitsuAnalyticsPlugin = (pluginConfig = {}) => {
673
824
  persistentStorage.removeItem(key);
674
825
  },
675
826
  });
676
- const instanceConfig = Object.assign(Object.assign({}, config), pluginConfig);
827
+ const instanceConfig = Object.assign(Object.assign({}, defaultConfig), pluginConfig);
677
828
  return {
678
829
  name: "jitsu",
679
830
  config: instanceConfig,
@@ -685,6 +836,7 @@ const jitsuAnalyticsPlugin = (pluginConfig = {}) => {
685
836
  if (!config.host && !config.echoEvents) {
686
837
  throw new Error("Please specify host variable in jitsu plugin initialization, or set echoEvents to true");
687
838
  }
839
+ validateWriteKey(config.writeKey);
688
840
  },
689
841
  page: args => {
690
842
  const { payload, config, instance } = args;