@jitsu/js 1.1.0-canary.388.20230519133920 → 1.1.0-canary.404.20230526224724

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,95 +1,65 @@
1
- @jitsu/js:build: cache hit, replaying output 9d604bcd7bdc50ac
2
- @jitsu/js:build: 
3
- @jitsu/js:build: > @jitsu/js@0.0.0 build /Users/ildarnurislamov/Projects/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/logrocket.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/tag.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/gtm.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 216ms
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/logrocket.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/tag.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 151ms
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,5 +1,5 @@
1
- @jitsu/js:clean: cache hit, replaying output 6f082eb620c44280
2
- @jitsu/js:clean: 
3
- @jitsu/js:clean: > @jitsu/js@0.0.0 clean /Users/ildarnurislamov/Projects/onetag/libs/jitsu-js
4
- @jitsu/js:clean: > rm -rf ./dist
5
- @jitsu/js:clean: 
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: 
@@ -35,7 +35,7 @@ describe("Test Jitsu NodeJS client", () => {
35
35
  await startServer();
36
36
  try {
37
37
  const jitsu: AnalyticsInterface = jitsuAnalytics({
38
- writeKey: "test",
38
+ writeKey: "key:secret",
39
39
  host: server.baseUrl,
40
40
  debug: true,
41
41
  fetch: fetchImpl,
@@ -10,6 +10,7 @@ export type DestinationDescriptor = {
10
10
  id: string;
11
11
  destinationType: string;
12
12
  credentials: any;
13
+ options: any;
13
14
  deviceOptions: DeviceOptions;
14
15
  };
15
16
  export type AnalyticsPluginDescriptor = {
@@ -0,0 +1,17 @@
1
+ import { AnalyticsClientEvent } from "@jitsu/protocols/analytics";
2
+ export type InternalPlugin<T> = {
3
+ id: string;
4
+ handle(config: T, payload: AnalyticsClientEvent): Promise<void>;
5
+ };
6
+ export type CommonDestinationCredentials = {
7
+ hosts?: string[];
8
+ events?: string[];
9
+ };
10
+ export type TagDestinationCredentials = {
11
+ code: string;
12
+ } & CommonDestinationCredentials;
13
+ export type LogRocketDestinationCredentials = {
14
+ appId: string;
15
+ } & CommonDestinationCredentials;
16
+ export type LogRocket = any;
17
+ export declare const internalDestinationPlugins: Record<string, InternalPlugin<any>>;
package/dist/jitsu.cjs.js CHANGED
@@ -110,7 +110,7 @@ function loadScript(src, attributes) {
110
110
  });
111
111
  }
112
112
 
113
- var __awaiter$3 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
113
+ var __awaiter$1 = (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,10 +119,18 @@ var __awaiter$3 = (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
+ }
122
130
  const tagPlugin = {
123
131
  id: "tag",
124
132
  handle(config, payload) {
125
- return __awaiter$3(this, void 0, void 0, function* () {
133
+ return __awaiter$1(this, void 0, void 0, function* () {
126
134
  if (!applyFilters(payload, config)) {
127
135
  return;
128
136
  }
@@ -130,96 +138,6 @@ const tagPlugin = {
130
138
  });
131
139
  },
132
140
  };
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
- };
223
141
  function getLogRocketState() {
224
142
  return window["__jitsuLrState"] || "fresh";
225
143
  }
@@ -245,7 +163,7 @@ function flushLogRocketQueue(lr) {
245
163
  }
246
164
  }
247
165
  function initLogrocketIfNeeded(appId) {
248
- return __awaiter$2(this, void 0, void 0, function* () {
166
+ return __awaiter$1(this, void 0, void 0, function* () {
249
167
  if (getLogRocketState() !== "fresh") {
250
168
  return;
251
169
  }
@@ -270,113 +188,94 @@ function initLogrocketIfNeeded(appId) {
270
188
  });
271
189
  });
272
190
  }
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",
191
+ const logrocketPlugin = {
192
+ id: "logrocket",
286
193
  handle(config, payload) {
287
194
  return __awaiter$1(this, void 0, void 0, function* () {
288
195
  if (!applyFilters(payload, config)) {
289
196
  return;
290
197
  }
291
- yield initGtmIfNeeded(config);
292
- const dataLayer = window[config.dataLayerName || "dataLayer"];
293
- switch (payload.type) {
294
- case "page":
295
- const { properties: pageProperties } = payload;
296
- const pageEvent = Object.assign({ event: "page_view" }, pageProperties);
297
- if (config.debug) {
298
- console.log("gtag push", pageEvent);
299
- }
300
- dataLayer.push(pageEvent);
301
- break;
302
- case "track":
303
- const { properties: trackProperties } = payload;
304
- const trackEvent = Object.assign({ event: payload.event }, trackProperties);
305
- if (config.debug) {
306
- console.log("gtag push", trackEvent);
307
- }
308
- dataLayer.push(trackEvent);
309
- break;
310
- case "identify":
311
- const { anonymousId, userId, traits } = payload;
312
- const user = traits;
313
- if (userId) {
314
- user.userId = userId;
315
- }
316
- if (anonymousId) {
317
- user.anonymousId = anonymousId;
318
- }
319
- const identifyEvent = { event: "identify", user: user };
320
- if (config.debug) {
321
- console.log("gtag push", identifyEvent);
322
- }
323
- dataLayer.push(identifyEvent);
324
- break;
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"]);
325
207
  }
326
208
  });
327
209
  },
328
210
  };
329
- function getGtmState() {
330
- return window["__jitsuGtmState"] || "fresh";
331
- }
332
- function setGtmState(s) {
333
- window["__jitsuGtmState"] = s;
334
- }
335
- function initGtmIfNeeded(config) {
336
- return __awaiter$1(this, void 0, void 0, function* () {
337
- if (getGtmState() !== "fresh") {
338
- return;
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);
339
223
  }
340
- setGtmState("loading");
341
- const dlName = config.dataLayerName || "dataLayer";
342
- const dlParam = dlName !== "dataLayer" ? "&l=" + dlName : "";
343
- const previewParams = config.preview
344
- ? `&gtm_preview=${config.preview}&gtm_auth=${config.auth}&gtm_cookies_win=x`
345
- : "";
346
- const scriptSrc = `${config.customScriptSrc || defaultScriptSrc}?id=${config.containerId}${dlParam}${previewParams}`;
347
- window[dlName] = window[dlName] || [];
348
- const gtag = function () {
349
- window[dlName].push(arguments);
350
- };
351
- // @ts-ignore
352
- gtag("js", new Date());
353
- // @ts-ignore
354
- gtag("config", config.containerId);
355
- loadScript(scriptSrc)
356
- .then(() => {
357
- setGtmState("loaded");
358
- })
359
- .catch(e => {
360
- console.warn(`GTM (containerId=${config.containerId}) init failed: ${e.message}`, e);
361
- setGtmState("failed");
362
- });
363
- });
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
+ });
242
+ }
243
+ }
244
+ else {
245
+ if (debug) {
246
+ console.log(`[JITSU] insertTags(): cannot insert tags in non-browser environment`);
247
+ }
248
+ }
364
249
  }
365
-
366
- function satisfyFilter(filter, subject) {
367
- return filter === "*" || filter.toLowerCase().trim() === (subject || "").trim().toLowerCase();
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
+ })()`;
257
+ try {
258
+ eval(iif);
259
+ }
260
+ catch (e) {
261
+ console.error(`[JITSU] Error executing JS code: ${e.message}. Code: `, iif);
262
+ }
263
+ finally {
264
+ delete window[varName];
265
+ }
266
+ return iif;
368
267
  }
369
- function applyFilters(event, creds) {
370
- const { hosts = ["*"], events = ["*"] } = creds;
371
- return (!!hosts.find(hostFilter => { var _a; return satisfyFilter(hostFilter, (_a = event.context) === null || _a === void 0 ? void 0 : _a.host); }) &&
372
- !!events.find(eventFilter => satisfyFilter(eventFilter, event.type)));
268
+ function replaceMacro(code, event) {
269
+ return code.replace(/{{\s*event\s*}}/g, JSON.stringify(event));
373
270
  }
374
271
  const internalDestinationPlugins = {
375
272
  [tagPlugin.id]: tagPlugin,
376
- [gtmPlugin.id]: gtmPlugin,
377
273
  [logrocketPlugin.id]: logrocketPlugin,
378
274
  };
379
275
 
276
+ var name = "@jitsu/js";
277
+ var version = "0.0.0";
278
+
380
279
  /* global analytics */
381
280
  var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
382
281
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -614,8 +513,8 @@ function adjustPayload(payload, config, storage) {
614
513
  const referrer = runtime.referrer();
615
514
  const context = {
616
515
  library: {
617
- name: "jitsu-js",
618
- version: "1.0.0",
516
+ name: name,
517
+ version: version,
619
518
  },
620
519
  userAgent: runtime.userAgent(),
621
520
  locale: runtime.language(),
@@ -633,7 +532,7 @@ function adjustPayload(payload, config, storage) {
633
532
  },
634
533
  campaign: parseUtms(query),
635
534
  };
636
- const withContext = Object.assign(Object.assign({}, payload), { timestamp: new Date().toISOString(), sentAt: new Date().toISOString(), messageId: randomId(properties.path || (parsedUrl && parsedUrl.pathname)), writeKey: config.writeKey, context: deepMerge(context, customContext) });
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) });
637
536
  delete withContext.meta;
638
537
  delete withContext.options;
639
538
  return withContext;
@@ -642,12 +541,11 @@ function processDestinations(destinations, method, event, debug, analyticsInstan
642
541
  return __awaiter(this, void 0, void 0, function* () {
643
542
  const promises = [];
644
543
  for (const destination of destinations) {
544
+ const credentials = Object.assign(Object.assign({}, destination.credentials), destination.options);
645
545
  if (destination.deviceOptions.type === "internal-plugin") {
646
546
  const plugin = internalDestinationPlugins[destination.deviceOptions.name];
647
547
  if (plugin) {
648
548
  try {
649
- //to support old versions, where credentials were stored in root
650
- const credentials = destination.credentials || destination;
651
549
  promises.push(plugin.handle(credentials, event));
652
550
  }
653
551
  catch (e) {
@@ -667,7 +565,7 @@ function processDestinations(destinations, method, event, debug, analyticsInstan
667
565
  else {
668
566
  let pluginInstance;
669
567
  try {
670
- pluginInstance = (typeof plugin === "function" ? plugin : plugin.init)(destination.credentials);
568
+ pluginInstance = (typeof plugin === "function" ? plugin : plugin.init)(credentials);
671
569
  }
672
570
  catch (e) {
673
571
  console.warn(`[JITSU] Error creating plugin '${destination.deviceOptions.moduleVarName}@${destination.deviceOptions.packageCdn}' for destination '${destination.id}': ${e === null || e === void 0 ? void 0 : e.message}`, e);
@@ -695,6 +593,15 @@ function processDestinations(destinations, method, event, debug, analyticsInstan
695
593
  }
696
594
  });
697
595
  }
596
+ function validateWriteKey(writeKey) {
597
+ if (writeKey) {
598
+ const [, secret] = writeKey.split(":", 2);
599
+ if (!secret) {
600
+ 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
+ }
602
+ }
603
+ return writeKey;
604
+ }
698
605
  function send(method, payload, jitsuConfig, instance, store) {
699
606
  if (jitsuConfig.echoEvents) {
700
607
  console.log(`[JITSU] sending '${method}' event:`, payload);
@@ -710,7 +617,7 @@ function send(method, payload, jitsuConfig, instance, store) {
710
617
  // console.log(`[JITSU] Sending event to ${url}: `, JSON.stringify(payload, null, 2));
711
618
  // }
712
619
  const adjustedPayload = adjustPayload(payload, jitsuConfig, store);
713
- const authHeader = adjustedPayload.writeKey ? { "X-Write-Key": adjustedPayload.writeKey } : {};
620
+ const authHeader = config.writeKey ? { "X-Write-Key": validateWriteKey(config.writeKey) } : {};
714
621
  return fetch(url, {
715
622
  method: "POST",
716
623
  headers: Object.assign(Object.assign({ "Content-Type": "application/json" }, authHeader), debugHeader),