@blotoutio/edgetag-sdk-browser 0.1.8 → 0.3.0

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.esm.js ADDED
@@ -0,0 +1 @@
1
+ function e(e,t,n,o){return new(n||(n=Promise))((function(r,s){function a(e){try{i(o.next(e))}catch(e){s(e)}}function c(e){try{i(o.throw(e))}catch(e){s(e)}}function i(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,c)}i((o=o.apply(e,t||[])).next())}))}const t=(e,t,n,o)=>{const a=s(e);a.data||(a.data={}),a.data[t]||(a.data[t]={}),a.data[t][o]=n,r(e,a)},n=(e,t,n,o)=>{const a=s(e);a[t]||(a[t]={}),a[t][o]=n,r(e,a)},o=(e,t,n)=>{const o=s(e);if(o[t])return o[t][n]},r=(e,t,n="_workerStore")=>{"session"!==e?a(t,n):i(t,n)},s=(e,t="_workerStore")=>"session"===e?l(t):c(t),a=(e,t)=>{localStorage.setItem(t,JSON.stringify(e))},c=e=>{const t=localStorage.getItem(e);return t&&JSON.parse(t)||{}},i=(e,t)=>{sessionStorage.setItem(t,JSON.stringify(e))},l=e=>{const t=sessionStorage.getItem(e);return t&&JSON.parse(t)||{}};let u="";const g=e=>{const t=d();return t?`${t}${e}`:(console.log("URL is not valid"),"")},d=()=>u;let f=!1;const h=e=>{return!!e&&(e.edgeURL?(f=!!e.disableConsentCheck,null!=(t=e.edgeURL)&&(u=t),!0):(console.error("Please provide URL for EdgeTag"),!1));var t},v=()=>{const e=navigator;let t=e.userAgent;return t+=e.brave?`${t} Brave`:"",t},p=e=>{const t=o("local","edgeTag","consent");if(f)return!0;if(!t)return!1;if(t.all)return!0;if(!e)return Object.values(t).find((e=>e))||!1;const n=o("local","edgeTag","providers")||[];for(const o of n){const n=e[o];if((n||!0===e.all&&void 0===n||!1===e.all&&!0===n)&&t[o])return!0}return!1},y=(e,t)=>{let n;return t&&(n=new Blob([JSON.stringify(t)],{type:"application/json"})),navigator.sendBeacon(e,n)},b=(t,n,o)=>e(void 0,void 0,void 0,(function*(){return yield fetch(n,{method:t,headers:{"Content-type":"application/json; charset=utf-8",Accept:"application/json; charset=utf-8"},body:JSON.stringify(o),credentials:"include"}).then((e=>e.json().then((t=>({status:e.status,body:t}))))).then((e=>e.status<200||e.status>=300?Promise.reject(new Error(JSON.stringify(e.body))):Promise.resolve(e.body))).catch((e=>Promise.reject(new Error(e))))}));function m(t,n,o){return e(this,void 0,void 0,(function*(){if(!t)return Promise.reject(new Error("URL is empty"));const e=(e=>{const t=Object.assign({pageUrl:window.location.href,userAgent:v()},e||{});let n={};const o=s("session");o&&(n=Object.assign(Object.assign({},n),o));const r=s("local");return r&&(n=Object.assign(Object.assign({},n),r)),t.storage=n,t})(n);return o&&"beacon"===o.method&&navigator.sendBeacon?Promise.resolve(y(t,e)):yield b("POST",t,e)}))}const w=e=>{},S=e=>{n("local","edgeTag",e,"consent")},O=e=>{const t={consentString:e};S(e),m(g("/consent"),t).catch(w)},j=(e,t,n)=>{const o={eventName:e};t&&(o.data=t),n&&(o.providers=n),p(n)?m(g("/tag"),o).catch(w):console.log("No consent")},k=(e,n,o,r)=>{let s;switch(r){case"cookie":s=(e=>{const t=`${e}=`,n=decodeURIComponent(document.cookie).split(";");for(let e=0;e<n.length;e++){let o=n[e];for(;" "===o.charAt(0);)o=o.substring(1);if(0===o.indexOf(t))return o.substring(t.length,o.length)}return""})(n);break;case"local":s=sessionStorage.getItem(n);break;case"session":s=localStorage.getItem(n)}s&&t(o,e,s,n)},P=(e,n)=>{n.forEach((n=>{switch(n.type){case"query":((e,n,o)=>{const r=new URLSearchParams(window.location.search);r&&r.get(n)&&t(o,e,r.get(n),n)})(e,n.key,n.persist);break;case"storage":k(e,n.key,n.persist,n.location)}}))},E=t=>{if(!h(t))return;let o=`${g("/init")}`;t.disableConsentCheck&&(o=`${o}?consentDisabled=true`,S({all:!0})),function(t,n){return e(this,void 0,void 0,(function*(){return t?n&&"beacon"===n.method&&navigator.sendBeacon?{result:Promise.resolve(y(t))}:yield b("GET",t):Promise.reject(new Error("URL is empty"))}))}(o).then((e=>{e?(e=>{const t=[];e.forEach((e=>{t.push(e.package),Object.entries(e.rules).forEach((([t,n])=>{"capture"!==t||P(e.package,n)}))})),n("local","edgeTag",t,"providers")})(e.result):console.log("init failed")})).catch(w)},N=(e,t)=>{if(!e||!t)return void console.error("Key or Value is missing in user api.");const n={key:e,value:t};m(g("/user"),n).catch(w)};var U=new class{init(e){(e=>{E(e)})(e)}tag(e,t,n){((e,t,n)=>{j(e,t,n)})(e,t,n)}consent(e){(e=>{O(e)})(e)}user(e,t){((e,t)=>{N(e,t)})(e,t)}};!function(){const e=e=>{const n=[].slice.call(e);if(Array.isArray(n))try{return t[n[0]](...n.slice(1))}catch(e){console.error(e)}},t=U;let n=[];window.edgetag&&(n=window.edgetag.stubs||[]),window.edgetag=function(){return e(arguments)},n.forEach(e)}();
package/index.umd.js ADDED
@@ -0,0 +1 @@
1
+ !function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e,t,n,o){return new(n||(n=Promise))((function(r,s){function c(e){try{a(o.next(e))}catch(e){s(e)}}function i(e){try{a(o.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(c,i)}a((o=o.apply(e,t||[])).next())}))}const t="edgeTag",n="consent",o="providers",r="_workerStore",s=(e,t,n,o)=>{const r=l(e);r.data||(r.data={}),r.data[t]||(r.data[t]={}),r.data[t][o]=n,a(e,r)},c=(e,t,n,o)=>{const r=l(e);r[t]||(r[t]={}),r[t][o]=n,a(e,r)},i=(e,t,n)=>{const o=l(e);if(o[t])return o[t][n]},a=(e,t,n=r)=>{"session"!==e?u(t,n):g(t,n)},l=(e,t=r)=>"session"===e?f(t):d(t),u=(e,t)=>{localStorage.setItem(t,JSON.stringify(e))},d=e=>{const t=localStorage.getItem(e);return t&&JSON.parse(t)||{}},g=(e,t)=>{sessionStorage.setItem(t,JSON.stringify(e))},f=e=>{const t=sessionStorage.getItem(e);return t&&JSON.parse(t)||{}};let h="";const p=e=>{const t=v();return t?`${t}${e}`:(console.log("URL is not valid"),"")},v=()=>h;let y=!1;const m=e=>{return!!e&&(e.edgeURL?(y=!!e.disableConsentCheck,null!=(t=e.edgeURL)&&(h=t),!0):(console.error("Please provide URL for EdgeTag"),!1));var t},b=()=>{const e=navigator;let t=e.userAgent;return t+=e.brave?`${t} Brave`:"",t},w=e=>{const r=i("local",t,n);if(y)return!0;if(!r)return!1;if(r.all)return!0;if(!e)return Object.values(r).find((e=>e))||!1;const s=i("local",t,o)||[];for(const t of s){const n=e[t];if((n||!0===e.all&&void 0===n||!1===e.all&&!0===n)&&r[t])return!0}return!1},S=(e,t)=>{let n;return t&&(n=new Blob([JSON.stringify(t)],{type:"application/json"})),navigator.sendBeacon(e,n)},O=(t,n,o)=>e(void 0,void 0,void 0,(function*(){return yield fetch(n,{method:t,headers:{"Content-type":"application/json; charset=utf-8",Accept:"application/json; charset=utf-8"},body:JSON.stringify(o),credentials:"include"}).then((e=>e.json().then((t=>({status:e.status,body:t}))))).then((e=>e.status<200||e.status>=300?Promise.reject(new Error(JSON.stringify(e.body))):Promise.resolve(e.body))).catch((e=>Promise.reject(new Error(e))))}));function j(t,n,o){return e(this,void 0,void 0,(function*(){if(!t)return Promise.reject(new Error("URL is empty"));const e=(e=>{const t=Object.assign({pageUrl:window.location.href,userAgent:b()},e||{});let n={};const o=l("session");o&&(n=Object.assign(Object.assign({},n),o));const r=l("local");return r&&(n=Object.assign(Object.assign({},n),r)),t.storage=n,t})(n);return o&&"beacon"===o.method&&navigator.sendBeacon?Promise.resolve(S(t,e)):yield O("POST",t,e)}))}const k=e=>{},P=e=>{c("local",t,e,n)},E=e=>{const t={consentString:e};P(e),j(p("/consent"),t).catch(k)},N=(e,t,n)=>{const o={eventName:e};t&&(o.data=t),n&&(o.providers=n),w(n)?j(p("/tag"),o).catch(k):console.log("No consent")},U=(e,t,n,o)=>{let r;switch(o){case"cookie":r=(e=>{const t=`${e}=`,n=decodeURIComponent(document.cookie).split(";");for(let e=0;e<n.length;e++){let o=n[e];for(;" "===o.charAt(0);)o=o.substring(1);if(0===o.indexOf(t))return o.substring(t.length,o.length)}return""})(t);break;case"local":r=sessionStorage.getItem(t);break;case"session":r=localStorage.getItem(t)}r&&s(n,e,r,t)},R=(e,t)=>{t.forEach((t=>{switch(t.type){case"query":((e,t,n)=>{const o=new URLSearchParams(window.location.search);o&&o.get(t)&&s(n,e,o.get(t),t)})(e,t.key,t.persist);break;case"storage":U(e,t.key,t.persist,t.location)}}))},I=n=>{if(!m(n))return;let r=`${p("/init")}`;n.disableConsentCheck&&(r=`${r}?consentDisabled=true`,P({all:!0})),function(t,n){return e(this,void 0,void 0,(function*(){return t?n&&"beacon"===n.method&&navigator.sendBeacon?{result:Promise.resolve(S(t))}:yield O("GET",t):Promise.reject(new Error("URL is empty"))}))}(r).then((e=>{e?(e=>{const n=[];e.forEach((e=>{n.push(e.package),Object.entries(e.rules).forEach((([t,n])=>{"capture"!==t||R(e.package,n)}))})),c("local",t,n,o)})(e.result):console.log("init failed")})).catch(k)},J=(e,t)=>{if(!e||!t)return void console.error("Key or Value is missing in user api.");const n={key:e,value:t};j(p("/user"),n).catch(k)};var L=new class{init(e){(e=>{I(e)})(e)}tag(e,t,n){((e,t,n)=>{N(e,t,n)})(e,t,n)}consent(e){(e=>{E(e)})(e)}user(e,t){((e,t)=>{J(e,t)})(e,t)}};!function(){const e=e=>{const n=[].slice.call(e);if(Array.isArray(n))try{return t[n[0]](...n.slice(1))}catch(e){console.error(e)}},t=L;let n=[];window.edgetag&&(n=window.edgetag.stubs||[]),window.edgetag=function(){return e(arguments)},n.forEach(e)}()}));
package/package.json CHANGED
@@ -1,33 +1,24 @@
1
1
  {
2
2
  "name": "@blotoutio/edgetag-sdk-browser",
3
- "version": "0.1.8",
4
- "description": "Browser package for edge sdk",
3
+ "version": "0.3.0",
4
+ "description": "Browser SDK for EdgeTag",
5
5
  "author": "Blotout",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/blotoutio/edgetag-sdk",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
8
11
  "repository": {
9
12
  "type": "git",
10
13
  "url": "git+https://github.com/blotoutio/edgetag-sdk.git"
11
14
  },
12
15
  "files": [
13
- "index.js",
14
- "index.min.js",
15
- "index.min.js.gz",
16
+ "index.esm.js",
17
+ "index.umd.js",
16
18
  "package.json",
17
19
  "README.md"
18
20
  ],
19
- "scripts": {
20
- "prepublish": "npm run build",
21
- "build": "rollup --config",
22
- "build:web": "rollup --config --configDev",
23
- "lint": "prettier --check .",
24
- "start": "rollup --config --w",
25
- "start:web": "rollup --config --configDev --w"
26
- },
27
- "devDependencies": {
28
- "@blotoutio/edgetag-sdk-core": "^0.1.5"
29
- },
30
- "publishConfig": {
31
- "access": "public"
32
- }
21
+ "main": "./index.umd.js",
22
+ "module": "./index.esm.js",
23
+ "typings": "./index.d.ts"
33
24
  }
