@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.
Files changed (2) hide show
  1. package/index.js +152 -28
  2. 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 providers = {};
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
- providers[provider.name] = provider;
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
- providers[provider.name] = provider;
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 = () => providers;
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 = (getDataPerKey('local', tagStorage, providersKey) ||
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 allowProvider = (providers, providerId) => {
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 || !allowProvider(providers, pkg.name)) {
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
- savePerKey('local', tagStorage, providers, providersKey);
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 handleFunction = (arg) => {
1147
- const sliced = [].slice.call(arg);
1148
- if (!Array.isArray(sliced)) {
1149
- return
1150
- }
1151
-
1235
+ const handleStubs = (event) => {
1152
1236
  try {
1153
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
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
- // eslint-disable-next-line prefer-rest-params
1172
- return handleFunction(arguments)
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
- // restore calls that were triggered before lib was ready
1176
- stubs.forEach(handleFunction);
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
  })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blotoutio/edgetag-sdk-browser",
3
- "version": "0.6.5",
3
+ "version": "0.6.7",
4
4
  "description": "Browser SDK for EdgeTag",
5
5
  "author": "Blotout",
6
6
  "license": "MIT",