@datarangers/sdk-javascript 0.1.3 → 0.1.5

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/lib/plugin/ab.js CHANGED
@@ -1,1116 +1 @@
1
- 'use strict';
2
-
3
- /******************************************************************************
4
- Copyright (c) Microsoft Corporation.
5
-
6
- Permission to use, copy, modify, and/or distribute this software for any
7
- purpose with or without fee is hereby granted.
8
-
9
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
- PERFORMANCE OF THIS SOFTWARE.
16
- ***************************************************************************** */
17
-
18
- var __assign = function() {
19
- __assign = Object.assign || function __assign(t) {
20
- for (var s, i = 1, n = arguments.length; i < n; i++) {
21
- s = arguments[i];
22
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
23
- }
24
- return t;
25
- };
26
- return __assign.apply(this, arguments);
27
- };
28
-
29
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
30
- var e = new Error(message);
31
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
32
- };
33
-
34
- // Copyright 2022 Beijing Volcanoengine Technology Ltd. All Rights Reserved.
35
- var STYLE_ID = '__rangers_ab_style__';
36
- function openOverlayer() {
37
- if (document.getElementById(STYLE_ID)) {
38
- return;
39
- }
40
- var css = 'body { opacity: 0 !important; }';
41
- var head = document.head || document.getElementsByTagName('head')[0];
42
- var style = document.createElement('style');
43
- style.id = STYLE_ID;
44
- style.type = 'text/css';
45
- if (style.styleSheet) {
46
- style.styleSheet.cssText = css;
47
- } else {
48
- style.appendChild(document.createTextNode(css));
49
- }
50
- head.appendChild(style);
51
- }
52
- function closeOverlayer() {
53
- var style = document.getElementById(STYLE_ID);
54
- if (style) {
55
- style.parentElement.removeChild(style);
56
- }
57
- }
58
-
59
- // Copyright 2022 Beijing Volcanoengine Technology Ltd. All Rights Reserved.
60
- var AB_DOMAINS = {
61
- cn: '1fz22z22z1nz21z4mz4bz4bz22z1mz19z1jz1mz1ez4az1az22z1mz19z21z1lz21z21z1bz1iz4az1az1mz1k',
62
- va: '1fz22z22z1nz21z4mz4bz4bz22z1mz19z1jz1mz1ez4az1gz22z1mz19z21z1lz21z21z1bz1iz4az1az1mz1k',
63
- sg: '1fz22z22z1nz21z4mz4bz4bz22z1mz19z1jz1mz1ez4az22z1mz19z21z1lz21z21z1bz1iz4az1az1mz1k'
64
- };
65
-
66
- // Copyright 2022 Beijing Volcanoengine Technology Ltd. All Rights Reserved.
67
- var Types;
68
- (function (Types) {
69
- Types["Init"] = "init";
70
- Types["Config"] = "config";
71
- Types["Start"] = "start";
72
- Types["Ready"] = "ready";
73
- Types["TokenComplete"] = "token-complete";
74
- Types["TokenStorage"] = "token-storage";
75
- Types["TokenFetch"] = "token-fetch";
76
- Types["TokenError"] = "token-error";
77
- Types["ConfigUuid"] = "config-uuid";
78
- Types["ConfigWebId"] = "config-webid";
79
- Types["ConfigDomain"] = "config-domain";
80
- Types["CustomWebId"] = "custom-webid";
81
- Types["AnonymousId"] = "anonymous-id";
82
- Types["TokenChange"] = "token-change";
83
- Types["TokenReset"] = "token-reset";
84
- Types["ConfigTransform"] = "config-transform";
85
- Types["EnvTransform"] = "env-transform";
86
- Types["SessionReset"] = "session-reset";
87
- Types["SessionResetTime"] = "session-reset-time";
88
- Types["Event"] = "event";
89
- Types["Events"] = "events";
90
- Types["EventNow"] = "event-now";
91
- Types["CleanEvents"] = "clean-events";
92
- Types["BeconEvent"] = "becon-event";
93
- Types["SubmitBefore"] = "submit-before";
94
- Types["SubmitScuess"] = "submit-scuess";
95
- Types["SubmitSuccess"] = "submit-success";
96
- Types["SubmitAfter"] = "submit-after";
97
- Types["SubmitError"] = "submit-error";
98
- Types["SubmitVerifyH"] = "submit-verify-h5";
99
- Types["Stay"] = "stay";
100
- Types["ResetStay"] = "reset-stay";
101
- Types["StayReady"] = "stay-ready";
102
- Types["SetStay"] = "set-stay";
103
- Types["RouteChange"] = "route-change";
104
- Types["RouteReady"] = "route-ready";
105
- Types["Ab"] = "ab";
106
- Types["AbVar"] = "ab-var";
107
- Types["AbAllVars"] = "ab-all-vars";
108
- Types["AbConfig"] = "ab-config";
109
- Types["AbExternalVersion"] = "ab-external-version";
110
- Types["AbVersionChangeOn"] = "ab-version-change-on";
111
- Types["AbVersionChangeOff"] = "ab-version-change-off";
112
- Types["AbOpenLayer"] = "ab-open-layer";
113
- Types["AbCloseLayer"] = "ab-close-layer";
114
- Types["AbReady"] = "ab-ready";
115
- Types["AbComplete"] = "ab-complete";
116
- Types["AbTimeout"] = "ab-timeout";
117
- Types["Profile"] = "profile";
118
- Types["ProfileSet"] = "profile-set";
119
- Types["ProfileSetOnce"] = "profile-set-once";
120
- Types["ProfileUnset"] = "profile-unset";
121
- Types["ProfileIncrement"] = "profile-increment";
122
- Types["ProfileAppend"] = "profile-append";
123
- Types["ProfileClear"] = "profile-clear";
124
- Types["TrackDuration"] = "track-duration";
125
- Types["TrackDurationStart"] = "track-duration-start";
126
- Types["TrackDurationEnd"] = "track-duration-end";
127
- Types["TrackDurationPause"] = "track-duration-pause";
128
- Types["TrackDurationResume"] = "tracl-duration-resume";
129
- Types["Autotrack"] = "autotrack";
130
- Types["AutotrackReady"] = "autotrack-ready";
131
- Types["CustomHeader"] = "custom-request-header";
132
- Types["TracerReady"] = "tracer-ready";
133
- })(Types || (Types = {}));
134
- var DebuggerMesssge;
135
- (function (DebuggerMesssge) {
136
- DebuggerMesssge["DEBUGGER_MESSAGE"] = "debugger-message";
137
- DebuggerMesssge["DEBUGGER_MESSAGE_SDK"] = "debugger-message-sdk";
138
- DebuggerMesssge["DEBUGGER_MESSAGE_FETCH"] = "debugger-message-fetch";
139
- DebuggerMesssge["DEBUGGER_MESSAGE_FETCH_RESULT"] = "debugger-message-fetch-result";
140
- DebuggerMesssge["DEBUGGER_MESSAGE_EVENT"] = "debugger-message-event";
141
- DebuggerMesssge["DEVTOOL_WEB_READY"] = "devtool-web-ready";
142
- })(DebuggerMesssge || (DebuggerMesssge = {}));
143
-
144
- // Copyright 2022 Beijing Volcanoengine Technology Ltd. All Rights Reserved.
145
- // @ts-nocheck
146
- // @ts-nocheck
147
- var isObject = function isObject(obj) {
148
- return obj != null && Object.prototype.toString.call(obj) == '[object Object]';
149
- };
150
- (function () {
151
- var lastEventId = +Date.now() + Number(("" + Math.random()).slice(2, 8));
152
- return function () {
153
- lastEventId += 1;
154
- return lastEventId;
155
- };
156
- })();
157
- /* eslint-disable no-param-reassign */
158
- var decrypto = function decrypto(str, xor, hex) {
159
- if (typeof str !== 'string' || typeof xor !== 'number' || typeof hex !== 'number') {
160
- return;
161
- }
162
- var strCharList = [];
163
- var resultList = [];
164
- hex = hex <= 25 ? hex : hex % 25;
165
- var splitStr = String.fromCharCode(hex + 97);
166
- strCharList = str.split(splitStr);
167
- for (var i = 0; i < strCharList.length; i++) {
168
- var charCode = parseInt(strCharList[i], hex);
169
- charCode = charCode * 1 ^ xor;
170
- var strChar = String.fromCharCode(charCode);
171
- resultList.push(strChar);
172
- }
173
- var resultStr = resultList.join('');
174
- return resultStr;
175
- };
176
- var decodeUrl = function decodeUrl(string) {
177
- return decrypto(string, 64, 25);
178
- };
179
- var parseURL = function parseURL(url) {
180
- var a = document.createElement('a');
181
- a.href = url;
182
- return a;
183
- };
184
- var parseUrlQuery = function parseUrlQuery(url) {
185
- var queryObj = {};
186
- try {
187
- var queryString = parseURL(url).search;
188
- queryString = queryString.slice(1);
189
- queryString.split('&').forEach(function (keyValue) {
190
- var _keyValue = keyValue.split('=');
191
- var key;
192
- var value;
193
- if (_keyValue.length) {
194
- key = _keyValue[0];
195
- value = _keyValue[1];
196
- }
197
- try {
198
- queryObj[key] = decodeURIComponent(typeof value === 'undefined' ? '' : value);
199
- } catch (e) {
200
- queryObj[key] = value;
201
- }
202
- });
203
- } catch (e) {}
204
- return queryObj;
205
- };
206
-
207
- function createCommonjsModule(fn, module) {
208
- return module = { exports: {} }, fn(module, module.exports), module.exports;
209
- }
210
-
211
- var cookie = createCommonjsModule(function (module, exports) {
212
- (function (factory) {
213
- var registeredInModuleLoader;
214
- {
215
- module.exports = factory();
216
- registeredInModuleLoader = true;
217
- }
218
- if (!registeredInModuleLoader) {
219
- var OldCookies = window.Cookies;
220
- var api = window.Cookies = factory();
221
- api.noConflict = function () {
222
- window.Cookies = OldCookies;
223
- return api;
224
- };
225
- }
226
- })(function () {
227
- function extend() {
228
- var i = 0;
229
- var result = {};
230
- for (; i < arguments.length; i++) {
231
- var attributes = arguments[i];
232
- for (var key in attributes) {
233
- result[key] = attributes[key];
234
- }
235
- }
236
- return result;
237
- }
238
- function decode(s) {
239
- return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
240
- }
241
- function init(converter) {
242
- function api() {}
243
- function set(key, value, attributes) {
244
- if (typeof document === 'undefined') {
245
- return;
246
- }
247
- attributes = extend({
248
- path: '/'
249
- }, api.defaults, attributes);
250
- if (typeof attributes.expires === 'number') {
251
- attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);
252
- }
253
- attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
254
- try {
255
- var result = JSON.stringify(value);
256
- if (/^[\{\[]/.test(result)) {
257
- value = result;
258
- }
259
- } catch (e) {}
260
- value = converter.write ? converter.write(value, key) : encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
261
- key = encodeURIComponent(String(key)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\(\)]/g, escape);
262
- var stringifiedAttributes = '';
263
- for (var attributeName in attributes) {
264
- if (!attributes[attributeName]) {
265
- continue;
266
- }
267
- stringifiedAttributes += '; ' + attributeName;
268
- if (attributes[attributeName] === true) {
269
- continue;
270
- }
271
- stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
272
- }
273
- return document.cookie = key + '=' + value + stringifiedAttributes;
274
- }
275
- function get(key, json) {
276
- if (typeof document === 'undefined') {
277
- return;
278
- }
279
- var jar = {};
280
- var cookies = document.cookie ? document.cookie.split('; ') : [];
281
- var i = 0;
282
- for (; i < cookies.length; i++) {
283
- var parts = cookies[i].split('=');
284
- var cookie = parts.slice(1).join('=');
285
- if (!json && cookie.charAt(0) === '"') {
286
- cookie = cookie.slice(1, -1);
287
- }
288
- try {
289
- var name = decode(parts[0]);
290
- cookie = (converter.read || converter)(cookie, name) || decode(cookie);
291
- if (json) {
292
- try {
293
- cookie = JSON.parse(cookie);
294
- } catch (e) {}
295
- }
296
- jar[name] = cookie;
297
- if (key === name) {
298
- break;
299
- }
300
- } catch (e) {}
301
- }
302
- return key ? jar[key] : jar;
303
- }
304
- api.set = set;
305
- api.get = function (key) {
306
- return get(key, false );
307
- };
308
- api.getJSON = function (key) {
309
- return get(key, true );
310
- };
311
- api.remove = function (key, attributes) {
312
- set(key, '', extend(attributes, {
313
- expires: -1
314
- }));
315
- };
316
- api.defaults = {};
317
- api.withConverter = init;
318
- return api;
319
- }
320
- return init(function () {});
321
- });
322
- });
323
-
324
- // Copyright 2022 Beijing Volcanoengine Technology Ltd. All Rights Reserved.
325
- /**
326
- * cacheStorage
327
- */
328
- var Memory = /** @class */function () {
329
- function Memory() {
330
- this.cache = {};
331
- }
332
- Memory.prototype.setItem = function (cacheKey, data) {
333
- this.cache[cacheKey] = data;
334
- };
335
- Memory.prototype.getItem = function (cacheKey) {
336
- return this.cache[cacheKey];
337
- };
338
- Memory.prototype.removeItem = function (cacheKey) {
339
- this.cache[cacheKey] = undefined;
340
- };
341
- return Memory;
342
- }();
343
- /**
344
- * localStorage
345
- */
346
- var Local = /** @class */function () {
347
- function Local() {
348
- this.support = this.isSupportLS();
349
- }
350
- Local.prototype.isSupportLS = function () {
351
- try {
352
- localStorage.setItem('_applogtest-test-key', 'hi');
353
- localStorage.getItem('_applogtest-test-key');
354
- localStorage.removeItem('_applogtest-test-key');
355
- return true;
356
- } catch (e) {
357
- return false;
358
- }
359
- };
360
- Local.prototype.getItem = function (key) {
361
- try {
362
- var value = localStorage.getItem(key);
363
- var ret = value;
364
- try {
365
- if (value && typeof value === 'string') {
366
- ret = JSON.parse(value);
367
- }
368
- } catch (e) {}
369
- return ret || {};
370
- } catch (e) {}
371
- return {};
372
- };
373
- Local.prototype.setItem = function (key, value) {
374
- try {
375
- var stringValue = typeof value === 'string' ? value : JSON.stringify(value);
376
- localStorage.setItem(key, stringValue);
377
- } catch (e) {}
378
- };
379
- Local.prototype.removeItem = function (key) {
380
- try {
381
- localStorage.removeItem(key);
382
- } catch (e) {}
383
- };
384
- return Local;
385
- }();
386
- /**
387
- * sessionStorage
388
- */
389
- var Session = /** @class */function () {
390
- function Session() {
391
- this.support = this.isSupportSession();
392
- }
393
- Session.prototype.isSupportSession = function () {
394
- try {
395
- sessionStorage.setItem('_applogtest-test-key', 'hi');
396
- sessionStorage.getItem('_applogtest-test-key');
397
- sessionStorage.removeItem('_applogtest-test-key');
398
- return true;
399
- } catch (e) {
400
- return false;
401
- }
402
- };
403
- Session.prototype.getItem = function (key) {
404
- try {
405
- var value = sessionStorage.getItem(key);
406
- var ret = value;
407
- try {
408
- if (value && typeof value === 'string') {
409
- ret = JSON.parse(value);
410
- }
411
- } catch (e) {}
412
- return ret || {};
413
- } catch (e) {}
414
- return {};
415
- };
416
- Session.prototype.setItem = function (key, value) {
417
- try {
418
- var stringValue = typeof value === 'string' ? value : JSON.stringify(value);
419
- sessionStorage.setItem(key, stringValue);
420
- } catch (e) {}
421
- };
422
- Session.prototype.removeItem = function (key) {
423
- try {
424
- sessionStorage.removeItem(key);
425
- } catch (e) {}
426
- };
427
- return Session;
428
- }();
429
- var StorageManager = /** @class */function () {
430
- function StorageManager() {
431
- this.defaultExpireTime = 7 * 1000 * 60 * 60 * 24;
432
- this.local = new Local();
433
- this.session = new Session();
434
- this.cache = new Memory();
435
- }
436
- StorageManager.prototype.getLocalItem = function (key) {
437
- return this.local.getItem(key);
438
- };
439
- StorageManager.prototype.setLocalItem = function (key, value) {
440
- this.local.setItem(key, value);
441
- };
442
- StorageManager.prototype.removeLocalItem = function (key) {
443
- this.local.removeItem(key);
444
- };
445
- StorageManager.prototype.getSessionItem = function (key) {
446
- return this.session.getItem(key);
447
- };
448
- StorageManager.prototype.setSessionItem = function (key, value) {
449
- this.session.setItem(key, value);
450
- };
451
- StorageManager.prototype.removeSessionItem = function (key) {
452
- this.session.removeItem(key);
453
- };
454
- StorageManager.prototype.getCacheItem = function (key) {
455
- return this.cache.getItem(key);
456
- };
457
- StorageManager.prototype.setCacheItem = function (key, value) {
458
- this.cache.setItem(key, value);
459
- };
460
- StorageManager.prototype.removeCacheItem = function (key) {
461
- this.cache.removeItem(key);
462
- };
463
- StorageManager.prototype.getCookie = function (key, domain) {
464
- try {
465
- // const _matches = Cookies.get(name, { domain: domain || document.domain })
466
- var _matches = cookie.get(key);
467
- return _matches;
468
- } catch (e) {
469
- return '';
470
- }
471
- };
472
- StorageManager.prototype.setCookie = function (key, value, expiresTime, domain) {
473
- if (expiresTime === void 0) {
474
- expiresTime = this.defaultExpireTime;
475
- }
476
- try {
477
- var _domain = domain || document.domain;
478
- var timestamp = +new Date();
479
- var furureTimestamp = timestamp + expiresTime;
480
- cookie.set(key, value, {
481
- expires: new Date(furureTimestamp),
482
- path: '/',
483
- domain: _domain
484
- });
485
- } catch (e) {}
486
- };
487
- StorageManager.prototype.removeCookie = function (key, domain) {
488
- try {
489
- cookie.remove(key, {
490
- path: '/',
491
- domain: domain || ''
492
- });
493
- } catch (e) {}
494
- };
495
- return StorageManager;
496
- }();
497
-
498
- var CallbackType;
499
- (function (CallbackType) {
500
- CallbackType[CallbackType["Var"] = 0] = "Var";
501
- CallbackType[CallbackType["All"] = 1] = "All";
502
- })(CallbackType || (CallbackType = {}));
503
- var STORAGE_EXPRIRE = 1 * 30 * 24 * 60 * 60 * 1000;
504
- var API = '/service/2/abtest_config/';
505
- var Ab = /** @class */function () {
506
- function Ab() {
507
- this.fetchStatus = 'no';
508
- this.refreshFetchStatus = 'complete';
509
- this.versions = [];
510
- this.extVersions = [];
511
- this.mulilinkVersions = [];
512
- this.enable_multilink = false;
513
- this.enable_ab_visual = false;
514
- this.editMode = false;
515
- this.callbacks = [];
516
- this.data = null;
517
- this.changeListener = new Map();
518
- this.readyStatus = false;
519
- this.exposureCache = [];
520
- }
521
- Ab.prototype.apply = function (collect, config) {
522
- var _this = this;
523
- this.collect = collect;
524
- this.config = config;
525
- if (!this.config.enable_ab_test) return;
526
- var enable_multilink = config.enable_multilink,
527
- ab_channel_domain = config.ab_channel_domain,
528
- enable_ab_visual = config.enable_ab_visual,
529
- ab_cross = config.ab_cross,
530
- ab_cookie_domain = config.ab_cookie_domain,
531
- disable_ab_reset = config.disable_ab_reset;
532
- var abDomain = ab_channel_domain || decodeUrl(AB_DOMAINS[config.channel || 'cn']);
533
- this.cacheStorgae = new StorageManager();
534
- this.enable_multilink = enable_multilink;
535
- this.enable_ab_visual = enable_ab_visual;
536
- this.abKey = "__tea_sdk_ab_version_" + config.app_id;
537
- this.ab_cross = ab_cross;
538
- this.ab_cookie_domain = ab_cookie_domain || '';
539
- this.fetchUrl = "" + abDomain + API;
540
- this.reportUrl = "" + collect.configManager.getUrl('event');
541
- this.exposureLimit = config.exposure_limit || 20;
542
- this.ab_batch_time = config.ab_batch_time || 500;
543
- var Types = this.collect.Types;
544
- this.types = Types;
545
- this.collect.on(Types.TokenChange, function (tokenInfo) {
546
- if (disable_ab_reset) return;
547
- if (tokenInfo.type !== 'uuid') return;
548
- if (!_this.readyStatus) return;
549
- _this.clearCache();
550
- _this.fetchAB();
551
- });
552
- this.collect.on(Types.TokenReset, function () {
553
- if (disable_ab_reset) return;
554
- if (!_this.readyStatus) return;
555
- _this.clearCache();
556
- _this.fetchAB();
557
- });
558
- this.collect.on(Types.AbVar, function (_a) {
559
- var name = _a.name,
560
- defaultValue = _a.defaultValue,
561
- callback = _a.callback;
562
- _this.getVar(name, defaultValue, callback);
563
- });
564
- this.collect.on(Types.AbAllVars, function (callback) {
565
- _this.getAllVars(callback);
566
- });
567
- this.collect.on(Types.AbConfig, function (_a) {
568
- var params = _a.params,
569
- callback = _a.callback;
570
- _this.getABconfig(params, callback);
571
- });
572
- this.collect.on(Types.AbExternalVersion, function (vids) {
573
- _this.setExternalAbVersion(vids);
574
- });
575
- this.collect.on(Types.AbOpenLayer, function () {
576
- _this.openOverlayer();
577
- });
578
- this.collect.on(Types.AbCloseLayer, function () {
579
- _this.closeOverlayer();
580
- });
581
- this.collect.on(Types.AbVersionChangeOn, function (cb) {
582
- _this.changeListener.set(cb, cb);
583
- });
584
- this.collect.on(Types.AbVersionChangeOff, function (cb) {
585
- if (_this.changeListener.get(cb)) {
586
- _this.changeListener["delete"](cb);
587
- }
588
- });
589
- this.loadMode();
590
- (this.enable_ab_visual || this.enable_multilink) && this.openOverlayer(this.config.multilink_timeout_ms || 500);
591
- this.checkLocal();
592
- this.ready('ab');
593
- if (!this.readyStatus) {
594
- this.fetchAB();
595
- this.readyStatus = true;
596
- }
597
- this.collect.emit(Types.AbReady);
598
- };
599
- Ab.prototype.ready = function (name) {
600
- var _this = this;
601
- this.collect.set(name);
602
- if (this.collect.hook._hooksCache.hasOwnProperty(name)) {
603
- var emits = this.collect.hook._hooksCache[name];
604
- if (!Object.keys(emits).length) return;
605
- var _loop_1 = function _loop_1(key) {
606
- if (emits[key].length) {
607
- emits[key].forEach(function (item) {
608
- _this.collect.hook.emit(key, item);
609
- });
610
- }
611
- };
612
- for (var key in emits) {
613
- _loop_1(key);
614
- }
615
- }
616
- };
617
- Ab.prototype.loadMode = function () {
618
- // const name = getIframeUrl();
619
- // let editMode = '';
620
- // if (name) {
621
- // const { scenario, href } = name;
622
- // if (scenario) {
623
- // this.editMode = true;
624
- // editMode = scenario;
625
- // } else if (
626
- // href &&
627
- // (href.indexOf('datatester') !== -1 ||
628
- // href.indexOf('visual-editor') !== -1)
629
- // ) {
630
- // this.editMode = true;
631
- // editMode = 'visual-editor';
632
- // }
633
- // }
634
- // if (this.enable_ab_visual) {
635
- // readyToLoadEditor(this.collect, this.config);
636
- // if (editMode === 'visual-editor') {
637
- // this.collect.destoryInstace();
638
- // return;
639
- // }
640
- // }
641
- // if (this.enable_multilink) {
642
- // loadMuiltlink(this.collect, this.config);
643
- // }
644
- };
645
- Ab.prototype.checkLocal = function () {
646
- var _a = this.getABCache(),
647
- ab_version = _a.ab_version,
648
- ab_ext_version = _a.ab_ext_version,
649
- ab_version_multilink = _a.ab_version_multilink,
650
- data = _a.data;
651
- var mulilinkUrlVid = this.checkFromUrl();
652
- if (mulilinkUrlVid) {
653
- this.mulilinkVersions.push(mulilinkUrlVid);
654
- } else {
655
- this.mulilinkVersions = ab_version_multilink || [];
656
- }
657
- this.extVersions = ab_ext_version || [];
658
- this.versions = ab_version || [];
659
- this.data = data;
660
- var vids = this.versions.concat(this.extVersions);
661
- if (this.enable_multilink) {
662
- vids = vids.concat(this.mulilinkVersions);
663
- }
664
- this.configVersions(vids.join(','));
665
- };
666
- Ab.prototype.checkFromUrl = function () {
667
- var urlQueryObj = parseUrlQuery(window.location.href);
668
- if (urlQueryObj && urlQueryObj['vid']) {
669
- return urlQueryObj['vid'];
670
- }
671
- return '';
672
- };
673
- Ab.prototype.updateVersions = function () {
674
- var versions = this.extVersions.length ? this.versions.concat(this.extVersions) : this.versions;
675
- if (this.enable_multilink) {
676
- versions = versions.concat(this.mulilinkVersions);
677
- }
678
- this.configVersions(versions.join(','));
679
- this.updateABCache();
680
- this.changeListener.size > 0 && this.changeListener.forEach(function (listener) {
681
- if (typeof listener === 'function') {
682
- listener(versions);
683
- }
684
- });
685
- };
686
- Ab.prototype.configVersions = function (vids) {
687
- this.collect.configManager.setAbVersion(vids);
688
- };
689
- Ab.prototype.getVar = function (name, defaultValue, callback) {
690
- if (!name) {
691
- throw new Error('variable must not be empty');
692
- }
693
- if (defaultValue === undefined) {
694
- throw new Error('variable no default value');
695
- }
696
- if (typeof callback !== 'function') {
697
- throw new Error('callback must be a function');
698
- }
699
- var callbackObj = {
700
- name: name,
701
- defaultValue: defaultValue,
702
- callback: callback,
703
- type: CallbackType.Var
704
- };
705
- if (this.fetchStatus === 'complete' && this.refreshFetchStatus === 'complete') {
706
- this.getRealVar(callbackObj, name);
707
- } else {
708
- this.callbacks.push(callbackObj);
709
- }
710
- };
711
- Ab.prototype.getRealVar = function (item, key) {
712
- var name = item.name,
713
- defaultValue = item.defaultValue,
714
- callback = item.callback;
715
- var data = this.data;
716
- if (!data) {
717
- callback(defaultValue);
718
- return;
719
- }
720
- if (isObject(data[name])) {
721
- var vid = data[name].vid;
722
- if (key === '$ab_url') {
723
- if (!this.mulilinkVersions.includes(vid)) {
724
- this.mulilinkVersions.push(vid);
725
- }
726
- } else {
727
- if (!this.versions.includes(vid)) {
728
- this.versions.push(vid);
729
- }
730
- }
731
- this.updateVersions();
732
- this.fechEvent(vid, key, defaultValue);
733
- callback(data[name].val);
734
- this.collect.emit(DebuggerMesssge.DEBUGGER_MESSAGE, {
735
- type: DebuggerMesssge.DEBUGGER_MESSAGE_SDK,
736
- secType: 'AB',
737
- info: "SDK \u66DD\u5149\u4E86\u5B9E\u9A8C" + name,
738
- level: 'info',
739
- time: Date.now(),
740
- data: data[name]
741
- });
742
- return;
743
- }
744
- this.collect.emit(DebuggerMesssge.DEBUGGER_MESSAGE, {
745
- type: DebuggerMesssge.DEBUGGER_MESSAGE_SDK,
746
- secType: 'AB',
747
- info: 'SDK 调用getVar',
748
- level: 'info',
749
- time: Date.now(),
750
- data: defaultValue
751
- });
752
- callback(defaultValue);
753
- };
754
- Ab.prototype.getAllVars = function (callback) {
755
- if (typeof callback !== 'function') {
756
- throw new Error('callback must be a function');
757
- }
758
- var callbackObj = {
759
- callback: callback,
760
- type: CallbackType.All
761
- };
762
- if (this.fetchStatus === 'complete' && this.refreshFetchStatus === 'complete') {
763
- this.getRealAllVars(callbackObj);
764
- } else {
765
- this.callbacks.push(callbackObj);
766
- }
767
- };
768
- Ab.prototype.getRealAllVars = function (item) {
769
- var callback = item.callback;
770
- callback(this.data ? JSON.parse(JSON.stringify(this.data)) : {});
771
- this.collect.emit(DebuggerMesssge.DEBUGGER_MESSAGE, {
772
- type: DebuggerMesssge.DEBUGGER_MESSAGE_SDK,
773
- secType: 'AB',
774
- info: 'SDK 调用getAllVars',
775
- level: 'info',
776
- time: Date.now(),
777
- data: this.data
778
- });
779
- };
780
- Ab.prototype.fechEvent = function (vid, key, ab_url) {
781
- try {
782
- if (this.config.disable_track_event) return;
783
- if (!vid) return;
784
- var _a = this.collect.configManager.get(),
785
- header = _a.header,
786
- user = _a.user;
787
- var cache = this.getABCache();
788
- if (cache && cache.uuid && cache.uuid !== user.user_unique_id) return;
789
- var event_1 = {
790
- event: 'abtest_exposure',
791
- ab_sdk_version: "" + vid,
792
- params: JSON.stringify({
793
- app_id: this.config.appId,
794
- ab_url: key === '$ab_url' ? ab_url : window.location.href
795
- }),
796
- local_time_ms: Date.now()
797
- };
798
- header['custom'] = JSON.stringify(header['custom']);
799
- var abData = {
800
- events: [event_1],
801
- user: user,
802
- header: header
803
- };
804
- if (key === '$ab_url') {
805
- if (window.navigator.sendBeacon) {
806
- window.navigator.sendBeacon(this.reportUrl, JSON.stringify([abData]));
807
- } else {
808
- this.reportExposure(abData);
809
- }
810
- } else {
811
- this.reportExposure(abData);
812
- }
813
- } catch (e) {
814
- this.collect.emit(DebuggerMesssge.DEBUGGER_MESSAGE, {
815
- type: DebuggerMesssge.DEBUGGER_MESSAGE_SDK,
816
- info: '发生了异常',
817
- level: 'error',
818
- time: Date.now(),
819
- data: e.message
820
- });
821
- }
822
- };
823
- Ab.prototype.reportExposure = function (abData) {
824
- var _this = this;
825
- this.exposureCache.push(abData);
826
- if (this.reportTimeout) {
827
- clearTimeout(this.reportTimeout);
828
- }
829
- if (this.exposureCache.length >= this.exposureLimit) {
830
- this.report();
831
- } else {
832
- this.reportTimeout = setTimeout(function () {
833
- _this.report();
834
- clearTimeout(_this.reportTimeout);
835
- }, this.ab_batch_time);
836
- }
837
- };
838
- Ab.prototype.report = function () {
839
- var _this = this;
840
- var encodeData = this.collect.cryptoData(this.exposureCache);
841
- this.collect.requestManager.useRequest({
842
- url: this.reportUrl,
843
- data: encodeData,
844
- timeout: 100000,
845
- useBeacon: false,
846
- encryption: this.config.enable_encryption,
847
- encryption_header: this.config.encryption_header,
848
- zip: true,
849
- type: 'event'
850
- });
851
- this.exposureCache.forEach(function (item) {
852
- _this.collect.emit(DebuggerMesssge.DEBUGGER_MESSAGE, {
853
- type: DebuggerMesssge.DEBUGGER_MESSAGE_EVENT,
854
- info: '埋点上报成功',
855
- time: Date.now(),
856
- data: [item],
857
- code: 200,
858
- status: 'success'
859
- });
860
- });
861
- this.exposureCache = [];
862
- };
863
- Ab.prototype.setExternalAbVersion = function (vid) {
864
- this.extVersions = [vid];
865
- this.updateVersions();
866
- };
867
- Ab.prototype.getABconfig = function (params, callback) {
868
- var keys = Object.keys(params);
869
- if (keys && keys.length) {
870
- this.collect.configManager.set(params);
871
- }
872
- this.fetchAB(callback);
873
- };
874
- Ab.prototype.get = function (key) {
875
- if (this.ab_cross) {
876
- var ab_cookie = this.cacheStorgae.getCookie(key, this.ab_cookie_domain);
877
- return ab_cookie ? JSON.parse(ab_cookie) : null;
878
- } else {
879
- return this.cacheStorgae.getLocalItem(key);
880
- }
881
- };
882
- Ab.prototype.set = function (key, data) {
883
- if (this.ab_cross) {
884
- this.cacheStorgae.setCookie(key, data, STORAGE_EXPRIRE, this.ab_cookie_domain);
885
- } else {
886
- this.cacheStorgae.setLocalItem(key, data);
887
- }
888
- this.collect.configManager.setAbCache(data);
889
- };
890
- Ab.prototype.getABCache = function (key) {
891
- var data = {
892
- ab_version: [],
893
- ab_ext_version: [],
894
- ab_version_multilink: [],
895
- data: null,
896
- timestamp: +new Date(),
897
- uuid: ''
898
- };
899
- data = this.get(this.abKey) || data;
900
- if (Date.now() - data.timestamp >= STORAGE_EXPRIRE) {
901
- this.cacheStorgae.removeLocalItem(this.abKey);
902
- return null;
903
- }
904
- if (key) {
905
- return data[key];
906
- }
907
- return data;
908
- };
909
- Ab.prototype.updateABCache = function () {
910
- var cache = this.getABCache();
911
- cache.ab_version_multilink = this.mulilinkVersions;
912
- cache.ab_ext_version = this.extVersions;
913
- cache.ab_version = this.versions;
914
- cache.timestamp = Date.now();
915
- this.set(this.abKey, cache);
916
- };
917
- Ab.prototype.setAbCache = function (uuid) {
918
- var cache = this.getABCache();
919
- cache.data = this.data;
920
- cache.uuid = uuid;
921
- cache.timestamp = Date.now();
922
- this.set(this.abKey, cache);
923
- };
924
- Ab.prototype.clearCache = function () {
925
- this.refreshFetchStatus = 'ing';
926
- this.data = {};
927
- this.extVersions = [];
928
- this.mulilinkVersions = [];
929
- this.versions = [];
930
- this.collect.configManager.clearAbCache();
931
- };
932
- Ab.prototype.openOverlayer = function (timeout) {
933
- var _this = this;
934
- openOverlayer();
935
- if (timeout) {
936
- var layer_1 = setTimeout(function () {
937
- _this.closeOverlayer();
938
- clearTimeout(layer_1);
939
- }, timeout);
940
- }
941
- };
942
- Ab.prototype.closeOverlayer = function () {
943
- closeOverlayer();
944
- };
945
- Ab.prototype.fetchComplete = function (abData, uuid) {
946
- var _this = this;
947
- if (abData && Object.prototype.toString.call(abData) == '[object Object]') {
948
- this.data = abData;
949
- this.setAbCache(uuid);
950
- var versions_1 = [];
951
- Object.keys(abData).forEach(function (key) {
952
- var vid = abData[key].vid;
953
- if (vid) {
954
- versions_1.push(vid);
955
- }
956
- });
957
- this.versions = this.versions.filter(function (vid) {
958
- return versions_1.includes(vid);
959
- });
960
- var $ab_url = abData.$ab_url,
961
- $ab_modification = abData.$ab_modification;
962
- if ($ab_modification && $ab_modification.val && this.enable_ab_visual) {
963
- if (this.collect.destroy) return;
964
- this.getVar('$ab_modification', window.location.href, function () {
965
- // loadVisual($ab_modification.val);
966
- _this.closeOverlayer();
967
- });
968
- } else if ($ab_url && this.enable_multilink) {
969
- this.mulilinkVersions = this.mulilinkVersions.filter(function (vid) {
970
- return versions_1.includes(vid);
971
- });
972
- var val_1 = $ab_url.val,
973
- vid_1 = $ab_url.vid;
974
- if (val_1 && vid_1) {
975
- this.getVar('$ab_url', val_1, function () {
976
- if (_this.editMode) return;
977
- if (val_1 !== window.location.href) {
978
- setTimeout(function () {
979
- if (_this.collect.destroy) return;
980
- var jump = "" + val_1;
981
- jump = jump.indexOf('http') === -1 ? "https://" + jump : jump;
982
- var newhost = parseURL(jump).host;
983
- try {
984
- var urlObj = new URL(jump);
985
- if (newhost !== location.host) {
986
- // 跳转的是一个新域名
987
- urlObj.searchParams.append('vid', vid_1);
988
- } else {
989
- // 不同的域名不能replace
990
- window.history.replaceState('', '', jump);
991
- }
992
- window.location.href = urlObj.href;
993
- } catch (e) {
994
- window.location.href = jump;
995
- }
996
- }, 100);
997
- } else {
998
- _this.closeOverlayer();
999
- }
1000
- });
1001
- }
1002
- }
1003
- this.updateVersions();
1004
- } else {
1005
- this.closeOverlayer();
1006
- }
1007
- this.callbacks.forEach(function (item) {
1008
- return _this[item.type === CallbackType.Var ? 'getRealVar' : 'getRealAllVars'](item, '');
1009
- });
1010
- this.callbacks = [];
1011
- };
1012
- Ab.prototype.fetchAB = function (callback) {
1013
- var _this = this;
1014
- var env = this.collect.configManager.get();
1015
- var header = env.header,
1016
- user = env.user;
1017
- if (this.config.enable_anonymousid) {
1018
- delete user.web_id;
1019
- }
1020
- var fetchUuid = user.user_unique_id;
1021
- var requestBody = {
1022
- header: __assign(__assign(__assign({
1023
- aid: this.config.app_id
1024
- }, user || {}), header || {}), {
1025
- ab_sdk_version: this.collect.configManager.getAbVersion(),
1026
- ab_url: window.location.href
1027
- })
1028
- };
1029
- var cryptoData = this.collect.cryptoData(requestBody);
1030
- this.collect.emit(DebuggerMesssge.DEBUGGER_MESSAGE, {
1031
- type: DebuggerMesssge.DEBUGGER_MESSAGE_SDK,
1032
- info: 'SDK 发起AB实验请求',
1033
- level: 'info',
1034
- logType: 'fetch',
1035
- time: Date.now(),
1036
- data: requestBody,
1037
- infoType: 'sdk'
1038
- });
1039
- this.collect.requestManager.useRequest({
1040
- url: this.fetchUrl,
1041
- data: cryptoData,
1042
- success: function success(response) {
1043
- _this.fetchStatus = 'complete';
1044
- _this.refreshFetchStatus = 'complete';
1045
- // let aa = {
1046
- // message: "success",
1047
- // data: {
1048
- // abcdefg: { val: "gss", vid: "11407" },
1049
- // erf: { val: 'name', vid: "22" },
1050
- // hhhhh: { val: 'age', vid: "33" },
1051
- // juuioh: { val: 'sex', vid: "44" },
1052
- // $ab_url: { val: 'http://0.0.0.0:8899/index_cdn_5.html?off=true', vid: '0000' }
1053
- // }
1054
- // }
1055
- // if (env.user.user_unique_id === 'ssss') {
1056
- // aa.data.abcdefg.vid = '00000'
1057
- // }
1058
- var data = response.data,
1059
- message = response.message; // 解析出code
1060
- if (message === 'success') {
1061
- _this.fetchComplete(data, fetchUuid);
1062
- callback && callback(data);
1063
- } else {
1064
- _this.fetchComplete(null, fetchUuid);
1065
- callback && callback(null);
1066
- }
1067
- _this.collect.emit(_this.types.AbComplete, data);
1068
- _this.collect.emit(DebuggerMesssge.DEBUGGER_MESSAGE, {
1069
- type: DebuggerMesssge.DEBUGGER_MESSAGE_SDK,
1070
- secType: 'AB',
1071
- info: 'AB实验请求成功',
1072
- level: 'info',
1073
- logType: 'fetch',
1074
- time: Date.now(),
1075
- data: data,
1076
- infoType: 'sdk'
1077
- });
1078
- },
1079
- fail: function fail() {
1080
- _this.fetchStatus = 'complete';
1081
- _this.refreshFetchStatus = 'complete';
1082
- _this.fetchComplete(null, fetchUuid);
1083
- callback && callback(null);
1084
- _this.collect.emit(_this.types.AbTimeout);
1085
- _this.collect.emit(DebuggerMesssge.DEBUGGER_MESSAGE, {
1086
- type: DebuggerMesssge.DEBUGGER_MESSAGE_SDK,
1087
- secType: 'AB',
1088
- info: 'AB实验请求网络异常',
1089
- level: 'error',
1090
- logType: 'fetch',
1091
- time: Date.now(),
1092
- infoType: 'sdk'
1093
- });
1094
- },
1095
- timeout: this.config.ab_timeout || 10000,
1096
- encryption: this.config.enable_encryption,
1097
- encryption_header: this.config.encryption_header
1098
- });
1099
- };
1100
- Ab.prototype.filterUrl = function (url) {
1101
- try {
1102
- var _reg = '';
1103
- if (url.indexOf('&multilink=true') !== -1) {
1104
- _reg = '&multilink=true[\x00-\xff]*';
1105
- } else if (url.indexOf('?multilink=true') !== -1) {
1106
- _reg = '\\?multilink=true[\x00-\xff]*';
1107
- }
1108
- var reg = new RegExp(_reg, 'g');
1109
- url = url.replace(reg, '');
1110
- } catch (e) {}
1111
- return url;
1112
- };
1113
- return Ab;
1114
- }();
1115
-
1116
- module.exports = Ab;
1
+ "use strict";function e(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}var t="__rangers_ab_style__";var i={cn:"1fz22z22z1nz21z4mz4bz4bz22z1mz19z1jz1mz1ez4az1az22z1mz19z21z1lz21z21z1bz1iz4az1az1mz1k",va:"1fz22z22z1nz21z4mz4bz4bz22z1mz19z1jz1mz1ez4az1gz22z1mz19z21z1lz21z21z1bz1iz4az1az1mz1k",sg:"1fz22z22z1nz21z4mz4bz4bz22z1mz19z1jz1mz1ez4az22z1mz19z21z1lz21z21z1bz1iz4az1az1mz1k"},n=function(e){return e.DEBUGGER_MESSAGE="debugger-message",e.DEBUGGER_MESSAGE_SDK="debugger-message-sdk",e.DEBUGGER_MESSAGE_FETCH="debugger-message-fetch",e.DEBUGGER_MESSAGE_FETCH_RESULT="debugger-message-fetch-result",e.DEBUGGER_MESSAGE_EVENT="debugger-message-event",e.DEVTOOL_WEB_READY="devtool-web-ready",e}({});Date.now(),Number((""+Math.random()).slice(2,8));var o=function(e){return function(e,t,i){if("string"==typeof e&&"number"==typeof t&&"number"==typeof i){var n,o=[];i=i<=25?i:i%25;var s=String.fromCharCode(i+97);n=e.split(s);for(var r=0;r<n.length;r++){var a=parseInt(n[r],i);a=1*a^t;var c=String.fromCharCode(a);o.push(c)}return o.join("")}}(e,64,25)},s=function(e){var t=document.createElement("a");return t.href=e,t};var r=function(e,t){return e(t={exports:{}},t.exports),t.exports}(function(e,t){var i;i=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var i=arguments[e];for(var n in i)t[n]=i[n]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function i(n){function o(){}function s(t,i,s){if("undefined"!=typeof document){"number"==typeof(s=e({path:"/"},o.defaults,s)).expires&&(s.expires=new Date(1*new Date+864e5*s.expires)),s.expires=s.expires?s.expires.toUTCString():"";try{var r=JSON.stringify(i);/^[\{\[]/.test(r)&&(i=r)}catch(e){}i=n.write?n.write(i,t):encodeURIComponent(String(i)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);var a="";for(var c in s)s[c]&&(a+="; "+c,!0!==s[c]&&(a+="="+s[c].split(";")[0]));return document.cookie=t+"="+i+a}}function r(e,i){if("undefined"!=typeof document){for(var o={},s=document.cookie?document.cookie.split("; "):[],r=0;r<s.length;r++){var a=s[r].split("="),c=a.slice(1).join("=");i||'"'!==c.charAt(0)||(c=c.slice(1,-1));try{var l=t(a[0]);if(c=(n.read||n)(c,l)||t(c),i)try{c=JSON.parse(c)}catch(e){}if(o[l]=c,e===l)break}catch(e){}}return e?o[e]:o}}return o.set=s,o.get=function(e){return r(e,!1)},o.getJSON=function(e){return r(e,!0)},o.remove=function(t,i){s(t,"",e(i,{expires:-1}))},o.defaults={},o.withConverter=i,o}(function(){})},e.exports=i()}),a=function(){function t(){e(this,"cache",void 0),this.cache={}}var i=t.prototype;return i.setItem=function(e,t){this.cache[e]=t},i.getItem=function(e){return this.cache[e]},i.removeItem=function(e){this.cache[e]=void 0},t}(),c=function(){function t(){e(this,"support",void 0),this.support=this.isSupportLS()}var i=t.prototype;return i.isSupportLS=function(){try{return localStorage.setItem("_applogtest-test-key","hi"),localStorage.getItem("_applogtest-test-key"),localStorage.removeItem("_applogtest-test-key"),!0}catch(e){return!1}},i.getItem=function(e){try{var t=localStorage.getItem(e),i=t;try{t&&"string"==typeof t&&(i=JSON.parse(t))}catch(e){}return i||{}}catch(e){}return{}},i.setItem=function(e,t){try{var i="string"==typeof t?t:JSON.stringify(t);localStorage.setItem(e,i)}catch(e){}},i.removeItem=function(e){try{localStorage.removeItem(e)}catch(e){}},t}(),l=function(){function t(){e(this,"support",void 0),this.support=this.isSupportSession()}var i=t.prototype;return i.isSupportSession=function(){try{return sessionStorage.setItem("_applogtest-test-key","hi"),sessionStorage.getItem("_applogtest-test-key"),sessionStorage.removeItem("_applogtest-test-key"),!0}catch(e){return!1}},i.getItem=function(e){try{var t=sessionStorage.getItem(e),i=t;try{t&&"string"==typeof t&&(i=JSON.parse(t))}catch(e){}return i||{}}catch(e){}return{}},i.setItem=function(e,t){try{var i="string"==typeof t?t:JSON.stringify(t);sessionStorage.setItem(e,i)}catch(e){}},i.removeItem=function(e){try{sessionStorage.removeItem(e)}catch(e){}},t}(),h=function(){function t(){e(this,"local",void 0),e(this,"session",void 0),e(this,"cache",void 0),e(this,"defaultExpireTime",void 0),this.defaultExpireTime=6048e5,this.local=new c,this.session=new l,this.cache=new a}var i=t.prototype;return i.getLocalItem=function(e){return this.local.getItem(e)},i.setLocalItem=function(e,t){this.local.setItem(e,t)},i.removeLocalItem=function(e){this.local.removeItem(e)},i.getSessionItem=function(e){return this.session.getItem(e)},i.setSessionItem=function(e,t){this.session.setItem(e,t)},i.removeSessionItem=function(e){this.session.removeItem(e)},i.getCacheItem=function(e){return this.cache.getItem(e)},i.setCacheItem=function(e,t){this.cache.setItem(e,t)},i.removeCacheItem=function(e){this.cache.removeItem(e)},i.getCookie=function(e,t){try{return r.get(e)}catch(e){return""}},i.setCookie=function(e,t,i,n){void 0===i&&(i=this.defaultExpireTime);try{var o=n||document.domain,s=+new Date+i;r.set(e,t,{expires:new Date(s),path:"/",domain:o})}catch(e){}},i.removeCookie=function(e,t){try{r.remove(e,{path:"/",domain:t||""})}catch(e){}},t}(),u=function(e){return e[e.Var=0]="Var",e[e.All=1]="All",e}(u||{}),f=2592e6,m=function(){function r(){e(this,"collect",void 0),e(this,"config",void 0),e(this,"abOption",void 0),e(this,"fetchUrl",void 0),e(this,"reportUrl",void 0),e(this,"fetchStatus","no"),e(this,"refreshFetchStatus","complete"),e(this,"versions",[]),e(this,"extVersions",[]),e(this,"mulilinkVersions",[]),e(this,"enable_multilink",!1),e(this,"enable_ab_visual",!1),e(this,"editMode",!1),e(this,"callbacks",[]),e(this,"abKey",void 0),e(this,"cacheStorgae",void 0),e(this,"data",null),e(this,"changeListener",new Map),e(this,"fetch",void 0),e(this,"readyStatus",!1),e(this,"types",void 0),e(this,"ab_cross",void 0),e(this,"ab_cookie_domain",void 0),e(this,"exposureCache",[]),e(this,"exposureLimit",void 0),e(this,"ab_batch_time",void 0),e(this,"reportTimeout",void 0)}var a=r.prototype;return a.apply=function(e,t){var n=this;if(this.collect=e,this.config=t,this.config.enable_ab_test){var s=t.enable_multilink,r=t.ab_channel_domain,a=t.enable_ab_visual,c=t.ab_cross,l=t.ab_cookie_domain,u=t.disable_ab_reset,f=r||o(i[t.channel||"cn"]);this.cacheStorgae=new h,this.enable_multilink=s,this.enable_ab_visual=a,this.abKey="__tea_sdk_ab_version_"+t.app_id,this.ab_cross=c,this.ab_cookie_domain=l||"",this.fetchUrl=f+"/service/2/abtest_config/",this.reportUrl=""+e.configManager.getUrl("event"),this.exposureLimit=t.exposure_limit||20,this.ab_batch_time=t.ab_batch_time||500;var m=this.collect.Types;this.types=m,this.collect.on(m.TokenChange,function(e){u||"uuid"===e.type&&n.readyStatus&&(n.clearCache(),n.fetchAB())}),this.collect.on(m.TokenReset,function(){u||n.readyStatus&&(n.clearCache(),n.fetchAB())}),this.collect.on(m.AbVar,function(e){var t=e.name,i=e.defaultValue,o=e.callback;n.getVar(t,i,o)}),this.collect.on(m.AbAllVars,function(e){n.getAllVars(e)}),this.collect.on(m.AbConfig,function(e){var t=e.params,i=e.callback;n.getABconfig(t,i)}),this.collect.on(m.AbExternalVersion,function(e){n.setExternalAbVersion(e)}),this.collect.on(m.AbOpenLayer,function(){n.openOverlayer()}),this.collect.on(m.AbCloseLayer,function(){n.closeOverlayer()}),this.collect.on(m.AbVersionChangeOn,function(e){n.changeListener.set(e,e)}),this.collect.on(m.AbVersionChangeOff,function(e){n.changeListener.get(e)&&n.changeListener.delete(e)}),this.loadMode(),(this.enable_ab_visual||this.enable_multilink)&&this.openOverlayer(this.config.multilink_timeout_ms||500),this.checkLocal(),this.ready("ab"),this.readyStatus||(this.fetchAB(),this.readyStatus=!0),this.collect.emit(m.AbReady)}},a.ready=function(e){var t=this;if(this.collect.set(e),this.collect.hook._hooksCache.hasOwnProperty(e)){var i=this.collect.hook._hooksCache[e];if(!Object.keys(i).length)return;var n=function(e){i[e].length&&i[e].forEach(function(i){t.collect.hook.emit(e,i)})};for(var o in i)n(o)}},a.loadMode=function(){},a.checkLocal=function(){var e=this.getABCache(),t=e.ab_version,i=e.ab_ext_version,n=e.ab_version_multilink,o=e.data,s=this.checkFromUrl();s?this.mulilinkVersions.push(s):this.mulilinkVersions=n||[],this.extVersions=i||[],this.versions=t||[],this.data=o;var r=this.versions.concat(this.extVersions);this.enable_multilink&&(r=r.concat(this.mulilinkVersions)),this.configVersions(r.join(","))},a.checkFromUrl=function(){var e=function(e){var t={};try{var i=s(e).search;(i=i.slice(1)).split("&").forEach(function(e){var i,n,o=e.split("=");o.length&&(i=o[0],n=o[1]);try{t[i]=decodeURIComponent(void 0===n?"":n)}catch(e){t[i]=n}})}catch(e){}return t}(window.location.href);return e&&e.vid?e.vid:""},a.updateVersions=function(){var e=this.extVersions.length?this.versions.concat(this.extVersions):this.versions;this.enable_multilink&&(e=e.concat(this.mulilinkVersions)),this.configVersions(e.join(",")),this.updateABCache(),this.changeListener.size>0&&this.changeListener.forEach(function(t){"function"==typeof t&&t(e)})},a.configVersions=function(e){this.collect.configManager.setAbVersion(e)},a.getVar=function(e,t,i){if(!e)throw new Error("variable must not be empty");if(void 0===t)throw new Error("variable no default value");if("function"!=typeof i)throw new Error("callback must be a function");var n={name:e,defaultValue:t,callback:i,type:u.Var};"complete"===this.fetchStatus&&"complete"===this.refreshFetchStatus?this.getRealVar(n,e):this.callbacks.push(n)},a.getRealVar=function(e,t){var i=e.name,o=e.defaultValue,s=e.callback,r=this.data;if(r){if(null!=(c=r[i])&&"[object Object]"==Object.prototype.toString.call(c)){var a=r[i].vid;return"$ab_url"===t?this.mulilinkVersions.includes(a)||this.mulilinkVersions.push(a):this.versions.includes(a)||this.versions.push(a),this.updateVersions(),this.fechEvent(a,t,o),s(r[i].val),void this.collect.emit(n.DEBUGGER_MESSAGE,{type:n.DEBUGGER_MESSAGE_SDK,secType:"AB",info:"SDK 曝光了实验"+i,level:"info",time:Date.now(),data:r[i]})}var c;this.collect.emit(n.DEBUGGER_MESSAGE,{type:n.DEBUGGER_MESSAGE_SDK,secType:"AB",info:"SDK 调用getVar",level:"info",time:Date.now(),data:o}),s(o)}else s(o)},a.getAllVars=function(e){if("function"!=typeof e)throw new Error("callback must be a function");var t={callback:e,type:u.All};"complete"===this.fetchStatus&&"complete"===this.refreshFetchStatus?this.getRealAllVars(t):this.callbacks.push(t)},a.getRealAllVars=function(e){(0,e.callback)(this.data?JSON.parse(JSON.stringify(this.data)):{}),this.collect.emit(n.DEBUGGER_MESSAGE,{type:n.DEBUGGER_MESSAGE_SDK,secType:"AB",info:"SDK 调用getAllVars",level:"info",time:Date.now(),data:this.data})},a.fechEvent=function(e,t,i){try{if(this.config.disable_track_event)return;if(!e)return;var o=this.collect.configManager.get(),s=o.header,r=o.user,a=this.getABCache();if(a&&a.uuid&&a.uuid!==r.user_unique_id)return;var c={event:"abtest_exposure",ab_sdk_version:""+e,params:JSON.stringify({app_id:this.config.appId,ab_url:"$ab_url"===t?i:window.location.href}),local_time_ms:Date.now()};s.custom=JSON.stringify(s.custom);var l={events:[c],user:r,header:s};"$ab_url"===t&&window.navigator.sendBeacon?window.navigator.sendBeacon(this.reportUrl,JSON.stringify([l])):this.reportExposure(l)}catch(e){this.collect.emit(n.DEBUGGER_MESSAGE,{type:n.DEBUGGER_MESSAGE_SDK,info:"发生了异常",level:"error",time:Date.now(),data:e.message})}},a.reportExposure=function(e){var t=this;this.exposureCache.push(e),this.reportTimeout&&clearTimeout(this.reportTimeout),this.exposureCache.length>=this.exposureLimit?this.report():this.reportTimeout=setTimeout(function(){t.report(),clearTimeout(t.reportTimeout)},this.ab_batch_time)},a.report=function(){var e=this,t=this.collect.cryptoData(this.exposureCache);this.collect.requestManager.useRequest({url:this.reportUrl,data:t,timeout:1e5,useBeacon:!1,encryption:this.config.enable_encryption,encryption_header:this.config.encryption_header,zip:!0,type:"event"}),this.exposureCache.forEach(function(t){e.collect.emit(n.DEBUGGER_MESSAGE,{type:n.DEBUGGER_MESSAGE_EVENT,info:"埋点上报成功",time:Date.now(),data:[t],code:200,status:"success"})}),this.exposureCache=[]},a.setExternalAbVersion=function(e){this.extVersions=[e],this.updateVersions()},a.getABconfig=function(e,t){var i=Object.keys(e);i&&i.length&&this.collect.configManager.set(e),this.fetchAB(t)},a.get=function(e){if(this.ab_cross){var t=this.cacheStorgae.getCookie(e,this.ab_cookie_domain);return t?JSON.parse(t):null}return this.cacheStorgae.getLocalItem(e)},a.set=function(e,t){this.ab_cross?this.cacheStorgae.setCookie(e,t,f,this.ab_cookie_domain):this.cacheStorgae.setLocalItem(e,t),this.collect.configManager.setAbCache(t)},a.getABCache=function(e){var t={ab_version:[],ab_ext_version:[],ab_version_multilink:[],data:null,timestamp:+new Date,uuid:""};return t=this.get(this.abKey)||t,Date.now()-t.timestamp>=f?(this.cacheStorgae.removeLocalItem(this.abKey),null):e?t[e]:t},a.updateABCache=function(){var e=this.getABCache();e.ab_version_multilink=this.mulilinkVersions,e.ab_ext_version=this.extVersions,e.ab_version=this.versions,e.timestamp=Date.now(),this.set(this.abKey,e)},a.setAbCache=function(e){var t=this.getABCache();t.data=this.data,t.uuid=e,t.timestamp=Date.now(),this.set(this.abKey,t)},a.clearCache=function(){this.refreshFetchStatus="ing",this.data={},this.extVersions=[],this.mulilinkVersions=[],this.versions=[],this.collect.configManager.clearAbCache()},a.openOverlayer=function(e){var i=this;if(function(){if(!document.getElementById(t)){var e="body { opacity: 0 !important; }",i=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.id=t,n.type="text/css",n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e)),i.appendChild(n)}}(),e)var n=setTimeout(function(){i.closeOverlayer(),clearTimeout(n)},e)},a.closeOverlayer=function(){var e;(e=document.getElementById(t))&&e.parentElement.removeChild(e)},a.fetchComplete=function(e,t){var i=this;if(e&&"[object Object]"==Object.prototype.toString.call(e)){this.data=e,this.setAbCache(t);var n=[];Object.keys(e).forEach(function(t){var i=e[t].vid;i&&n.push(i)}),this.versions=this.versions.filter(function(e){return n.includes(e)});var o=e.$ab_url,r=e.$ab_modification;if(r&&r.val&&this.enable_ab_visual){if(this.collect.destroy)return;this.getVar("$ab_modification",window.location.href,function(){i.closeOverlayer()})}else if(o&&this.enable_multilink){this.mulilinkVersions=this.mulilinkVersions.filter(function(e){return n.includes(e)});var a=o.val,c=o.vid;a&&c&&this.getVar("$ab_url",a,function(){i.editMode||(a!==window.location.href?setTimeout(function(){if(!i.collect.destroy){var e=""+a;e=-1===e.indexOf("http")?"https://"+e:e;var t=s(e).host;try{var n=new URL(e);t!==location.host?n.searchParams.append("vid",c):window.history.replaceState("","",e),window.location.href=n.href}catch(t){window.location.href=e}}},100):i.closeOverlayer())})}this.updateVersions()}else this.closeOverlayer();this.callbacks.forEach(function(e){return i[e.type===u.Var?"getRealVar":"getRealAllVars"](e,"")}),this.callbacks=[]},a.fetchAB=function(e){var t=this,i=this.collect.configManager.get(),o=i.header,s=i.user;this.config.enable_anonymousid&&delete s.web_id;var r=s.user_unique_id,a={header:Object.assign({aid:this.config.app_id},s||{},o||{},{ab_sdk_version:this.collect.configManager.getAbVersion(),ab_url:window.location.href})},c=this.collect.cryptoData(a);this.collect.emit(n.DEBUGGER_MESSAGE,{type:n.DEBUGGER_MESSAGE_SDK,info:"SDK 发起AB实验请求",level:"info",logType:"fetch",time:Date.now(),data:a,infoType:"sdk"}),this.collect.requestManager.useRequest({url:this.fetchUrl,data:c,success:function(i){t.fetchStatus="complete",t.refreshFetchStatus="complete";var o=i.data;"success"===i.message?(t.fetchComplete(o,r),e&&e(o)):(t.fetchComplete(null,r),e&&e(null)),t.collect.emit(t.types.AbComplete,o),t.collect.emit(n.DEBUGGER_MESSAGE,{type:n.DEBUGGER_MESSAGE_SDK,secType:"AB",info:"AB实验请求成功",level:"info",logType:"fetch",time:Date.now(),data:o,infoType:"sdk"})},fail:function(){t.fetchStatus="complete",t.refreshFetchStatus="complete",t.fetchComplete(null,r),e&&e(null),t.collect.emit(t.types.AbTimeout),t.collect.emit(n.DEBUGGER_MESSAGE,{type:n.DEBUGGER_MESSAGE_SDK,secType:"AB",info:"AB实验请求网络异常",level:"error",logType:"fetch",time:Date.now(),infoType:"sdk"})},timeout:this.config.ab_timeout||1e4,encryption:this.config.enable_encryption,encryption_header:this.config.encryption_header})},a.filterUrl=function(e){try{var t="";-1!==e.indexOf("&multilink=true")?t="&multilink=true[\0-ÿ]*":-1!==e.indexOf("?multilink=true")&&(t="\\?multilink=true[\0-ÿ]*");var i=new RegExp(t,"g");e=e.replace(i,"")}catch(e){}return e},r}();module.exports=m;