kv-test-lib 1.0.3 → 1.0.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/dist/browser/browser.js +9 -13
- package/dist/browser/browser.js.map +1 -0
- package/dist/browser/cookies.js +7 -17
- package/dist/browser/cookies.js.map +1 -0
- package/dist/browser/persist.js +22 -49
- package/dist/browser/persist.js.map +1 -0
- package/dist/http.js +5 -4
- package/dist/http.js.map +1 -0
- package/dist/interfaces.js +7 -6
- package/dist/interfaces.js.map +1 -0
- package/dist/jobqueue.js +12 -21
- package/dist/jobqueue.js.map +1 -0
- package/dist/kochava.js +193 -216
- package/dist/kochava.js.map +1 -0
- package/dist/payloads/event.js +11 -16
- package/dist/payloads/event.js.map +1 -0
- package/dist/payloads/identityLink.js +9 -13
- package/dist/payloads/identityLink.js.map +1 -0
- package/dist/payloads/install.js +22 -24
- package/dist/payloads/install.js.map +1 -0
- package/dist/payloads/kvinit.js +17 -22
- package/dist/payloads/kvinit.js.map +1 -0
- package/dist/payloads/payload.js +5 -5
- package/dist/payloads/payload.js.map +1 -0
- package/dist/utils/log.js +10 -16
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/utils.js +4 -6
- package/dist/utils/utils.js.map +1 -0
- package/package.json +1 -1
- package/dist/browser/browser.d.ts +0 -8
- package/dist/browser/cookies.d.ts +0 -3
- package/dist/browser/persist.d.ts +0 -33
- package/dist/http.d.ts +0 -6
- package/dist/interfaces.d.ts +0 -117
- package/dist/jobqueue.d.ts +0 -35
- package/dist/kochava.d.ts +0 -52
- package/dist/payloads/event.d.ts +0 -6
- package/dist/payloads/identityLink.d.ts +0 -7
- package/dist/payloads/install.d.ts +0 -6
- package/dist/payloads/kvinit.d.ts +0 -5
- package/dist/payloads/payload.d.ts +0 -33
- package/dist/utils/log.d.ts +0 -30
- package/dist/utils/utils.d.ts +0 -5
package/dist/browser/browser.js
CHANGED
|
@@ -3,19 +3,16 @@
|
|
|
3
3
|
Copyright (c) Kochava, Inc. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
export const getPackageName = () => `com.${window.location.hostname}.web`;
|
|
6
|
-
export const getLanguage = () =>
|
|
7
|
-
export const getDeviceWidth = () =>
|
|
8
|
-
export const getDeviceHeight = () =>
|
|
9
|
-
export const getDeviceOrientation = () =>
|
|
10
|
-
? "portrait" : "landscape" : "";
|
|
6
|
+
export const getLanguage = () => navigator ? navigator.language : "";
|
|
7
|
+
export const getDeviceWidth = () => window ? window.screen.availWidth : 0;
|
|
8
|
+
export const getDeviceHeight = () => window ? window.screen.availHeight : 0;
|
|
9
|
+
export const getDeviceOrientation = () => window ? window.innerWidth < window.innerHeight ? "portrait" : "landscape" : "";
|
|
11
10
|
export const getBaseDomain = () => {
|
|
12
11
|
try {
|
|
13
12
|
const regexResult = window.location.host.match(/[^.]*\.[^.]*$/);
|
|
14
|
-
if (regexResult)
|
|
15
|
-
return regexResult[0];
|
|
13
|
+
if (regexResult) return regexResult[0];
|
|
16
14
|
return "";
|
|
17
|
-
}
|
|
18
|
-
catch (err) {
|
|
15
|
+
} catch (err) {
|
|
19
16
|
return window.location.host;
|
|
20
17
|
}
|
|
21
18
|
};
|
|
@@ -27,14 +24,13 @@ export const getPageName = () => {
|
|
|
27
24
|
}
|
|
28
25
|
return page === "" ? "/" : page;
|
|
29
26
|
};
|
|
30
|
-
export const getUrlParameter =
|
|
27
|
+
export const getUrlParameter = name => {
|
|
31
28
|
if (!window.location || !window.location.search) {
|
|
32
29
|
return "";
|
|
33
30
|
}
|
|
34
31
|
name = name.replace(/[[]/, "\\[").replace(/[\]]/, "\\]");
|
|
35
32
|
const regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
|
|
36
33
|
const results = regex.exec(window.location.search);
|
|
37
|
-
return results === null
|
|
38
|
-
? ""
|
|
39
|
-
: decodeURIComponent(results[1].replace(/\+/g, " "));
|
|
34
|
+
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
|
|
40
35
|
};
|
|
36
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../dist/browser/browser.js"],"names":["getPackageName","window","location","hostname","getLanguage","navigator","language","getDeviceWidth","screen","availWidth","getDeviceHeight","availHeight","getDeviceOrientation","innerWidth","innerHeight","getBaseDomain","regexResult","host","match","err","getPageName","page","pathname","substring","replace","getUrlParameter","name","search","regex","RegExp","results","exec","decodeURIComponent"],"mappings":"AAAA;;;;AAIA,OAAO,MAAMA,iBAAiB,MAAO,OAAMC,OAAOC,QAAP,CAAgBC,QAAS,MAA7D;AACP,OAAO,MAAMC,cAAc,MAAOC,SAAD,GAAcA,UAAUC,QAAxB,GAAmC,EAA7D;AACP,OAAO,MAAMC,iBAAiB,MAAON,MAAD,GAAWA,OAAOO,MAAP,CAAcC,UAAzB,GAAsC,CAAnE;AACP,OAAO,MAAMC,kBAAkB,MAAOT,MAAD,GAAWA,OAAOO,MAAP,CAAcG,WAAzB,GAAuC,CAArE;AACP,OAAO,MAAMC,uBAAuB,MAAOX,MAAD,GAAWA,OAAOY,UAAP,GAAoBZ,OAAOa,WAA3B,GAC/C,UAD+C,GAClC,WADuB,GACT,EAD1B;AAEP,OAAO,MAAMC,gBAAgB,MAAM;AAC/B,QAAI;AACA,cAAMC,cAAcf,OAAOC,QAAP,CAAgBe,IAAhB,CAAqBC,KAArB,CAA2B,eAA3B,CAApB;AACA,YAAIF,WAAJ,EACI,OAAOA,YAAY,CAAZ,CAAP;AACJ,eAAO,EAAP;AACH,KALD,CAMA,OAAOG,GAAP,EAAY;AACR,eAAOlB,OAAOC,QAAP,CAAgBe,IAAvB;AACH;AACJ,CAVM;AAWP,OAAO,MAAMG,cAAc,MAAM;AAC7B,QAAIC,OAAO,EAAX;AACA,QAAIpB,OAAOC,QAAX,EAAqB;AACjBmB,eAAOpB,OAAOC,QAAP,CAAgBoB,QAAhB,CAAyBC,SAAzB,CAAmC,CAAnC,CAAP;AACAF,eAAOA,KAAKG,OAAL,CAAa,MAAb,EAAqB,EAArB,CAAP;AACH;AACD,WAAOH,SAAS,EAAT,GAAc,GAAd,GAAoBA,IAA3B;AACH,CAPM;AAQP,OAAO,MAAMI,kBAAmBC,IAAD,IAAU;AACrC,QAAI,CAACzB,OAAOC,QAAR,IAAoB,CAACD,OAAOC,QAAP,CAAgByB,MAAzC,EAAiD;AAC7C,eAAO,EAAP;AACH;AACDD,WAAOA,KAAKF,OAAL,CAAa,KAAb,EAAoB,KAApB,EAA2BA,OAA3B,CAAmC,MAAnC,EAA2C,KAA3C,CAAP;AACA,UAAMI,QAAQ,IAAIC,MAAJ,CAAW,WAAWH,IAAX,GAAkB,WAA7B,CAAd;AACA,UAAMI,UAAUF,MAAMG,IAAN,CAAW9B,OAAOC,QAAP,CAAgByB,MAA3B,CAAhB;AACA,WAAOG,YAAY,IAAZ,GACD,EADC,GAEDE,mBAAmBF,QAAQ,CAAR,EAAWN,OAAX,CAAmB,KAAnB,EAA0B,GAA1B,CAAnB,CAFN;AAGH,CAVM","file":"browser.js","sourcesContent":["/*\n Authored by Brett Barinaga on 11/17/21.\n Copyright (c) Kochava, Inc. All rights reserved.\n*/\nexport const getPackageName = () => `com.${window.location.hostname}.web`;\nexport const getLanguage = () => (navigator) ? navigator.language : \"\";\nexport const getDeviceWidth = () => (window) ? window.screen.availWidth : 0;\nexport const getDeviceHeight = () => (window) ? window.screen.availHeight : 0;\nexport const getDeviceOrientation = () => (window) ? window.innerWidth < window.innerHeight\n ? \"portrait\" : \"landscape\" : \"\";\nexport const getBaseDomain = () => {\n try {\n const regexResult = window.location.host.match(/[^.]*\\.[^.]*$/);\n if (regexResult)\n return regexResult[0];\n return \"\";\n }\n catch (err) {\n return window.location.host;\n }\n};\nexport const getPageName = () => {\n let page = \"\";\n if (window.location) {\n page = window.location.pathname.substring(1);\n page = page.replace(/\\/+$/, \"\");\n }\n return page === \"\" ? \"/\" : page;\n};\nexport const getUrlParameter = (name) => {\n if (!window.location || !window.location.search) {\n return \"\";\n }\n name = name.replace(/[[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n const regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\");\n const results = regex.exec(window.location.search);\n return results === null\n ? \"\"\n : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n};\n"]}
|
package/dist/browser/cookies.js
CHANGED
|
@@ -8,33 +8,23 @@ export const setCookie = (name, value) => {
|
|
|
8
8
|
const date = new Date();
|
|
9
9
|
date.setTime(date.getTime() + 3650 * 24 * 60 * 60 * 1000);
|
|
10
10
|
expires = `; expires=${date.toUTCString()}`;
|
|
11
|
-
document.cookie =
|
|
12
|
-
name +
|
|
13
|
-
"=" +
|
|
14
|
-
(value || "") +
|
|
15
|
-
expires +
|
|
16
|
-
"; path=/;domain=" +
|
|
17
|
-
getBaseDomain();
|
|
11
|
+
document.cookie = name + "=" + (value || "") + expires + "; path=/;domain=" + getBaseDomain();
|
|
18
12
|
};
|
|
19
|
-
export const getCookie =
|
|
13
|
+
export const getCookie = name => {
|
|
20
14
|
const nameEQ = name + "=";
|
|
21
15
|
const charArray = document.cookie.split(';');
|
|
22
16
|
for (let i = 0; i < charArray.length; i++) {
|
|
23
17
|
let char = charArray[i];
|
|
24
|
-
while (char.charAt(0) === " ")
|
|
25
|
-
|
|
26
|
-
if (char.indexOf(nameEQ) === 0)
|
|
27
|
-
return char.substring(nameEQ.length, char.length);
|
|
18
|
+
while (char.charAt(0) === " ") char = char.substring(1, char.length);
|
|
19
|
+
if (char.indexOf(nameEQ) === 0) return char.substring(nameEQ.length, char.length);
|
|
28
20
|
}
|
|
29
21
|
return "";
|
|
30
22
|
};
|
|
31
|
-
export const deleteCookie =
|
|
23
|
+
export const deleteCookie = name => {
|
|
32
24
|
if (getCookie(name)) {
|
|
33
25
|
const path = "/";
|
|
34
26
|
const domain = getBaseDomain();
|
|
35
|
-
document.cookie = name + "=" +
|
|
36
|
-
((path) ? ";path=" + path : "") +
|
|
37
|
-
((domain) ? ";domain=" + domain : "") +
|
|
38
|
-
";expires=Thu, 01 Jan 1970 00:00:01 GMT";
|
|
27
|
+
document.cookie = name + "=" + (path ? ";path=" + path : "") + (domain ? ";domain=" + domain : "") + ";expires=Thu, 01 Jan 1970 00:00:01 GMT";
|
|
39
28
|
}
|
|
40
29
|
};
|
|
30
|
+
//# sourceMappingURL=cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../dist/browser/cookies.js"],"names":["getBaseDomain","setCookie","name","value","expires","date","Date","setTime","getTime","toUTCString","document","cookie","getCookie","nameEQ","charArray","split","i","length","char","charAt","substring","indexOf","deleteCookie","path","domain"],"mappings":"AAAA;;;;AAIA,SAASA,aAAT,QAA8B,WAA9B;AACA,OAAO,MAAMC,YAAY,CAACC,IAAD,EAAOC,KAAP,KAAiB;AACtC,QAAIC,UAAU,EAAd;AACA,UAAMC,OAAO,IAAIC,IAAJ,EAAb;AACAD,SAAKE,OAAL,CAAaF,KAAKG,OAAL,KAAiB,OAAO,EAAP,GAAY,EAAZ,GAAiB,EAAjB,GAAsB,IAApD;AACAJ,cAAW,aAAYC,KAAKI,WAAL,EAAmB,EAA1C;AACAC,aAASC,MAAT,GACIT,OACI,GADJ,IAEKC,SAAS,EAFd,IAGIC,OAHJ,GAII,kBAJJ,GAKIJ,eANR;AAOH,CAZM;AAaP,OAAO,MAAMY,YAAaV,IAAD,IAAU;AAC/B,UAAMW,SAASX,OAAO,GAAtB;AACA,UAAMY,YAAYJ,SAASC,MAAT,CAAgBI,KAAhB,CAAsB,GAAtB,CAAlB;AACA,SAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIF,UAAUG,MAA9B,EAAsCD,GAAtC,EAA2C;AACvC,YAAIE,OAAOJ,UAAUE,CAAV,CAAX;AACA,eAAOE,KAAKC,MAAL,CAAY,CAAZ,MAAmB,GAA1B,EACID,OAAOA,KAAKE,SAAL,CAAe,CAAf,EAAkBF,KAAKD,MAAvB,CAAP;AACJ,YAAIC,KAAKG,OAAL,CAAaR,MAAb,MAAyB,CAA7B,EACI,OAAOK,KAAKE,SAAL,CAAeP,OAAOI,MAAtB,EAA8BC,KAAKD,MAAnC,CAAP;AACP;AACD,WAAO,EAAP;AACH,CAXM;AAYP,OAAO,MAAMK,eAAgBpB,IAAD,IAAU;AAClC,QAAIU,UAAUV,IAAV,CAAJ,EAAqB;AACjB,cAAMqB,OAAO,GAAb;AACA,cAAMC,SAASxB,eAAf;AACAU,iBAASC,MAAT,GAAkBT,OAAO,GAAP,IACZqB,IAAD,GAAS,WAAWA,IAApB,GAA2B,EADd,KAEZC,MAAD,GAAW,aAAaA,MAAxB,GAAiC,EAFpB,IAGd,wCAHJ;AAIH;AACJ,CATM","file":"cookies.js","sourcesContent":["/*\n Authored by Brett Barinaga on 11/17/21.\n Copyright (c) Kochava, Inc. All rights reserved.\n*/\nimport { getBaseDomain } from \"./browser\";\nexport const setCookie = (name, value) => {\n let expires = \"\";\n const date = new Date();\n date.setTime(date.getTime() + 3650 * 24 * 60 * 60 * 1000);\n expires = `; expires=${date.toUTCString()}`;\n document.cookie =\n name +\n \"=\" +\n (value || \"\") +\n expires +\n \"; path=/;domain=\" +\n getBaseDomain();\n};\nexport const getCookie = (name) => {\n const nameEQ = name + \"=\";\n const charArray = document.cookie.split(';');\n for (let i = 0; i < charArray.length; i++) {\n let char = charArray[i];\n while (char.charAt(0) === \" \")\n char = char.substring(1, char.length);\n if (char.indexOf(nameEQ) === 0)\n return char.substring(nameEQ.length, char.length);\n }\n return \"\";\n};\nexport const deleteCookie = (name) => {\n if (getCookie(name)) {\n const path = \"/\";\n const domain = getBaseDomain();\n document.cookie = name + \"=\" +\n ((path) ? \";path=\" + path : \"\") +\n ((domain) ? \";domain=\" + domain : \"\") +\n \";expires=Thu, 01 Jan 1970 00:00:01 GMT\";\n }\n};\n"]}
|
package/dist/browser/persist.js
CHANGED
|
@@ -23,45 +23,30 @@ export var PersistKey;
|
|
|
23
23
|
PersistKey["OverrideDeviceId"] = "com.kochava.tracker.OverrideDeviceId";
|
|
24
24
|
PersistKey["OldKvid"] = "kv_id";
|
|
25
25
|
})(PersistKey || (PersistKey = {}));
|
|
26
|
-
const storedKeys = [
|
|
27
|
-
PersistKey.LastKvinit,
|
|
28
|
-
PersistKey.EventQueue,
|
|
29
|
-
PersistKey.IdLinkQueue,
|
|
30
|
-
PersistKey.DeviceId,
|
|
31
|
-
PersistKey.InstallId,
|
|
32
|
-
PersistKey.FirstStartDate,
|
|
33
|
-
PersistKey.InstallSentDate,
|
|
34
|
-
PersistKey.KvinitSentDate,
|
|
35
|
-
PersistKey.SessionCount,
|
|
36
|
-
PersistKey.IdentityLinks,
|
|
37
|
-
PersistKey.OverrideAppId,
|
|
38
|
-
PersistKey.OverrideDeviceId,
|
|
39
|
-
];
|
|
26
|
+
const storedKeys = [PersistKey.LastKvinit, PersistKey.EventQueue, PersistKey.IdLinkQueue, PersistKey.DeviceId, PersistKey.InstallId, PersistKey.FirstStartDate, PersistKey.InstallSentDate, PersistKey.KvinitSentDate, PersistKey.SessionCount, PersistKey.IdentityLinks, PersistKey.OverrideAppId, PersistKey.OverrideDeviceId];
|
|
40
27
|
export const checkInstallIdChange = (inputId, useCookies) => {
|
|
41
28
|
const persistedInstallId = readAndUpdatePersistedValue(PersistKey.InstallId, useCookies);
|
|
42
29
|
// if the input is empty, we don't need to change
|
|
43
|
-
if (!inputId)
|
|
44
|
-
return false;
|
|
30
|
+
if (!inputId) return false;
|
|
45
31
|
// if the persistedId is empty, we will need to change
|
|
46
32
|
if (!persistedInstallId) {
|
|
47
33
|
updatePersistedValue(PersistKey.InstallId, inputId, useCookies);
|
|
48
34
|
return true;
|
|
49
35
|
}
|
|
50
36
|
// if the inputId and persistedId are the same, we dont need to change
|
|
51
|
-
if (inputId === persistedInstallId)
|
|
52
|
-
return false;
|
|
37
|
+
if (inputId === persistedInstallId) return false;
|
|
53
38
|
// at this point both inputId and persistedInstallId exist and are not equal,
|
|
54
39
|
// so we must need to change
|
|
55
40
|
updatePersistedValue(PersistKey.InstallId, inputId, useCookies);
|
|
56
41
|
return true;
|
|
57
42
|
};
|
|
58
|
-
export const addToPersistedEventQueue =
|
|
43
|
+
export const addToPersistedEventQueue = job => {
|
|
59
44
|
const persistedQueueStr = localStorage.getItem(PersistKey.EventQueue);
|
|
60
45
|
const persistedQueue = JSON.parse(persistedQueueStr) || [];
|
|
61
46
|
persistedQueue.push(job);
|
|
62
47
|
localStorage.setItem(PersistKey.EventQueue, JSON.stringify(persistedQueue));
|
|
63
48
|
};
|
|
64
|
-
export const removeFromEventPersistedQueue =
|
|
49
|
+
export const removeFromEventPersistedQueue = job => {
|
|
65
50
|
const persistedQueueStr = localStorage.getItem(PersistKey.EventQueue);
|
|
66
51
|
const persistedQueue = JSON.parse(persistedQueueStr) || [];
|
|
67
52
|
const queueWithJobRemoved = persistedQueue.filter(persistedJob => {
|
|
@@ -69,7 +54,7 @@ export const removeFromEventPersistedQueue = (job) => {
|
|
|
69
54
|
});
|
|
70
55
|
localStorage.setItem(PersistKey.EventQueue, JSON.stringify(queueWithJobRemoved));
|
|
71
56
|
};
|
|
72
|
-
export const updateOrAddPersistedIdLinkQueue =
|
|
57
|
+
export const updateOrAddPersistedIdLinkQueue = job => {
|
|
73
58
|
const idLinkKey = Object.keys(job.idLink)[0];
|
|
74
59
|
const persistedQueueStr = localStorage.getItem(PersistKey.IdLinkQueue);
|
|
75
60
|
const persistedQueue = JSON.parse(persistedQueueStr) || [];
|
|
@@ -83,11 +68,10 @@ export const updateOrAddPersistedIdLinkQueue = (job) => {
|
|
|
83
68
|
}
|
|
84
69
|
}
|
|
85
70
|
// if the key is new, add it
|
|
86
|
-
if (!updated)
|
|
87
|
-
persistedQueue.push(job);
|
|
71
|
+
if (!updated) persistedQueue.push(job);
|
|
88
72
|
localStorage.setItem(PersistKey.IdLinkQueue, JSON.stringify(persistedQueue));
|
|
89
73
|
};
|
|
90
|
-
export const removeFromIdLinkPersistedQueue =
|
|
74
|
+
export const removeFromIdLinkPersistedQueue = job => {
|
|
91
75
|
const persistedQueueStr = localStorage.getItem(PersistKey.IdLinkQueue);
|
|
92
76
|
const persistedQueue = JSON.parse(persistedQueueStr) || [];
|
|
93
77
|
const queueWithJobRemoved = persistedQueue.filter(persistedJob => {
|
|
@@ -130,51 +114,39 @@ export const readAndUpdateUTM = (appGuid, useCookies) => {
|
|
|
130
114
|
const urlValue = getUrlParameter("ko_click_id");
|
|
131
115
|
const storageValue = localStorage.getItem(storageName);
|
|
132
116
|
let cookieValue = "";
|
|
133
|
-
if (useCookies)
|
|
134
|
-
cookieValue = getCookie(storageName);
|
|
117
|
+
if (useCookies) cookieValue = getCookie(storageName);
|
|
135
118
|
if (urlValue) {
|
|
136
119
|
localStorage.setItem(storageName, urlValue);
|
|
137
|
-
if (useCookies)
|
|
138
|
-
|
|
120
|
+
if (useCookies) setCookie(storageName, urlValue);
|
|
121
|
+
} else if (storageValue) {
|
|
122
|
+
if (useCookies) setCookie(storageName, urlValue);
|
|
139
123
|
}
|
|
140
|
-
|
|
141
|
-
if (useCookies)
|
|
142
|
-
setCookie(storageName, urlValue);
|
|
143
|
-
}
|
|
144
|
-
return (urlValue) ? urlValue :
|
|
145
|
-
(storageValue) ? storageValue :
|
|
146
|
-
(cookieValue) ? cookieValue : "";
|
|
124
|
+
return urlValue ? urlValue : storageValue ? storageValue : cookieValue ? cookieValue : "";
|
|
147
125
|
};
|
|
148
126
|
export const readAndUpdatePersistedValue = (key, useCookie) => {
|
|
149
127
|
const urlValue = getUrlParameter(key);
|
|
150
128
|
const storageValue = localStorage.getItem(key);
|
|
151
129
|
let cookieValue = "";
|
|
152
|
-
if (useCookie)
|
|
153
|
-
cookieValue = getCookie(key);
|
|
130
|
+
if (useCookie) cookieValue = getCookie(key);
|
|
154
131
|
if (urlValue) {
|
|
155
132
|
updatePersistedValue(key, urlValue, useCookie);
|
|
156
|
-
}
|
|
157
|
-
else if (storageValue) {
|
|
133
|
+
} else if (storageValue) {
|
|
158
134
|
updatePersistedValue(key, storageValue, useCookie);
|
|
159
|
-
}
|
|
160
|
-
else if (cookieValue) {
|
|
135
|
+
} else if (cookieValue) {
|
|
161
136
|
updatePersistedValue(key, storageValue, useCookie);
|
|
162
137
|
}
|
|
163
|
-
return
|
|
164
|
-
(storageValue) ? storageValue :
|
|
165
|
-
(cookieValue) ? cookieValue : "";
|
|
138
|
+
return urlValue ? urlValue : storageValue ? storageValue : cookieValue ? cookieValue : "";
|
|
166
139
|
};
|
|
167
140
|
export const updatePersistedValue = (key, value, useCookie) => {
|
|
168
141
|
localStorage.setItem(key, value);
|
|
169
|
-
if (useCookie)
|
|
170
|
-
setCookie(key, value);
|
|
142
|
+
if (useCookie) setCookie(key, value);
|
|
171
143
|
};
|
|
172
|
-
export const deletePersistedValue =
|
|
144
|
+
export const deletePersistedValue = item => {
|
|
173
145
|
localStorage.removeItem(item);
|
|
174
146
|
deleteCookie(item);
|
|
175
147
|
};
|
|
176
148
|
export const deleteAllPersisted = () => storedKeys.forEach(item => deletePersistedValue(item));
|
|
177
|
-
export const readAndUpdateDeviceId =
|
|
149
|
+
export const readAndUpdateDeviceId = useCookie => {
|
|
178
150
|
let storedDeviceId = readAndUpdatePersistedValue(PersistKey.DeviceId, useCookie);
|
|
179
151
|
if (!storedDeviceId) {
|
|
180
152
|
const kvId = `KB${utils.getCurrTimeSec()}T${utils.uuidv4()}`;
|
|
@@ -183,7 +155,7 @@ export const readAndUpdateDeviceId = (useCookie) => {
|
|
|
183
155
|
updatePersistedValue(PersistKey.DeviceId, storedDeviceId, useCookie);
|
|
184
156
|
return storedDeviceId;
|
|
185
157
|
};
|
|
186
|
-
export const readAndUpdateSessionCount =
|
|
158
|
+
export const readAndUpdateSessionCount = useCookie => {
|
|
187
159
|
const storedSessionCount = readAndUpdatePersistedValue(PersistKey.SessionCount, useCookie);
|
|
188
160
|
let sessionCount = 1;
|
|
189
161
|
if (storedSessionCount) {
|
|
@@ -193,3 +165,4 @@ export const readAndUpdateSessionCount = (useCookie) => {
|
|
|
193
165
|
updatePersistedValue(PersistKey.SessionCount, sessionCount.toString(), useCookie);
|
|
194
166
|
return sessionCount;
|
|
195
167
|
};
|
|
168
|
+
//# sourceMappingURL=persist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../dist/browser/persist.js"],"names":["utils","getUrlParameter","setCookie","getCookie","deleteCookie","Log","MAX_STORED_IDLINKS","PersistKey","storedKeys","LastKvinit","EventQueue","IdLinkQueue","DeviceId","InstallId","FirstStartDate","InstallSentDate","KvinitSentDate","SessionCount","IdentityLinks","OverrideAppId","OverrideDeviceId","checkInstallIdChange","inputId","useCookies","persistedInstallId","readAndUpdatePersistedValue","updatePersistedValue","addToPersistedEventQueue","job","persistedQueueStr","localStorage","getItem","persistedQueue","JSON","parse","push","setItem","stringify","removeFromEventPersistedQueue","queueWithJobRemoved","filter","persistedJob","id","updateOrAddPersistedIdLinkQueue","idLinkKey","Object","keys","idLink","updated","persistedKey","removeFromIdLinkPersistedQueue","addPersistedIdLinks","key","value","persistedIdLinksStr","persistedIdLinks","storedSoFar","length","debug","checkDuplicateIdLink","getPersistedIdentityLinks","undefined","readAndUpdateUTM","appGuid","storageName","urlValue","storageValue","cookieValue","useCookie","deletePersistedValue","item","removeItem","deleteAllPersisted","forEach","readAndUpdateDeviceId","storedDeviceId","kvId","getCurrTimeSec","uuidv4","replace","readAndUpdateSessionCount","storedSessionCount","sessionCount","parseInt","toString"],"mappings":"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","file":"persist.js","sourcesContent":["/*\n Authored by Brett Barinaga on 11/17/21.\n Copyright (c) Kochava, Inc. All rights reserved.\n*/\nimport * as utils from \"../utils/utils\";\nimport { getUrlParameter } from \"./browser\";\nimport { setCookie, getCookie, deleteCookie } from \"./cookies\";\nimport { Log } from \"../utils/log\";\nexport const MAX_STORED_IDLINKS = 10;\nexport var PersistKey;\n(function (PersistKey) {\n PersistKey[\"LastKvinit\"] = \"com.kochava.tracker.LastKvinit\";\n PersistKey[\"EventQueue\"] = \"com.kochava.tracker.EventQueue\";\n PersistKey[\"IdLinkQueue\"] = \"com.kochava.tracker.IdLinkQueue\";\n PersistKey[\"DeviceId\"] = \"com.kochava.tracker.DeviceId\";\n PersistKey[\"InstallId\"] = \"com.kochava.tracker.InstallId\";\n PersistKey[\"FirstStartDate\"] = \"com.kochava.tracker.FirstStartDate\";\n PersistKey[\"InstallSentDate\"] = \"com.kochava.tracker.InstallSentDate\";\n PersistKey[\"KvinitSentDate\"] = \"com.kochava.tracker.KvinitSentDate\";\n PersistKey[\"SessionCount\"] = \"com.kochava.tracker.SessionCount\";\n PersistKey[\"IdentityLinks\"] = \"com.kochava.tracker.IdentityLinks\";\n PersistKey[\"OverrideAppId\"] = \"com.kochava.tracker.OverrideAppId\";\n PersistKey[\"OverrideDeviceId\"] = \"com.kochava.tracker.OverrideDeviceId\";\n PersistKey[\"OldKvid\"] = \"kv_id\";\n})(PersistKey || (PersistKey = {}));\nconst storedKeys = [\n PersistKey.LastKvinit,\n PersistKey.EventQueue,\n PersistKey.IdLinkQueue,\n PersistKey.DeviceId,\n PersistKey.InstallId,\n PersistKey.FirstStartDate,\n PersistKey.InstallSentDate,\n PersistKey.KvinitSentDate,\n PersistKey.SessionCount,\n PersistKey.IdentityLinks,\n PersistKey.OverrideAppId,\n PersistKey.OverrideDeviceId,\n];\nexport const checkInstallIdChange = (inputId, useCookies) => {\n const persistedInstallId = readAndUpdatePersistedValue(PersistKey.InstallId, useCookies);\n // if the input is empty, we don't need to change\n if (!inputId)\n return false;\n // if the persistedId is empty, we will need to change\n if (!persistedInstallId) {\n updatePersistedValue(PersistKey.InstallId, inputId, useCookies);\n return true;\n }\n // if the inputId and persistedId are the same, we dont need to change\n if (inputId === persistedInstallId)\n return false;\n // at this point both inputId and persistedInstallId exist and are not equal,\n // so we must need to change\n updatePersistedValue(PersistKey.InstallId, inputId, useCookies);\n return true;\n};\nexport const addToPersistedEventQueue = (job) => {\n const persistedQueueStr = localStorage.getItem(PersistKey.EventQueue);\n const persistedQueue = JSON.parse(persistedQueueStr) || [];\n persistedQueue.push(job);\n localStorage.setItem(PersistKey.EventQueue, JSON.stringify(persistedQueue));\n};\nexport const removeFromEventPersistedQueue = (job) => {\n const persistedQueueStr = localStorage.getItem(PersistKey.EventQueue);\n const persistedQueue = JSON.parse(persistedQueueStr) || [];\n const queueWithJobRemoved = persistedQueue.filter(persistedJob => {\n return persistedJob.id !== job.id;\n });\n localStorage.setItem(PersistKey.EventQueue, JSON.stringify(queueWithJobRemoved));\n};\nexport const updateOrAddPersistedIdLinkQueue = (job) => {\n const idLinkKey = Object.keys(job.idLink)[0];\n const persistedQueueStr = localStorage.getItem(PersistKey.IdLinkQueue);\n const persistedQueue = JSON.parse(persistedQueueStr) || [];\n let updated = false;\n for (const persistedJob of persistedQueue) {\n const persistedKey = Object.keys(persistedJob.idLink)[0];\n // if the key is already there, update it\n if (idLinkKey === persistedKey) {\n persistedJob.idLink[idLinkKey] = job.idLink[idLinkKey];\n updated = true;\n }\n }\n // if the key is new, add it\n if (!updated)\n persistedQueue.push(job);\n localStorage.setItem(PersistKey.IdLinkQueue, JSON.stringify(persistedQueue));\n};\nexport const removeFromIdLinkPersistedQueue = (job) => {\n const persistedQueueStr = localStorage.getItem(PersistKey.IdLinkQueue);\n const persistedQueue = JSON.parse(persistedQueueStr) || [];\n const queueWithJobRemoved = persistedQueue.filter(persistedJob => {\n return persistedJob.id !== job.id;\n });\n localStorage.setItem(PersistKey.IdLinkQueue, JSON.stringify(queueWithJobRemoved));\n};\nexport const addPersistedIdLinks = (key, value, useCookies) => {\n const persistedIdLinksStr = localStorage.getItem(PersistKey.IdentityLinks);\n const persistedIdLinks = JSON.parse(persistedIdLinksStr) || {};\n const storedSoFar = Object.keys(persistedIdLinks);\n if (storedSoFar.length > MAX_STORED_IDLINKS) {\n Log.debug(\"Maximum stored idLinks reached, most recent idLink will not be stored.\");\n return;\n }\n persistedIdLinks[key] = value;\n updatePersistedValue(PersistKey.IdentityLinks, JSON.stringify(persistedIdLinks), useCookies);\n};\nexport const checkDuplicateIdLink = (key, value) => {\n const persistedIdLinksStr = localStorage.getItem(PersistKey.IdentityLinks);\n if (persistedIdLinksStr) {\n const persistedIdLinks = JSON.parse(persistedIdLinksStr) || {};\n for (const persistedKey in persistedIdLinks) {\n if (key === persistedKey && persistedIdLinks[persistedKey] === value) {\n return true;\n }\n }\n }\n return false;\n};\nexport const getPersistedIdentityLinks = () => {\n const persistedIdLinksStr = localStorage.getItem(PersistKey.IdentityLinks);\n if (persistedIdLinksStr) {\n return JSON.parse(persistedIdLinksStr);\n }\n return undefined;\n};\nexport const readAndUpdateUTM = (appGuid, useCookies) => {\n const storageName = appGuid + \"_click\";\n const urlValue = getUrlParameter(\"ko_click_id\");\n const storageValue = localStorage.getItem(storageName);\n let cookieValue = \"\";\n if (useCookies)\n cookieValue = getCookie(storageName);\n if (urlValue) {\n localStorage.setItem(storageName, urlValue);\n if (useCookies)\n setCookie(storageName, urlValue);\n }\n else if (storageValue) {\n if (useCookies)\n setCookie(storageName, urlValue);\n }\n return (urlValue) ? urlValue :\n (storageValue) ? storageValue :\n (cookieValue) ? cookieValue : \"\";\n};\nexport const readAndUpdatePersistedValue = (key, useCookie) => {\n const urlValue = getUrlParameter(key);\n const storageValue = localStorage.getItem(key);\n let cookieValue = \"\";\n if (useCookie)\n cookieValue = getCookie(key);\n if (urlValue) {\n updatePersistedValue(key, urlValue, useCookie);\n }\n else if (storageValue) {\n updatePersistedValue(key, storageValue, useCookie);\n }\n else if (cookieValue) {\n updatePersistedValue(key, storageValue, useCookie);\n }\n return (urlValue) ? urlValue :\n (storageValue) ? storageValue :\n (cookieValue) ? cookieValue : \"\";\n};\nexport const updatePersistedValue = (key, value, useCookie) => {\n localStorage.setItem(key, value);\n if (useCookie)\n setCookie(key, value);\n};\nexport const deletePersistedValue = (item) => {\n localStorage.removeItem(item);\n deleteCookie(item);\n};\nexport const deleteAllPersisted = () => storedKeys.forEach(item => deletePersistedValue(item));\nexport const readAndUpdateDeviceId = (useCookie) => {\n let storedDeviceId = readAndUpdatePersistedValue(PersistKey.DeviceId, useCookie);\n if (!storedDeviceId) {\n const kvId = `KB${utils.getCurrTimeSec()}T${utils.uuidv4()}`;\n storedDeviceId = kvId.replace(/-/g, \"\");\n }\n updatePersistedValue(PersistKey.DeviceId, storedDeviceId, useCookie);\n return storedDeviceId;\n};\nexport const readAndUpdateSessionCount = (useCookie) => {\n const storedSessionCount = readAndUpdatePersistedValue(PersistKey.SessionCount, useCookie);\n let sessionCount = 1;\n if (storedSessionCount) {\n sessionCount = parseInt(storedSessionCount);\n sessionCount++;\n }\n updatePersistedValue(PersistKey.SessionCount, sessionCount.toString(), useCookie);\n return sessionCount;\n};\n"]}
|
package/dist/http.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Authored by Brett Barinaga on 11/17/21.
|
|
3
3
|
Copyright (c) Kochava, Inc. All rights reserved.
|
|
4
4
|
*/
|
|
5
|
+
import 'whatwg-fetch';
|
|
5
6
|
import { Log } from "./utils/log";
|
|
6
7
|
export const sendRequest = async (payload, endpoint) => {
|
|
7
8
|
try {
|
|
@@ -11,13 +12,13 @@ export const sendRequest = async (payload, endpoint) => {
|
|
|
11
12
|
const resp = await fetch(endpoint, {
|
|
12
13
|
method: "POST",
|
|
13
14
|
headers: headers,
|
|
14
|
-
body: JSON.stringify(payload)
|
|
15
|
+
body: JSON.stringify(payload)
|
|
15
16
|
});
|
|
16
17
|
return await resp.text();
|
|
17
|
-
}
|
|
18
|
-
catch (e) {
|
|
18
|
+
} catch (e) {
|
|
19
19
|
Log.error("Error in post request", e);
|
|
20
20
|
return "";
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
-
export const wasRespSuccess =
|
|
23
|
+
export const wasRespSuccess = success => success === "1" || success === 1 || success === true;
|
|
24
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../dist/http.js"],"names":["Log","sendRequest","payload","endpoint","headers","Headers","append","trace","nt_id","resp","fetch","method","body","JSON","stringify","text","e","error","wasRespSuccess","success"],"mappings":"AAAA;;;;AAIA,OAAO,cAAP;AACA,SAASA,GAAT,QAAoB,aAApB;AACA,OAAO,MAAMC,cAAc,OAAOC,OAAP,EAAgBC,QAAhB,KAA6B;AACpD,QAAI;AACA,cAAMC,UAAU,IAAIC,OAAJ,EAAhB;AACAD,gBAAQE,MAAR,CAAe,cAAf,EAA+B,kBAA/B;AACAN,YAAIO,KAAJ,CAAW,WAAUL,QAAQM,KAAM,kBAAnC,EAAsDL,QAAtD;AACA,cAAMM,OAAO,MAAMC,MAAMP,QAAN,EAAgB;AAC/BQ,oBAAQ,MADuB;AAE/BP,qBAASA,OAFsB;AAG/BQ,kBAAMC,KAAKC,SAAL,CAAeZ,OAAf;AAHyB,SAAhB,CAAnB;AAKA,eAAO,MAAMO,KAAKM,IAAL,EAAb;AACH,KAVD,CAWA,OAAOC,CAAP,EAAU;AACNhB,YAAIiB,KAAJ,CAAU,uBAAV,EAAmCD,CAAnC;AACA,eAAO,EAAP;AACH;AACJ,CAhBM;AAiBP,OAAO,MAAME,iBAAkBC,OAAD,IAAaA,YAAY,GAAZ,IAAmBA,YAAY,CAA/B,IAAoCA,YAAY,IAApF","file":"http.js","sourcesContent":["/*\n Authored by Brett Barinaga on 11/17/21.\n Copyright (c) Kochava, Inc. All rights reserved.\n*/\nimport 'whatwg-fetch';\nimport { Log } from \"./utils/log\";\nexport const sendRequest = async (payload, endpoint) => {\n try {\n const headers = new Headers();\n headers.append(\"Content-Type\", \"application/json\");\n Log.trace(`Request ${payload.nt_id} being sent to: `, endpoint);\n const resp = await fetch(endpoint, {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(payload),\n });\n return await resp.text();\n }\n catch (e) {\n Log.error(\"Error in post request\", e);\n return \"\";\n }\n};\nexport const wasRespSuccess = (success) => success === \"1\" || success === 1 || success === true;\n"]}
|
package/dist/interfaces.js
CHANGED
|
@@ -7,16 +7,16 @@ export const DEFAULTS = {
|
|
|
7
7
|
// DO NOT DEFAULT
|
|
8
8
|
app_id_override: "",
|
|
9
9
|
// DO NOT DEFAULT
|
|
10
|
-
device_id_override: ""
|
|
10
|
+
device_id_override: ""
|
|
11
11
|
},
|
|
12
12
|
config: {
|
|
13
13
|
init_token: "",
|
|
14
|
-
refresh_minimum: 60
|
|
14
|
+
refresh_minimum: 60
|
|
15
15
|
},
|
|
16
16
|
install: {
|
|
17
17
|
// DO NOT DEFAULT
|
|
18
18
|
resend_id: "",
|
|
19
|
-
updates_enabled: true
|
|
19
|
+
updates_enabled: true
|
|
20
20
|
},
|
|
21
21
|
networking: {
|
|
22
22
|
urls: {
|
|
@@ -25,12 +25,13 @@ export const DEFAULTS = {
|
|
|
25
25
|
event: "https://web-sdk.control.kochava.com/track/json/",
|
|
26
26
|
identityLink: "https://web-sdk.control.kochava.com/track/json/"
|
|
27
27
|
},
|
|
28
|
-
retry_waterfall: [7, 30, 300, 1800]
|
|
28
|
+
retry_waterfall: [7, 30, 300, 1800]
|
|
29
29
|
},
|
|
30
30
|
privacy: {
|
|
31
31
|
allow_custom_ids: [],
|
|
32
32
|
deny_datapoints: [],
|
|
33
33
|
deny_event_names: [],
|
|
34
|
-
deny_identity_links: []
|
|
35
|
-
}
|
|
34
|
+
deny_identity_links: []
|
|
35
|
+
}
|
|
36
36
|
};
|
|
37
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../dist/interfaces.js"],"names":["DEFAULTS","general","app_id_override","device_id_override","config","init_token","refresh_minimum","install","resend_id","updates_enabled","networking","urls","init","event","identityLink","retry_waterfall","privacy","allow_custom_ids","deny_datapoints","deny_event_names","deny_identity_links"],"mappings":"AAAA;;;;AAIA,OAAO,MAAMA,WAAW;AACpBC,aAAS;AACL;AACAC,yBAAiB,EAFZ;AAGL;AACAC,4BAAoB;AAJf,KADW;AAOpBC,YAAQ;AACJC,oBAAY,EADR;AAEJC,yBAAiB;AAFb,KAPY;AAWpBC,aAAS;AACL;AACAC,mBAAW,EAFN;AAGLC,yBAAiB;AAHZ,KAXW;AAgBpBC,gBAAY;AACRC,cAAM;AACFC,kBAAM,kDADJ;AAEFL,qBAAS,iDAFP;AAGFM,mBAAO,iDAHL;AAIFC,0BAAc;AAJZ,SADE;AAORC,yBAAiB,CAAC,CAAD,EAAI,EAAJ,EAAQ,GAAR,EAAa,IAAb;AAPT,KAhBQ;AAyBpBC,aAAS;AACLC,0BAAkB,EADb;AAELC,yBAAiB,EAFZ;AAGLC,0BAAkB,EAHb;AAILC,6BAAqB;AAJhB;AAzBW,CAAjB","file":"interfaces.js","sourcesContent":["/*\n Authored by Brett Barinaga on 11/17/21.\n Copyright (c) Kochava, Inc. All rights reserved.\n*/\nexport const DEFAULTS = {\n general: {\n // DO NOT DEFAULT\n app_id_override: \"\",\n // DO NOT DEFAULT\n device_id_override: \"\",\n },\n config: {\n init_token: \"\",\n refresh_minimum: 60,\n },\n install: {\n // DO NOT DEFAULT\n resend_id: \"\",\n updates_enabled: true,\n },\n networking: {\n urls: {\n init: \"https://kvinit-prod.api.kochava.com/track/kvinit\",\n install: \"https://web-sdk.control.kochava.com/track/json/\",\n event: \"https://web-sdk.control.kochava.com/track/json/\",\n identityLink: \"https://web-sdk.control.kochava.com/track/json/\"\n },\n retry_waterfall: [7, 30, 300, 1800],\n },\n privacy: {\n allow_custom_ids: [],\n deny_datapoints: [],\n deny_event_names: [],\n deny_identity_links: [],\n },\n};\n"]}
|
package/dist/jobqueue.js
CHANGED
|
@@ -34,8 +34,7 @@ export default class JobQueue {
|
|
|
34
34
|
}
|
|
35
35
|
stop() {
|
|
36
36
|
this.stopped = true;
|
|
37
|
-
if (this.timeOut)
|
|
38
|
-
clearTimeout(this.timeOut);
|
|
37
|
+
if (this.timeOut) clearTimeout(this.timeOut);
|
|
39
38
|
this.processing = false;
|
|
40
39
|
}
|
|
41
40
|
pause() {
|
|
@@ -53,7 +52,7 @@ export default class JobQueue {
|
|
|
53
52
|
preStartBody: eventPreStartBody,
|
|
54
53
|
postStartBody,
|
|
55
54
|
retries: 0,
|
|
56
|
-
eventName
|
|
55
|
+
eventName
|
|
57
56
|
};
|
|
58
57
|
this.eventQueue.push(newJob);
|
|
59
58
|
addToPersistedEventQueue(newJob);
|
|
@@ -66,7 +65,7 @@ export default class JobQueue {
|
|
|
66
65
|
preStartBody: eventPreStartBody,
|
|
67
66
|
postStartBody: undefined,
|
|
68
67
|
retries: 0,
|
|
69
|
-
eventName
|
|
68
|
+
eventName
|
|
70
69
|
};
|
|
71
70
|
this.eventQueue.push(newEventJob);
|
|
72
71
|
addToPersistedEventQueue(newEventJob);
|
|
@@ -81,7 +80,7 @@ export default class JobQueue {
|
|
|
81
80
|
preStartBody: idLinkPreStartBody,
|
|
82
81
|
postStartBody,
|
|
83
82
|
retries: 0,
|
|
84
|
-
idLink
|
|
83
|
+
idLink
|
|
85
84
|
};
|
|
86
85
|
updateOrAddPersistedIdLinkQueue(newJob);
|
|
87
86
|
this.idLinkQueue.push(newJob);
|
|
@@ -94,18 +93,16 @@ export default class JobQueue {
|
|
|
94
93
|
preStartBody: idLinkPreStartBody,
|
|
95
94
|
postStartBody: undefined,
|
|
96
95
|
retries: 0,
|
|
97
|
-
idLink
|
|
96
|
+
idLink
|
|
98
97
|
};
|
|
99
98
|
updateOrAddPersistedIdLinkQueue(newJob);
|
|
100
99
|
this.idLinkQueue.push(newJob);
|
|
101
100
|
}
|
|
102
101
|
async dequeueJob(instance) {
|
|
103
102
|
// If queue is busy, prev job not finished
|
|
104
|
-
if (this.processing)
|
|
105
|
-
return false;
|
|
103
|
+
if (this.processing) return false;
|
|
106
104
|
// If the queue is paused, do not dequeue a new job
|
|
107
|
-
if (this.paused)
|
|
108
|
-
return false;
|
|
105
|
+
if (this.paused) return false;
|
|
109
106
|
// If the queue is stopped do not dequeue a new job
|
|
110
107
|
if (this.stopped) {
|
|
111
108
|
return false;
|
|
@@ -146,8 +143,7 @@ export default class JobQueue {
|
|
|
146
143
|
}
|
|
147
144
|
}
|
|
148
145
|
// If neither queue had a job, break out of recursion
|
|
149
|
-
if (!idLinkJob && !eventJob)
|
|
150
|
-
return false;
|
|
146
|
+
if (!idLinkJob && !eventJob) return false;
|
|
151
147
|
return true;
|
|
152
148
|
}
|
|
153
149
|
async processJob(instance, job) {
|
|
@@ -158,8 +154,7 @@ export default class JobQueue {
|
|
|
158
154
|
return true;
|
|
159
155
|
}
|
|
160
156
|
}
|
|
161
|
-
}
|
|
162
|
-
else if (jobIsIdLinkJob(job)) {
|
|
157
|
+
} else if (jobIsIdLinkJob(job)) {
|
|
163
158
|
for (const denyIdLinkKey of instance.kochavaConfig.privacy.deny_identity_links) {
|
|
164
159
|
if (denyIdLinkKey === Object.keys(job.idLink)[0]) {
|
|
165
160
|
Log.debug(`Denied identity_link ${denyIdLinkKey}, dropping request.`);
|
|
@@ -180,8 +175,7 @@ export default class JobQueue {
|
|
|
180
175
|
if (!this.stopped) {
|
|
181
176
|
//retry the job
|
|
182
177
|
const retryWaterfall = instance.kochavaConfig.networking.retry_waterfall;
|
|
183
|
-
const retryIndex =
|
|
184
|
-
retryWaterfall.length - 1 : job.retries;
|
|
178
|
+
const retryIndex = job.retries > retryWaterfall.length - 1 ? retryWaterfall.length - 1 : job.retries;
|
|
185
179
|
const retrySec = retryWaterfall[retryIndex];
|
|
186
180
|
Log.error(`Job failed, attempting again in ${retrySec} seconds`);
|
|
187
181
|
await new Promise(resolve => this.timeOut = setTimeout(resolve, retrySec * 1000));
|
|
@@ -192,11 +186,7 @@ export default class JobQueue {
|
|
|
192
186
|
return true;
|
|
193
187
|
}
|
|
194
188
|
async attemptJob(instance, job) {
|
|
195
|
-
if (job.preStartBody.action === "event")
|
|
196
|
-
return await Event.send(instance, job.preStartBody, job.postStartBody);
|
|
197
|
-
else if (job.preStartBody.action === "identityLink")
|
|
198
|
-
return await IdLink.send(instance, job);
|
|
199
|
-
else {
|
|
189
|
+
if (job.preStartBody.action === "event") return await Event.send(instance, job.preStartBody, job.postStartBody);else if (job.preStartBody.action === "identityLink") return await IdLink.send(instance, job);else {
|
|
200
190
|
Log.warn("Invalid action in job from jobqueue, cancelling.");
|
|
201
191
|
return true;
|
|
202
192
|
}
|
|
@@ -218,3 +208,4 @@ export default class JobQueue {
|
|
|
218
208
|
updatePersistedValue(PersistKey.IdLinkQueue, JSON.stringify(this.idLinkQueue), false);
|
|
219
209
|
}
|
|
220
210
|
}
|
|
211
|
+
//# sourceMappingURL=jobqueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../dist/jobqueue.js"],"names":["Event","IdLink","Log","uuidv4","addToPersistedEventQueue","PersistKey","removeFromEventPersistedQueue","removeFromIdLinkPersistedQueue","updateOrAddPersistedIdLinkQueue","updatePersistedValue","jobIsEventJob","obj","jobIsIdLinkJob","JobQueue","constructor","eventQueue","idLinkQueue","processing","stopped","paused","start","instance","JSON","parse","localStorage","getItem","EventQueue","IdLinkQueue","updateEventJobs","updateIdLinkJobs","trace","stringify","dequeueJob","stop","timeOut","clearTimeout","pause","enqueueEvent","args","eventName","eventData","eventPreStartBody","constructPreStart","installDone","kvinitDone","postStartBody","constructPostStart","newJob","id","queuedBeforeStart","preStartBody","retries","push","newEventJob","undefined","enqueueIdLink","idLink","idLinkPreStartBody","idLinkJob","shift","result","processJob","eventJob","job","denyName","kochavaConfig","privacy","deny_event_names","debug","denyIdLinkKey","deny_identity_links","Object","keys","success","attemptJob","retryWaterfall","networking","retry_waterfall","retryIndex","length","retrySec","error","Promise","resolve","setTimeout","action","send","warn"],"mappings":"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","file":"jobqueue.js","sourcesContent":["/*\n Authored by Brett Barinaga on 11/17/21.\n Copyright (c) Kochava, Inc. All rights reserved.\n*/\nimport * as Event from \"./payloads/event\";\nimport * as IdLink from \"./payloads/identityLink\";\nimport { Log } from \"./utils/log\";\nimport { uuidv4 } from \"./utils/utils\";\nimport { addToPersistedEventQueue, PersistKey, removeFromEventPersistedQueue, removeFromIdLinkPersistedQueue, updateOrAddPersistedIdLinkQueue, updatePersistedValue } from \"./browser/persist\";\nfunction jobIsEventJob(obj) {\n return 'eventName' in obj;\n}\nfunction jobIsIdLinkJob(obj) {\n return 'idLink' in obj;\n}\nexport default class JobQueue {\n constructor() {\n this.eventQueue = [];\n this.idLinkQueue = [];\n this.processing = false;\n this.stopped = false;\n this.paused = false;\n }\n async start(instance) {\n this.eventQueue = JSON.parse(localStorage.getItem(PersistKey.EventQueue)) || [];\n this.idLinkQueue = JSON.parse(localStorage.getItem(PersistKey.IdLinkQueue)) || [];\n this.updateEventJobs(instance);\n this.updateIdLinkJobs(instance);\n Log.trace(\"Starting Event Queue\", JSON.parse(JSON.stringify(this.eventQueue)));\n Log.trace(\"Starting IdLink Queue\", JSON.parse(JSON.stringify(this.idLinkQueue)));\n this.stopped = false;\n this.paused = false;\n await this.dequeueJob(instance);\n }\n stop() {\n this.stopped = true;\n if (this.timeOut)\n clearTimeout(this.timeOut);\n this.processing = false;\n }\n pause() {\n this.paused = true;\n }\n async enqueueEvent(instance, args) {\n const eventName = args[0];\n const eventData = args[1];\n const eventPreStartBody = Event.constructPreStart(instance, eventName, eventData);\n if (instance.installDone && instance.kvinitDone) {\n const postStartBody = Event.constructPostStart(instance, eventPreStartBody);\n const newJob = {\n id: uuidv4(),\n queuedBeforeStart: false,\n preStartBody: eventPreStartBody,\n postStartBody,\n retries: 0,\n eventName,\n };\n this.eventQueue.push(newJob);\n addToPersistedEventQueue(newJob);\n await this.dequeueJob(instance);\n return;\n }\n const newEventJob = {\n id: uuidv4(),\n queuedBeforeStart: true,\n preStartBody: eventPreStartBody,\n postStartBody: undefined,\n retries: 0,\n eventName,\n };\n this.eventQueue.push(newEventJob);\n addToPersistedEventQueue(newEventJob);\n }\n async enqueueIdLink(instance, idLink) {\n const idLinkPreStartBody = IdLink.constructPreStart(instance, idLink);\n if (instance.installDone && instance.kvinitDone) {\n const postStartBody = IdLink.constructPostStart(instance, idLinkPreStartBody);\n const newJob = {\n id: uuidv4(),\n queuedBeforeStart: false,\n preStartBody: idLinkPreStartBody,\n postStartBody,\n retries: 0,\n idLink,\n };\n updateOrAddPersistedIdLinkQueue(newJob);\n this.idLinkQueue.push(newJob);\n await this.dequeueJob(instance);\n return;\n }\n const newJob = {\n id: uuidv4(),\n queuedBeforeStart: true,\n preStartBody: idLinkPreStartBody,\n postStartBody: undefined,\n retries: 0,\n idLink,\n };\n updateOrAddPersistedIdLinkQueue(newJob);\n this.idLinkQueue.push(newJob);\n }\n async dequeueJob(instance) {\n // If queue is busy, prev job not finished\n if (this.processing)\n return false;\n // If the queue is paused, do not dequeue a new job\n if (this.paused)\n return false;\n // If the queue is stopped do not dequeue a new job\n if (this.stopped) {\n return false;\n }\n // Prioritize sending identityLinks first\n // Remove first job from queue\n const idLinkJob = this.idLinkQueue.shift();\n if (idLinkJob) {\n // handle idlinkjob\n Log.trace(\"Dequeued Job: \", idLinkJob);\n this.processing = true;\n const result = await this.processJob(instance, idLinkJob);\n if (this.stopped) {\n return true;\n }\n this.processing = false;\n // If the job succeeded, dequeue the next job\n if (result) {\n removeFromIdLinkPersistedQueue(idLinkJob);\n return await this.dequeueJob(instance);\n }\n }\n const eventJob = this.eventQueue.shift();\n if (eventJob) {\n //handle eventJob\n Log.trace(\"Dequeued Job: \", eventJob);\n // Process the job\n this.processing = true;\n const result = await this.processJob(instance, eventJob);\n if (this.stopped) {\n return true;\n }\n this.processing = false;\n // If the job succeeded, dequeue the next job\n if (result) {\n removeFromEventPersistedQueue(eventJob);\n return await this.dequeueJob(instance);\n }\n }\n // If neither queue had a job, break out of recursion\n if (!idLinkJob && !eventJob)\n return false;\n return true;\n }\n async processJob(instance, job) {\n if (jobIsEventJob(job)) {\n for (const denyName of instance.kochavaConfig.privacy.deny_event_names) {\n if (denyName === job.eventName) {\n Log.debug(`Denied event_name ${denyName}, dropping request.`);\n return true;\n }\n }\n }\n else if (jobIsIdLinkJob(job)) {\n for (const denyIdLinkKey of instance.kochavaConfig.privacy.deny_identity_links) {\n if (denyIdLinkKey === Object.keys(job.idLink)[0]) {\n Log.debug(`Denied identity_link ${denyIdLinkKey}, dropping request.`);\n return true;\n }\n }\n }\n let success = false;\n do {\n success = await this.attemptJob(instance, job);\n // If our job succeeded\n if (success) {\n // Job Done\n Log.trace(\"Job processed successfully:\", job);\n return true;\n }\n // If it didnt succeed, but we our queue isnt stopped\n if (!this.stopped) {\n //retry the job\n const retryWaterfall = instance.kochavaConfig.networking.retry_waterfall;\n const retryIndex = (job.retries > retryWaterfall.length - 1) ?\n retryWaterfall.length - 1 : job.retries;\n const retrySec = retryWaterfall[retryIndex];\n Log.error(`Job failed, attempting again in ${retrySec} seconds`);\n await new Promise(resolve => this.timeOut = setTimeout(resolve, retrySec * 1000));\n job.retries++;\n }\n } while (!success && !this.stopped);\n // Job Canceled\n return true;\n }\n async attemptJob(instance, job) {\n if (job.preStartBody.action === \"event\")\n return await Event.send(instance, job.preStartBody, job.postStartBody);\n else if (job.preStartBody.action === \"identityLink\")\n return await IdLink.send(instance, job);\n else {\n Log.warn(\"Invalid action in job from jobqueue, cancelling.\");\n return true;\n }\n }\n updateEventJobs(instance) {\n for (const job of this.eventQueue) {\n if (job.queuedBeforeStart) {\n job.postStartBody = Event.constructPostStart(instance, job.preStartBody);\n }\n }\n updatePersistedValue(PersistKey.EventQueue, JSON.stringify(this.eventQueue), false);\n }\n updateIdLinkJobs(instance) {\n for (const job of this.idLinkQueue) {\n if (job.queuedBeforeStart) {\n job.postStartBody = IdLink.constructPostStart(instance, job.preStartBody);\n }\n }\n updatePersistedValue(PersistKey.IdLinkQueue, JSON.stringify(this.idLinkQueue), false);\n }\n}\n"]}
|