package/index.js DELETED
@@ -1,377 +0,0 @@
1
- (function (factory) {
2
- typeof define === 'function' && define.amd ? define(factory) :
3
- factory();
4
- })((function () { 'use strict';
5
-
6
- const tagStorage = 'edgeTag';
7
- const consentKey = 'consent';
8
- const providersKey = 'providers';
9
- const keyPrefix = `_worker`;
10
-
11
- const initKey = `${keyPrefix}Store`;
12
- const saveDataPerKey = (persistType, provider, value, key) => {
13
- const storage = getData(persistType);
14
- if (!storage[provider]) {
15
- storage[provider] = {};
16
- }
17
- storage[provider][key] = value;
18
- saveData(persistType, storage);
19
- };
20
- const getDataPerKey = (persistType, provider, key) => {
21
- const storage = getData(persistType);
22
- if (!storage[provider]) {
23
- return undefined;
24
- }
25
- return storage[provider][key];
26
- };
27
- const saveData = (persistType, value, key = initKey) => {
28
- if (persistType === 'session') {
29
- saveSession(value, key);
30
- return;
31
- }
32
- saveLocal(value, key);
33
- };
34
- const getData = (persistType, key = initKey) => {
35
- if (persistType === 'session') {
36
- return getSession(key);
37
- }
38
- return getLocal(key);
39
- };
40
- const saveLocal = (value, key) => {
41
- localStorage.setItem(key, JSON.stringify(value));
42
- };
43
- const getLocal = (key) => {
44
- return JSON.parse(localStorage.getItem(key)) || {};
45
- };
46
- const saveSession = (value, key) => {
47
- sessionStorage.setItem(key, JSON.stringify(value));
48
- };
49
- const getSession = (key) => {
50
- return JSON.parse(sessionStorage.getItem(key)) || {};
51
- };
52
-
53
- const getUserAgent = () => {
54
- const nav = navigator;
55
- let ua = nav.userAgent;
56
- ua += nav.brave ? `${ua} Brave` : '';
57
- return ua;
58
- };
59
- const allowTag = (providers) => {
60
- const consent = getDataPerKey('local', tagStorage, consentKey);
61
- if (!consent) {
62
- return false;
63
- }
64
- if (consent.all === true) {
65
- return true;
66
- }
67
- if (!providers) {
68
- return Object.values(consent).find((isAllowed) => isAllowed);
69
- }
70
- const allProviders = getDataPerKey('local', tagStorage, providersKey) || [];
71
- for (const provider of allProviders) {
72
- const tagProviderSetting = providers[provider];
73
- if (tagProviderSetting ||
74
- (providers.all === true && tagProviderSetting == undefined) ||
75
- (providers.all === false && tagProviderSetting === true)) {
76
- if (consent[provider]) {
77
- return true;
78
- }
79
- }
80
- }
81
- return false;
82
- };
83
-
84
- const beacon = (url, payload) => {
85
- let blob;
86
- if (payload) {
87
- blob = new Blob([JSON.stringify(payload)], { type: 'application/json' });
88
- }
89
- return navigator.sendBeacon(url, blob);
90
- };
91
- const ajax = async (method, url, payload) => {
92
- return await fetch(url, {
93
- method,
94
- headers: {
95
- 'Content-type': 'application/json; charset=utf-8',
96
- Accept: 'application/json; charset=utf-8',
97
- credentials: 'include',
98
- },
99
- body: JSON.stringify(payload),
100
- })
101
- .then((response) => response.json().then((data) => ({ status: response.status, body: data })))
102
- .then((data) => {
103
- if (data.status < 200 || data.status >= 300) {
104
- // Q: do we need to retry?
105
- return Promise.reject(new Error(JSON.stringify(data.body)));
106
- }
107
- return Promise.resolve(data.body);
108
- })
109
- .catch((error) => {
110
- // Q: do we need to retry?
111
- return Promise.reject(new Error(error));
112
- });
113
- };
114
- const getStandardPayload = (payload) => {
115
- const data = {
116
- pageUrl: window.location.href,
117
- userAgent: getUserAgent(),
118
- ...payload,
119
- };
120
- let storage = {};
121
- const session = getData('session');
122
- if (session) {
123
- storage = {
124
- ...storage,
125
- ...session,
126
- };
127
- }
128
- const local = getData('local');
129
- if (local) {
130
- storage = {
131
- ...storage,
132
- ...local,
133
- };
134
- }
135
- data.storage = storage;
136
- return data;
137
- };
138
- async function postRequest(url, data, options) {
139
- if (!url) {
140
- return Promise.reject(new Error('URL is empty'));
141
- }
142
- const payload = getStandardPayload(data);
143
- if (options && options.method === 'beacon' && navigator.sendBeacon) {
144
- return Promise.resolve(beacon(url, payload));
145
- }
146
- return await ajax('POST', url, payload);
147
- }
148
- async function getRequest(url, options) {
149
- if (!url) {
150
- return Promise.reject(new Error('URL is empty'));
151
- }
152
- if (options && options.method === 'beacon' && navigator.sendBeacon) {
153
- return Promise.resolve(beacon(url));
154
- }
155
- return await ajax('GET', url);
156
- }
157
-
158
- let endpointUrl = '';
159
- const generateUrl = (path) => {
160
- const endpoint = getUrl();
161
- if (!endpoint) {
162
- console.log('URL is not valid');
163
- return '';
164
- }
165
- return `${endpoint}${path}`;
166
- };
167
- const getUrl = () => {
168
- return endpointUrl;
169
- };
170
- const setUrl = (url) => {
171
- if (url == null) {
172
- return;
173
- }
174
- endpointUrl = url;
175
- };
176
- const getTagURL = () => {
177
- return generateUrl('/tag');
178
- };
179
- const getInitURL = () => {
180
- return generateUrl('/init');
181
- };
182
- const getConsentURL = () => {
183
- return generateUrl('/consent');
184
- };
185
-
186
- const info = (data) => {
187
- {
188
- console.info(data);
189
- }
190
- };
191
-
192
- const handleConsent = (consent) => {
193
- const payload = {
194
- consentString: consent,
195
- };
196
- saveDataPerKey('local', tagStorage, consent, consentKey);
197
- postRequest(getConsentURL(), payload).catch(info);
198
- };
199
-
200
- const handleTag = (name, data, providers) => {
201
- let payload = {
202
- eventName: name,
203
- };
204
- if (data) {
205
- payload.data = data;
206
- }
207
- if (providers) {
208
- payload.providers = providers;
209
- }
210
- if (!allowTag(providers)) {
211
- console.log('No consent');
212
- return;
213
- }
214
- postRequest(getTagURL(), payload).catch(info);
215
- };
216
-
217
- const setPreferences = (preferences) => {
218
- if (!preferences) {
219
- return false;
220
- }
221
- if (!preferences.edgeURL) {
222
- console.info('Please provide URL for EdgeTag');
223
- return false;
224
- }
225
- setUrl(preferences.edgeURL);
226
- return true;
227
- };
228
-
229
- const getCookieValue = (key) => {
230
- let name = `${key}=`;
231
- let decodedCookie = decodeURIComponent(document.cookie);
232
- let ca = decodedCookie.split(';');
233
- for (let i = 0; i < ca.length; i++) {
234
- let c = ca[i];
235
- while (c.charAt(0) == ' ') {
236
- c = c.substring(1);
237
- }
238
- if (c.indexOf(name) == 0) {
239
- return c.substring(name.length, c.length);
240
- }
241
- }
242
- return '';
243
- };
244
- const handleCaptureQuery = (provider, key, persistType) => {
245
- const params = new URLSearchParams(window.location.search);
246
- if (!params || !params.get(key)) {
247
- return;
248
- }
249
- saveDataPerKey(persistType, provider, params.get(key), key);
250
- };
251
- const handleCaptureStorage = (provider, location, key, persistType) => {
252
- let data;
253
- switch (location) {
254
- case 'cookie': {
255
- data = getCookieValue(key);
256
- break;
257
- }
258
- case 'local': {
259
- data = sessionStorage.getItem(key);
260
- break;
261
- }
262
- case 'session': {
263
- data = localStorage.getItem(key);
264
- break;
265
- }
266
- }
267
- if (!data) {
268
- return;
269
- }
270
- saveDataPerKey(persistType, provider, data, key);
271
- };
272
- const handleCapture = (provider, params) => {
273
- switch (params.type) {
274
- case 'query': {
275
- handleCaptureQuery(provider, params.key, params.persist);
276
- break;
277
- }
278
- case 'storage': {
279
- handleCaptureStorage(provider, params.location, params.key, params.persist);
280
- break;
281
- }
282
- }
283
- };
284
-
285
- const handleManifest = (manifest) => {
286
- const providers = [];
287
- manifest.forEach((provider) => {
288
- providers.push(provider.package);
289
- Object.entries(provider.rules).forEach(([name, recipe]) => {
290
- switch (name) {
291
- case 'capture': {
292
- handleCapture(provider.package, recipe);
293
- return;
294
- }
295
- }
296
- });
297
- });
298
- saveDataPerKey('local', tagStorage, providers, providersKey);
299
- };
300
-
301
- const handleInit = (preferences) => {
302
- const success = setPreferences(preferences);
303
- if (!success) {
304
- return;
305
- }
306
- getRequest(getInitURL())
307
- .then((result) => {
308
- if (!result) {
309
- console.log('init failed');
310
- return;
311
- }
312
- handleManifest(result.result);
313
- })
314
- .catch(info);
315
- };
316
-
317
- const init = (preferences) => {
318
- handleInit(preferences);
319
- };
320
- const tag = (name, data, providers) => {
321
- handleTag(name, data, providers);
322
- };
323
- const consent = (consent) => {
324
- handleConsent(consent);
325
- };
326
-
327
- class API {
328
- init(preferences) {
329
- init(preferences);
330
- }
331
-
332
- tag(name, data, providers) {
333
- tag(name, data, providers);
334
- }
335
-
336
- consent(consentString) {
337
- consent(consentString);
338
- }
339
- }
340
-
341
- var api = new API();
342
-
343
- (function () {
344
- const handleFunction = (arg) => {
345
- const sliced = [].slice.call(arg);
346
- if (!Array.isArray(sliced)) {
347
- return
348
- }
349
-
350
- try {
351
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
352
- // @ts-ignore
353
- return library[sliced[0]](...sliced.slice(1))
354
- } catch (e) {
355
- console.error(e);
356
- }
357
- };
358
-
359
- const library = api;
360
- let stubs = [];
361
- if (window.edgetag) {
362
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
363
- // @ts-ignore
364
- stubs = window.edgetag.stubs || [];
365
- }
366
-
367
- // this needs to be regular function for arguments to work
368
- window.edgetag = function () {
369
- // eslint-disable-next-line prefer-rest-params
370
- return handleFunction(arguments)
371
- };
372
-
373
- // restore calls that were triggered before lib was ready
374
- stubs.forEach(handleFunction);
375
- })();
376
-
377
- }));
package/index.min.js DELETED
@@ -1 +0,0 @@
1
- !function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e="edgeTag",t="consent",n="providers",o="_workerStore",r=(e,t,n,o)=>{const r=c(e);r[t]||(r[t]={}),r[t][o]=n,a(e,r)},s=(e,t,n)=>{const o=c(e);if(o[t])return o[t][n]},a=(e,t,n=o)=>{"session"!==e?i(t,n):g(t,n)},c=(e,t=o)=>"session"===e?u(t):l(t),i=(e,t)=>{localStorage.setItem(t,JSON.stringify(e))},l=e=>JSON.parse(localStorage.getItem(e))||{},g=(e,t)=>{sessionStorage.setItem(t,JSON.stringify(e))},u=e=>JSON.parse(sessionStorage.getItem(e))||{},d=()=>{const e=navigator;let t=e.userAgent;return t+=e.brave?`${t} Brave`:"",t},f=(e,t)=>{let n;return t&&(n=new Blob([JSON.stringify(t)],{type:"application/json"})),navigator.sendBeacon(e,n)},h=async(e,t,n)=>await fetch(t,{method:e,headers:{"Content-type":"application/json; charset=utf-8",Accept:"application/json; charset=utf-8",credentials:"include"},body:JSON.stringify(n)}).then((e=>e.json().then((t=>({status:e.status,body:t}))))).then((e=>e.status<200||e.status>=300?Promise.reject(new Error(JSON.stringify(e.body))):Promise.resolve(e.body))).catch((e=>Promise.reject(new Error(e))));async function p(e,t,n){if(!e)return Promise.reject(new Error("URL is empty"));const o=(e=>{const t={pageUrl:window.location.href,userAgent:d(),...e};let n={};const o=c("session");o&&(n={...n,...o});const r=c("local");return r&&(n={...n,...r}),t.storage=n,t})(t);return n&&"beacon"===n.method&&navigator.sendBeacon?Promise.resolve(f(e,o)):await h("POST",e,o)}let w="";const y=e=>{const t=m();return t?`${t}${e}`:(console.log("URL is not valid"),"")},m=()=>w,v=e=>{},S=n=>{const o={consentString:n};r("local",e,n,t),p(y("/consent"),o).catch(v)},b=(o,r,a)=>{let c={eventName:o};r&&(c.data=r),a&&(c.providers=a),(o=>{const r=s("local",e,t);if(!r)return!1;if(!0===r.all)return!0;if(!o)return Object.values(r).find((e=>e));const a=s("local",e,n)||[];for(const e of a){const t=o[e];if((t||!0===o.all&&null==t||!1===o.all&&!0===t)&&r[e])return!0}return!1})(a)?p(y("/tag"),c).catch(v):console.log("No consent")},O=e=>{return!!e&&(e.edgeURL?(null!=(t=e.edgeURL)&&(w=t),!0):(console.info("Please provide URL for EdgeTag"),!1));var t},j=(e,t,n,o)=>{let s;switch(t){case"cookie":s=(e=>{let t=`${e}=`,n=decodeURIComponent(document.cookie).split(";");for(let e=0;e<n.length;e++){let o=n[e];for(;" "==o.charAt(0);)o=o.substring(1);if(0==o.indexOf(t))return o.substring(t.length,o.length)}return""})(n);break;case"local":s=sessionStorage.getItem(n);break;case"session":s=localStorage.getItem(n)}s&&r(o,e,s,n)},k=(e,t)=>{switch(t.type){case"query":((e,t,n)=>{const o=new URLSearchParams(window.location.search);o&&o.get(t)&&r(n,e,o.get(t),t)})(e,t.key,t.persist);break;case"storage":j(e,t.location,t.key,t.persist)}},P=t=>{O(t)&&async function(e,t){return e?t&&"beacon"===t.method&&navigator.sendBeacon?Promise.resolve(f(e)):await h("GET",e):Promise.reject(new Error("URL is empty"))}(y("/init")).then((t=>{t?(t=>{const o=[];t.forEach((e=>{o.push(e.package),Object.entries(e.rules).forEach((([t,n])=>{switch(t){case"capture":return void k(e.package,n)}}))})),r("local",e,o,n)})(t.result):console.log("init failed")})).catch(v)};var E=new class{init(e){(e=>{P(e)})(e)}tag(e,t,n){((e,t,n)=>{b(e,t,n)})(e,t,n)}consent(e){(e=>{S(e)})(e)}};!function(){const e=e=>{const n=[].slice.call(e);if(Array.isArray(n))try{return t[n[0]](...n.slice(1))}catch(e){console.error(e)}},t=E;let n=[];window.edgetag&&(n=window.edgetag.stubs||[]),window.edgetag=function(){return e(arguments)},n.forEach(e)}()}));
package/index.min.js.gz DELETED
Binary file