@blotoutio/edgetag-sdk-browser 0.6.5 → 0.6.7
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/index.js +152 -28
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
(function () {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
+
var api$1 = /*#__PURE__*/Object.freeze({
|
|
5
|
+
__proto__: null,
|
|
6
|
+
get init () { return init; },
|
|
7
|
+
get tag () { return tag; },
|
|
8
|
+
get consent () { return consent; },
|
|
9
|
+
get user () { return user; },
|
|
10
|
+
get data () { return data; },
|
|
11
|
+
get getData () { return getData; },
|
|
12
|
+
get keys () { return keys; },
|
|
13
|
+
get getUserId () { return getUserId; }
|
|
14
|
+
});
|
|
15
|
+
|
|
4
16
|
/******************************************************************************
|
|
5
17
|
Copyright (c) Microsoft Corporation.
|
|
6
18
|
|
|
@@ -28,7 +40,6 @@
|
|
|
28
40
|
|
|
29
41
|
const tagStorage = 'edgeTag';
|
|
30
42
|
const consentKey = 'consent';
|
|
31
|
-
const providersKey = 'providers';
|
|
32
43
|
const keyPrefix = `_worker`;
|
|
33
44
|
|
|
34
45
|
const initKey = `${keyPrefix}Store`;
|
|
@@ -193,8 +204,10 @@
|
|
|
193
204
|
return generateUrl(`/keys`);
|
|
194
205
|
};
|
|
195
206
|
|
|
207
|
+
let allowedProvider = [];
|
|
208
|
+
let initialized = false;
|
|
196
209
|
let consentDisabled = false;
|
|
197
|
-
const
|
|
210
|
+
const providersPackages = {};
|
|
198
211
|
const setPreferences = (preferences) => {
|
|
199
212
|
var _a;
|
|
200
213
|
if (!preferences) {
|
|
@@ -209,21 +222,29 @@
|
|
|
209
222
|
if (!provider.name) {
|
|
210
223
|
return;
|
|
211
224
|
}
|
|
212
|
-
|
|
225
|
+
providersPackages[provider.name] = provider;
|
|
213
226
|
});
|
|
214
227
|
if (window && Array.isArray(window.edgetagProviders)) {
|
|
215
228
|
window.edgetagProviders.forEach((provider) => {
|
|
216
229
|
if (!provider.name) {
|
|
217
230
|
return;
|
|
218
231
|
}
|
|
219
|
-
|
|
232
|
+
providersPackages[provider.name] = provider;
|
|
220
233
|
});
|
|
221
234
|
}
|
|
222
235
|
setUrl(preferences.edgeURL);
|
|
223
236
|
return true;
|
|
224
237
|
};
|
|
225
238
|
const isConsentDisabled = () => consentDisabled;
|
|
226
|
-
const getProvidersPackage = () =>
|
|
239
|
+
const getProvidersPackage = () => providersPackages;
|
|
240
|
+
const isInitialized = () => initialized;
|
|
241
|
+
const setInitialized = () => {
|
|
242
|
+
initialized = true;
|
|
243
|
+
};
|
|
244
|
+
const getAllowedProviders = () => allowedProvider;
|
|
245
|
+
const setAllowedProviders = (providers) => {
|
|
246
|
+
allowedProvider = providers;
|
|
247
|
+
};
|
|
227
248
|
|
|
228
249
|
const getUserAgent = () => {
|
|
229
250
|
const nav = navigator;
|
|
@@ -232,6 +253,9 @@
|
|
|
232
253
|
return ua;
|
|
233
254
|
};
|
|
234
255
|
const allowTag = (providers) => {
|
|
256
|
+
if (!allowProviders(providers)) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
235
259
|
const consent = getDataPerKey('local', tagStorage, consentKey);
|
|
236
260
|
if (isConsentDisabled()) {
|
|
237
261
|
return true;
|
|
@@ -245,8 +269,7 @@
|
|
|
245
269
|
if (!providers) {
|
|
246
270
|
return (Object.values(consent).find((isAllowed) => isAllowed) || false);
|
|
247
271
|
}
|
|
248
|
-
const allProviders = (
|
|
249
|
-
[]);
|
|
272
|
+
const allProviders = getAllowedProviders();
|
|
250
273
|
for (const provider of allProviders) {
|
|
251
274
|
const tagProviderSetting = providers[provider];
|
|
252
275
|
if (tagProviderSetting ||
|
|
@@ -259,7 +282,39 @@
|
|
|
259
282
|
}
|
|
260
283
|
return false;
|
|
261
284
|
};
|
|
262
|
-
const
|
|
285
|
+
const allowProviders = (providers) => {
|
|
286
|
+
if (!providers) {
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
const allowedProvider = getAllowedProviders();
|
|
290
|
+
if (allowedProvider && allowedProvider.length > 0) {
|
|
291
|
+
let found = false;
|
|
292
|
+
Object.entries(providers).forEach(([key, value]) => {
|
|
293
|
+
if (!value) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (allowedProvider.includes(key)) {
|
|
297
|
+
found = true;
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
return found;
|
|
301
|
+
}
|
|
302
|
+
return true;
|
|
303
|
+
};
|
|
304
|
+
const allowProvider = (providerId) => {
|
|
305
|
+
if (!providerId) {
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
308
|
+
const allowedProvider = getAllowedProviders();
|
|
309
|
+
if (allowedProvider && allowedProvider.length > 0) {
|
|
310
|
+
return allowedProvider.includes(providerId);
|
|
311
|
+
}
|
|
312
|
+
return true;
|
|
313
|
+
};
|
|
314
|
+
const allowProviderWithConsent = (providers, providerId) => {
|
|
315
|
+
if (!allowProvider(providerId)) {
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
263
318
|
if (providers && Object.keys(providers).length) {
|
|
264
319
|
const tagProvider = providers[providerId];
|
|
265
320
|
if (!(tagProvider ||
|
|
@@ -867,7 +922,28 @@
|
|
|
867
922
|
};
|
|
868
923
|
const getProviderVariables = (name) => manifestVariables[name] || {};
|
|
869
924
|
|
|
925
|
+
let stubs = [];
|
|
926
|
+
const addStubs = (newStubs) => {
|
|
927
|
+
stubs = [...stubs, ...newStubs];
|
|
928
|
+
};
|
|
929
|
+
const addStub = (stub) => {
|
|
930
|
+
stubs.push(stub);
|
|
931
|
+
};
|
|
932
|
+
const processStubs = () => {
|
|
933
|
+
try {
|
|
934
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
935
|
+
// @ts-ignore
|
|
936
|
+
stubs.forEach((stub) => api$1[stub.name](...(stub.arguments || [])));
|
|
937
|
+
}
|
|
938
|
+
catch (e) {
|
|
939
|
+
console.error(e);
|
|
940
|
+
}
|
|
941
|
+
};
|
|
942
|
+
|
|
870
943
|
const sendTag = ({ eventName, eventId, data, providerData, providers, options, }) => {
|
|
944
|
+
if (!allowProviders(providers)) {
|
|
945
|
+
return;
|
|
946
|
+
}
|
|
871
947
|
const payload = {
|
|
872
948
|
eventName,
|
|
873
949
|
eventId,
|
|
@@ -881,6 +957,13 @@
|
|
|
881
957
|
postRequest(getTagURL(), payload, options).catch(info);
|
|
882
958
|
};
|
|
883
959
|
const handleTag = (eventName, data = {}, providers, options) => {
|
|
960
|
+
if (!isInitialized()) {
|
|
961
|
+
addStub({
|
|
962
|
+
name: 'tag',
|
|
963
|
+
arguments: [eventName, data, providers, options],
|
|
964
|
+
});
|
|
965
|
+
return;
|
|
966
|
+
}
|
|
884
967
|
if (!allowTag(providers)) {
|
|
885
968
|
console.log('No consent');
|
|
886
969
|
return;
|
|
@@ -894,7 +977,7 @@
|
|
|
894
977
|
const providerData = {};
|
|
895
978
|
if (providerPackages) {
|
|
896
979
|
Object.values(providerPackages).forEach((pkg) => {
|
|
897
|
-
if (!pkg || !pkg.tag || !
|
|
980
|
+
if (!pkg || !pkg.tag || !allowProviderWithConsent(providers, pkg.name)) {
|
|
898
981
|
return;
|
|
899
982
|
}
|
|
900
983
|
const result = pkg.tag({
|
|
@@ -1002,11 +1085,10 @@
|
|
|
1002
1085
|
};
|
|
1003
1086
|
|
|
1004
1087
|
const handleManifest = (manifest) => {
|
|
1005
|
-
const providers = [];
|
|
1006
1088
|
const providerPackages = getProvidersPackage();
|
|
1007
1089
|
const userId = handleGetUserId();
|
|
1090
|
+
setAllowedProviders(manifest.map((provider) => provider.package));
|
|
1008
1091
|
manifest.forEach((provider) => {
|
|
1009
|
-
providers.push(provider.package);
|
|
1010
1092
|
addProviderVariable(provider.package, provider.variables);
|
|
1011
1093
|
if (provider.rules) {
|
|
1012
1094
|
Object.entries(provider.rules).forEach(([name, recipe]) => {
|
|
@@ -1020,12 +1102,13 @@
|
|
|
1020
1102
|
}
|
|
1021
1103
|
if (providerPackages) {
|
|
1022
1104
|
const pkg = providerPackages[provider.package];
|
|
1023
|
-
if (pkg && pkg.init) {
|
|
1105
|
+
if (pkg && pkg.init && allowProvider(pkg.name)) {
|
|
1024
1106
|
pkg.init({ userId, manifest: provider, sendTag });
|
|
1025
1107
|
}
|
|
1026
1108
|
}
|
|
1027
1109
|
});
|
|
1028
|
-
|
|
1110
|
+
setInitialized();
|
|
1111
|
+
processStubs();
|
|
1029
1112
|
};
|
|
1030
1113
|
|
|
1031
1114
|
const handleInit = (preferences) => {
|
|
@@ -1033,6 +1116,9 @@
|
|
|
1033
1116
|
if (!success) {
|
|
1034
1117
|
return;
|
|
1035
1118
|
}
|
|
1119
|
+
if (preferences.afterManifestEvents) {
|
|
1120
|
+
addStubs(preferences.afterManifestEvents);
|
|
1121
|
+
}
|
|
1036
1122
|
const url = new URL(getInitURL());
|
|
1037
1123
|
if (preferences.disableConsentCheck) {
|
|
1038
1124
|
url.searchParams.set('consentDisabled', 'true');
|
|
@@ -1107,6 +1193,9 @@
|
|
|
1107
1193
|
const keys = (callback) => {
|
|
1108
1194
|
handleKeys(callback);
|
|
1109
1195
|
};
|
|
1196
|
+
const getUserId = () => {
|
|
1197
|
+
return handleGetUserId();
|
|
1198
|
+
};
|
|
1110
1199
|
|
|
1111
1200
|
// TODO https://github.com/blotoutio/solutions/issues/826
|
|
1112
1201
|
|
|
@@ -1143,16 +1232,9 @@
|
|
|
1143
1232
|
var api = new API();
|
|
1144
1233
|
|
|
1145
1234
|
(function () {
|
|
1146
|
-
const
|
|
1147
|
-
const sliced = [].slice.call(arg);
|
|
1148
|
-
if (!Array.isArray(sliced)) {
|
|
1149
|
-
return
|
|
1150
|
-
}
|
|
1151
|
-
|
|
1235
|
+
const handleStubs = (event) => {
|
|
1152
1236
|
try {
|
|
1153
|
-
|
|
1154
|
-
// @ts-ignore
|
|
1155
|
-
return library[sliced[0]](...sliced.slice(1))
|
|
1237
|
+
return library[event.name](...event.arguments)
|
|
1156
1238
|
} catch (e) {
|
|
1157
1239
|
console.error(e);
|
|
1158
1240
|
}
|
|
@@ -1161,19 +1243,61 @@
|
|
|
1161
1243
|
const library = api;
|
|
1162
1244
|
let stubs = [];
|
|
1163
1245
|
if (window.edgetag) {
|
|
1164
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
1165
|
-
// @ts-ignore
|
|
1166
1246
|
stubs = window.edgetag.stubs || [];
|
|
1167
1247
|
}
|
|
1168
1248
|
|
|
1169
1249
|
// this needs to be regular function for arguments to work
|
|
1170
1250
|
window.edgetag = function () {
|
|
1171
|
-
|
|
1172
|
-
|
|
1251
|
+
const sliced = [].slice.call(arguments);
|
|
1252
|
+
if (!Array.isArray(sliced)) {
|
|
1253
|
+
return
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1256
|
+
try {
|
|
1257
|
+
return library[sliced[0]](...sliced.slice(1))
|
|
1258
|
+
} catch (e) {
|
|
1259
|
+
console.error(e);
|
|
1260
|
+
}
|
|
1173
1261
|
};
|
|
1174
1262
|
|
|
1175
|
-
|
|
1176
|
-
|
|
1263
|
+
const beforeManifestEvents = [];
|
|
1264
|
+
const afterManifestEvents = [];
|
|
1265
|
+
let initCall = null;
|
|
1266
|
+
|
|
1267
|
+
stubs.forEach((arg) => {
|
|
1268
|
+
const sliced = [].slice.call(arg);
|
|
1269
|
+
if (!Array.isArray(sliced)) {
|
|
1270
|
+
return
|
|
1271
|
+
}
|
|
1272
|
+
|
|
1273
|
+
if (sliced[0] === 'init') {
|
|
1274
|
+
initCall = sliced.slice(1);
|
|
1275
|
+
return
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
if (sliced[0] === 'tag') {
|
|
1279
|
+
afterManifestEvents.push({
|
|
1280
|
+
name: sliced[0],
|
|
1281
|
+
arguments: sliced.slice(1),
|
|
1282
|
+
});
|
|
1283
|
+
return
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
beforeManifestEvents.push({
|
|
1287
|
+
name: sliced[0],
|
|
1288
|
+
arguments: sliced.slice(1),
|
|
1289
|
+
});
|
|
1290
|
+
});
|
|
1291
|
+
|
|
1292
|
+
if (initCall) {
|
|
1293
|
+
initCall[0]['afterManifestEvents'] = afterManifestEvents;
|
|
1294
|
+
handleStubs({
|
|
1295
|
+
name: 'init',
|
|
1296
|
+
arguments: initCall,
|
|
1297
|
+
});
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
beforeManifestEvents.forEach(handleStubs);
|
|
1177
1301
|
})();
|
|
1178
1302
|
|
|
1179
1303
|
})();
|