c15t 0.0.1-rc.3
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/.turbo/turbo-build.log +54 -0
- package/.turbo/turbo-fmt.log +6 -0
- package/.turbo/turbo-lint.log +288 -0
- package/.turbo/turbo-test.log +33 -0
- package/CHANGELOG.md +20 -0
- package/LICENSE.md +595 -0
- package/README.md +28 -0
- package/dist/index.cjs +118 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/libs/__tests__/tracking-blocker.test.cjs +269 -0
- package/dist/libs/__tests__/tracking-blocker.test.d.ts +2 -0
- package/dist/libs/__tests__/tracking-blocker.test.d.ts.map +1 -0
- package/dist/libs/__tests__/tracking-blocker.test.js +267 -0
- package/dist/libs/consent-utils.cjs +68 -0
- package/dist/libs/consent-utils.d.ts +49 -0
- package/dist/libs/consent-utils.d.ts.map +1 -0
- package/dist/libs/consent-utils.js +23 -0
- package/dist/libs/tracking-blocker.cjs +167 -0
- package/dist/libs/tracking-blocker.d.ts +33 -0
- package/dist/libs/tracking-blocker.d.ts.map +1 -0
- package/dist/libs/tracking-blocker.js +108 -0
- package/dist/libs/tracking-domains.cjs +188 -0
- package/dist/libs/tracking-domains.d.ts +7 -0
- package/dist/libs/tracking-domains.d.ts.map +1 -0
- package/dist/libs/tracking-domains.js +146 -0
- package/dist/store.cjs +248 -0
- package/dist/store.d.ts +58 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.initial-state.cjs +105 -0
- package/dist/store.initial-state.d.ts +43 -0
- package/dist/store.initial-state.d.ts.map +1 -0
- package/dist/store.initial-state.js +66 -0
- package/dist/store.js +219 -0
- package/dist/store.type.cjs +22 -0
- package/dist/store.type.d.ts +159 -0
- package/dist/store.type.d.ts.map +1 -0
- package/dist/store.type.js +0 -0
- package/dist/translations/en.cjs +96 -0
- package/dist/translations/en.d.ts +3 -0
- package/dist/translations/en.d.ts.map +1 -0
- package/dist/translations/en.js +54 -0
- package/dist/translations/index.cjs +51 -0
- package/dist/translations/index.d.ts +3 -0
- package/dist/translations/index.d.ts.map +1 -0
- package/dist/translations/index.js +9 -0
- package/dist/types/callbacks.cjs +22 -0
- package/dist/types/callbacks.d.ts +146 -0
- package/dist/types/callbacks.d.ts.map +1 -0
- package/dist/types/callbacks.js +0 -0
- package/dist/types/compliance.cjs +22 -0
- package/dist/types/compliance.d.ts +196 -0
- package/dist/types/compliance.d.ts.map +1 -0
- package/dist/types/compliance.js +0 -0
- package/dist/types/gdpr.cjs +86 -0
- package/dist/types/gdpr.d.ts +168 -0
- package/dist/types/gdpr.d.ts.map +1 -0
- package/dist/types/gdpr.js +44 -0
- package/dist/types/index.cjs +44 -0
- package/dist/types/index.d.ts +141 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/translations.cjs +22 -0
- package/dist/types/translations.d.ts +52 -0
- package/dist/types/translations.d.ts.map +1 -0
- package/dist/types/translations.js +0 -0
- package/package.json +33 -0
- package/rslib.config.ts +28 -0
- package/src/index.ts +31 -0
- package/src/libs/__tests__/tracking-blocker.test.ts +271 -0
- package/src/libs/consent-utils.ts +70 -0
- package/src/libs/tracking-blocker.ts +202 -0
- package/src/libs/tracking-domains.ts +158 -0
- package/src/store.initial-state.ts +123 -0
- package/src/store.ts +450 -0
- package/src/store.type.ts +187 -0
- package/src/translations/en.ts +55 -0
- package/src/translations/index.ts +10 -0
- package/src/types/callbacks.ts +152 -0
- package/src/types/compliance.ts +205 -0
- package/src/types/gdpr.ts +217 -0
- package/src/types/index.ts +148 -0
- package/src/types/translations.ts +60 -0
- package/tsconfig.json +12 -0
- package/vitest.config.ts +15 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
var __webpack_modules__ = {
|
|
3
|
+
'./libs/consent-utils': function (module) {
|
|
4
|
+
module.exports = require('./libs/consent-utils.cjs');
|
|
5
|
+
},
|
|
6
|
+
'./libs/tracking-blocker': function (module) {
|
|
7
|
+
module.exports = require('./libs/tracking-blocker.cjs');
|
|
8
|
+
},
|
|
9
|
+
'./store': function (module) {
|
|
10
|
+
module.exports = require('./store.cjs');
|
|
11
|
+
},
|
|
12
|
+
'./translations': function (module) {
|
|
13
|
+
module.exports = require('./translations/index.cjs');
|
|
14
|
+
},
|
|
15
|
+
'./types': function (module) {
|
|
16
|
+
module.exports = require('./types/index.cjs');
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
var __webpack_module_cache__ = {};
|
|
20
|
+
function __webpack_require__(moduleId) {
|
|
21
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
22
|
+
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
23
|
+
var module = (__webpack_module_cache__[moduleId] = {
|
|
24
|
+
exports: {},
|
|
25
|
+
});
|
|
26
|
+
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
27
|
+
return module.exports;
|
|
28
|
+
}
|
|
29
|
+
(() => {
|
|
30
|
+
__webpack_require__.n = function (module) {
|
|
31
|
+
var getter =
|
|
32
|
+
module && module.__esModule
|
|
33
|
+
? function () {
|
|
34
|
+
return module['default'];
|
|
35
|
+
}
|
|
36
|
+
: function () {
|
|
37
|
+
return module;
|
|
38
|
+
};
|
|
39
|
+
__webpack_require__.d(getter, {
|
|
40
|
+
a: getter,
|
|
41
|
+
});
|
|
42
|
+
return getter;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
(() => {
|
|
46
|
+
__webpack_require__.d = function (exports1, definition) {
|
|
47
|
+
for (var key in definition)
|
|
48
|
+
if (
|
|
49
|
+
__webpack_require__.o(definition, key) &&
|
|
50
|
+
!__webpack_require__.o(exports1, key)
|
|
51
|
+
)
|
|
52
|
+
Object.defineProperty(exports1, key, {
|
|
53
|
+
enumerable: true,
|
|
54
|
+
get: definition[key],
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
})();
|
|
58
|
+
(() => {
|
|
59
|
+
__webpack_require__.o = function (obj, prop) {
|
|
60
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
61
|
+
};
|
|
62
|
+
})();
|
|
63
|
+
(() => {
|
|
64
|
+
__webpack_require__.r = function (exports1) {
|
|
65
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag)
|
|
66
|
+
Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
67
|
+
value: 'Module',
|
|
68
|
+
});
|
|
69
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
70
|
+
value: true,
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
})();
|
|
74
|
+
var __webpack_exports__ = {};
|
|
75
|
+
(() => {
|
|
76
|
+
__webpack_require__.r(__webpack_exports__);
|
|
77
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
78
|
+
consentTypes: () => _types__WEBPACK_IMPORTED_MODULE_3__.consentTypes,
|
|
79
|
+
createConsentManagerStore: () =>
|
|
80
|
+
_store__WEBPACK_IMPORTED_MODULE_0__.createConsentManagerStore,
|
|
81
|
+
createTrackingBlocker: () =>
|
|
82
|
+
_libs_tracking_blocker__WEBPACK_IMPORTED_MODULE_2__.createTrackingBlocker,
|
|
83
|
+
defaultTranslationConfig: () =>
|
|
84
|
+
_translations__WEBPACK_IMPORTED_MODULE_4__.defaultTranslationConfig,
|
|
85
|
+
});
|
|
86
|
+
var _store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__('./store');
|
|
87
|
+
var _libs_consent_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
|
|
88
|
+
'./libs/consent-utils'
|
|
89
|
+
);
|
|
90
|
+
var __WEBPACK_REEXPORT_OBJECT__ = {};
|
|
91
|
+
for (var __WEBPACK_IMPORT_KEY__ in _libs_consent_utils__WEBPACK_IMPORTED_MODULE_1__)
|
|
92
|
+
if (
|
|
93
|
+
[
|
|
94
|
+
'createConsentManagerStore',
|
|
95
|
+
'consentTypes',
|
|
96
|
+
'defaultTranslationConfig',
|
|
97
|
+
'createTrackingBlocker',
|
|
98
|
+
'default',
|
|
99
|
+
].indexOf(__WEBPACK_IMPORT_KEY__) < 0
|
|
100
|
+
)
|
|
101
|
+
__WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function (key) {
|
|
102
|
+
return _libs_consent_utils__WEBPACK_IMPORTED_MODULE_1__[key];
|
|
103
|
+
}.bind(0, __WEBPACK_IMPORT_KEY__);
|
|
104
|
+
__webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
|
|
105
|
+
var _libs_tracking_blocker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
|
|
106
|
+
'./libs/tracking-blocker'
|
|
107
|
+
);
|
|
108
|
+
var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__('./types');
|
|
109
|
+
var _translations__WEBPACK_IMPORTED_MODULE_4__ =
|
|
110
|
+
__webpack_require__('./translations');
|
|
111
|
+
})();
|
|
112
|
+
var __webpack_export_target__ = exports;
|
|
113
|
+
for (var __webpack_i__ in __webpack_exports__)
|
|
114
|
+
__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
115
|
+
if (__webpack_exports__.__esModule)
|
|
116
|
+
Object.defineProperty(__webpack_export_target__, '__esModule', {
|
|
117
|
+
value: true,
|
|
118
|
+
});
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export { createConsentManagerStore } from './store';
|
|
2
|
+
export type { PrivacyConsentState } from './store.type';
|
|
3
|
+
export * from './libs/consent-utils';
|
|
4
|
+
export { createTrackingBlocker } from './libs/tracking-blocker';
|
|
5
|
+
export type { TrackingBlockerConfig } from './libs/tracking-blocker';
|
|
6
|
+
export { consentTypes } from './types';
|
|
7
|
+
export type {
|
|
8
|
+
CallbackFunction,
|
|
9
|
+
Callbacks,
|
|
10
|
+
AllConsentNames,
|
|
11
|
+
ConsentType,
|
|
12
|
+
ConsentState,
|
|
13
|
+
ComplianceRegion,
|
|
14
|
+
ComplianceSettings,
|
|
15
|
+
PrivacySettings,
|
|
16
|
+
HasConsentedProps,
|
|
17
|
+
NamespaceProps,
|
|
18
|
+
TranslationConfig,
|
|
19
|
+
Translations,
|
|
20
|
+
CookieBannerTranslations,
|
|
21
|
+
ConsentManagerDialogTranslations,
|
|
22
|
+
ConsentManagerWidgetTranslations,
|
|
23
|
+
ConsentTypeTranslations,
|
|
24
|
+
ConsentTypesTranslations,
|
|
25
|
+
} from './types';
|
|
26
|
+
export { defaultTranslationConfig } from './translations';
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,YAAY,EACX,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,gCAAgC,EAChC,gCAAgC,EAChC,uBAAuB,EACvB,wBAAwB,GACxB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as __WEBPACK_EXTERNAL_MODULE__store_js_535ade31__ from './store.js';
|
|
2
|
+
import * as __WEBPACK_EXTERNAL_MODULE__libs_tracking_blocker_js_b46fe1fa__ from './libs/tracking-blocker.js';
|
|
3
|
+
import * as __WEBPACK_EXTERNAL_MODULE__types_index_js_63ede62f__ from './types/index.js';
|
|
4
|
+
import * as __WEBPACK_EXTERNAL_MODULE__translations_index_js_8dbce45e__ from './translations/index.js';
|
|
5
|
+
export * from './libs/consent-utils.js';
|
|
6
|
+
var __webpack_exports__consentTypes =
|
|
7
|
+
__WEBPACK_EXTERNAL_MODULE__types_index_js_63ede62f__.consentTypes;
|
|
8
|
+
var __webpack_exports__createConsentManagerStore =
|
|
9
|
+
__WEBPACK_EXTERNAL_MODULE__store_js_535ade31__.createConsentManagerStore;
|
|
10
|
+
var __webpack_exports__createTrackingBlocker =
|
|
11
|
+
__WEBPACK_EXTERNAL_MODULE__libs_tracking_blocker_js_b46fe1fa__.createTrackingBlocker;
|
|
12
|
+
var __webpack_exports__defaultTranslationConfig =
|
|
13
|
+
__WEBPACK_EXTERNAL_MODULE__translations_index_js_8dbce45e__.defaultTranslationConfig;
|
|
14
|
+
export {
|
|
15
|
+
__webpack_exports__consentTypes as consentTypes,
|
|
16
|
+
__webpack_exports__createConsentManagerStore as createConsentManagerStore,
|
|
17
|
+
__webpack_exports__createTrackingBlocker as createTrackingBlocker,
|
|
18
|
+
__webpack_exports__defaultTranslationConfig as defaultTranslationConfig,
|
|
19
|
+
};
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(() => {
|
|
4
|
+
__webpack_require__.g = (function () {
|
|
5
|
+
if ('object' == typeof globalThis) return globalThis;
|
|
6
|
+
try {
|
|
7
|
+
return this || new Function('return this')();
|
|
8
|
+
} catch (e) {
|
|
9
|
+
if ('object' == typeof window) return window;
|
|
10
|
+
}
|
|
11
|
+
})();
|
|
12
|
+
})();
|
|
13
|
+
var __webpack_exports__ = {};
|
|
14
|
+
const external_vitest_namespaceObject = require('vitest');
|
|
15
|
+
const external_tracking_blocker_cjs_namespaceObject = require('../tracking-blocker.cjs');
|
|
16
|
+
const BLOCKED_CONSENT = {
|
|
17
|
+
experience: false,
|
|
18
|
+
functionality: false,
|
|
19
|
+
marketing: false,
|
|
20
|
+
measurement: false,
|
|
21
|
+
necessary: true,
|
|
22
|
+
};
|
|
23
|
+
const ALLOWED_CONSENT = {
|
|
24
|
+
...BLOCKED_CONSENT,
|
|
25
|
+
measurement: true,
|
|
26
|
+
};
|
|
27
|
+
(0, external_vitest_namespaceObject.describe)('TrackingBlocker', () => {
|
|
28
|
+
const originalFetch = __webpack_require__.g.fetch;
|
|
29
|
+
const originalXHR = __webpack_require__.g.XMLHttpRequest;
|
|
30
|
+
(0, external_vitest_namespaceObject.beforeAll)(() => {
|
|
31
|
+
__webpack_require__.g.fetch = external_vitest_namespaceObject.vi
|
|
32
|
+
.fn()
|
|
33
|
+
.mockImplementation(() => Promise.resolve(new Response()));
|
|
34
|
+
if (!__webpack_require__.g.XMLHttpRequest)
|
|
35
|
+
__webpack_require__.g.XMLHttpRequest = originalXHR;
|
|
36
|
+
});
|
|
37
|
+
(0, external_vitest_namespaceObject.afterAll)(() => {
|
|
38
|
+
__webpack_require__.g.fetch = originalFetch;
|
|
39
|
+
__webpack_require__.g.XMLHttpRequest = originalXHR;
|
|
40
|
+
});
|
|
41
|
+
(0, external_vitest_namespaceObject.beforeEach)(() => {
|
|
42
|
+
external_vitest_namespaceObject.vi.clearAllMocks();
|
|
43
|
+
external_vitest_namespaceObject.vi.restoreAllMocks();
|
|
44
|
+
__webpack_require__.g.fetch = external_vitest_namespaceObject.vi
|
|
45
|
+
.fn()
|
|
46
|
+
.mockImplementation(() => Promise.resolve(new Response()));
|
|
47
|
+
window.fetch = __webpack_require__.g.fetch;
|
|
48
|
+
window.XMLHttpRequest = originalXHR;
|
|
49
|
+
external_vitest_namespaceObject.vi.spyOn(document, 'dispatchEvent');
|
|
50
|
+
});
|
|
51
|
+
(0, external_vitest_namespaceObject.test)(
|
|
52
|
+
'blocks fetch requests to tracking domains when consent not granted',
|
|
53
|
+
async () => {
|
|
54
|
+
(0, external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
55
|
+
{},
|
|
56
|
+
BLOCKED_CONSENT
|
|
57
|
+
);
|
|
58
|
+
await (0, external_vitest_namespaceObject.expect)(
|
|
59
|
+
fetch('https://www.google-analytics.com/analytics.js')
|
|
60
|
+
).rejects.toThrow(
|
|
61
|
+
'Request to https://www.google-analytics.com/analytics.js blocked due to missing consent'
|
|
62
|
+
);
|
|
63
|
+
(0, external_vitest_namespaceObject.expect)(
|
|
64
|
+
document.dispatchEvent
|
|
65
|
+
).toHaveBeenCalledWith(
|
|
66
|
+
external_vitest_namespaceObject.expect.objectContaining({
|
|
67
|
+
type: 'ConsentBlockedRequest',
|
|
68
|
+
detail: {
|
|
69
|
+
url: 'https://www.google-analytics.com/analytics.js',
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
(0, external_vitest_namespaceObject.test)(
|
|
76
|
+
'blocks XMLHttpRequest to tracking domains when consent not granted',
|
|
77
|
+
() => {
|
|
78
|
+
(0, external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
79
|
+
{},
|
|
80
|
+
BLOCKED_CONSENT
|
|
81
|
+
);
|
|
82
|
+
const xhr = new XMLHttpRequest();
|
|
83
|
+
(0, external_vitest_namespaceObject.expect)(() => {
|
|
84
|
+
xhr.open('GET', 'https://www.google-analytics.com/analytics.js');
|
|
85
|
+
}).toThrow(
|
|
86
|
+
'Request to https://www.google-analytics.com/analytics.js blocked due to missing consent'
|
|
87
|
+
);
|
|
88
|
+
(0, external_vitest_namespaceObject.expect)(
|
|
89
|
+
document.dispatchEvent
|
|
90
|
+
).toHaveBeenCalledWith(
|
|
91
|
+
external_vitest_namespaceObject.expect.objectContaining({
|
|
92
|
+
type: 'ConsentBlockedRequest',
|
|
93
|
+
detail: {
|
|
94
|
+
url: 'https://www.google-analytics.com/analytics.js',
|
|
95
|
+
},
|
|
96
|
+
})
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
(0, external_vitest_namespaceObject.test)(
|
|
101
|
+
'allows fetch requests to tracking domains after consent granted',
|
|
102
|
+
async () => {
|
|
103
|
+
window.fetch = __webpack_require__.g.fetch;
|
|
104
|
+
const trackingBlocker = (0,
|
|
105
|
+
external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
106
|
+
{},
|
|
107
|
+
ALLOWED_CONSENT
|
|
108
|
+
);
|
|
109
|
+
const fetchSpy = external_vitest_namespaceObject.vi.spyOn(
|
|
110
|
+
window,
|
|
111
|
+
'fetch'
|
|
112
|
+
);
|
|
113
|
+
await fetch('https://www.google-analytics.com/analytics.js');
|
|
114
|
+
(0, external_vitest_namespaceObject.expect)(
|
|
115
|
+
fetchSpy
|
|
116
|
+
).toHaveBeenCalledWith('https://www.google-analytics.com/analytics.js');
|
|
117
|
+
trackingBlocker.destroy();
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
(0, external_vitest_namespaceObject.test)(
|
|
121
|
+
'allows XMLHttpRequest to tracking domains after consent granted',
|
|
122
|
+
() => {
|
|
123
|
+
(0, external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
124
|
+
{},
|
|
125
|
+
ALLOWED_CONSENT
|
|
126
|
+
);
|
|
127
|
+
const xhr = new XMLHttpRequest();
|
|
128
|
+
(0, external_vitest_namespaceObject.expect)(() => {
|
|
129
|
+
xhr.open('GET', 'https://www.google-analytics.com/analytics.js');
|
|
130
|
+
}).not.toThrow();
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
(0, external_vitest_namespaceObject.test)(
|
|
134
|
+
'allows requests to non-tracking domains regardless of consent',
|
|
135
|
+
async () => {
|
|
136
|
+
(0, external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
137
|
+
{},
|
|
138
|
+
BLOCKED_CONSENT
|
|
139
|
+
);
|
|
140
|
+
const fetchSpy = external_vitest_namespaceObject.vi.spyOn(
|
|
141
|
+
window,
|
|
142
|
+
'fetch'
|
|
143
|
+
);
|
|
144
|
+
await fetch('https://api.example.com/data');
|
|
145
|
+
(0, external_vitest_namespaceObject.expect)(
|
|
146
|
+
fetchSpy
|
|
147
|
+
).toHaveBeenCalledWith('https://api.example.com/data');
|
|
148
|
+
const xhr = new XMLHttpRequest();
|
|
149
|
+
(0, external_vitest_namespaceObject.expect)(() => {
|
|
150
|
+
xhr.open('GET', 'https://api.example.com/data');
|
|
151
|
+
}).not.toThrow();
|
|
152
|
+
}
|
|
153
|
+
);
|
|
154
|
+
(0, external_vitest_namespaceObject.test)(
|
|
155
|
+
'handles custom domain consent map',
|
|
156
|
+
async () => {
|
|
157
|
+
const trackingBlocker = (0,
|
|
158
|
+
external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
159
|
+
{
|
|
160
|
+
overrideDomainConsentMap: true,
|
|
161
|
+
domainConsentMap: {
|
|
162
|
+
'custom-analytics.example.com': 'measurement',
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
BLOCKED_CONSENT
|
|
166
|
+
);
|
|
167
|
+
await (0, external_vitest_namespaceObject.expect)(
|
|
168
|
+
fetch('https://custom-analytics.example.com/track')
|
|
169
|
+
).rejects.toThrow(
|
|
170
|
+
'Request to https://custom-analytics.example.com/track blocked due to missing consent'
|
|
171
|
+
);
|
|
172
|
+
trackingBlocker.updateConsents({
|
|
173
|
+
experience: false,
|
|
174
|
+
functionality: false,
|
|
175
|
+
marketing: false,
|
|
176
|
+
measurement: true,
|
|
177
|
+
necessary: true,
|
|
178
|
+
});
|
|
179
|
+
const fetchSpy = external_vitest_namespaceObject.vi.spyOn(
|
|
180
|
+
window,
|
|
181
|
+
'fetch'
|
|
182
|
+
);
|
|
183
|
+
await fetch('https://custom-analytics.example.com/track');
|
|
184
|
+
(0, external_vitest_namespaceObject.expect)(
|
|
185
|
+
fetchSpy
|
|
186
|
+
).toHaveBeenCalledWith('https://custom-analytics.example.com/track');
|
|
187
|
+
}
|
|
188
|
+
);
|
|
189
|
+
(0, external_vitest_namespaceObject.test)(
|
|
190
|
+
'handles subdomains correctly',
|
|
191
|
+
async () => {
|
|
192
|
+
(0, external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
193
|
+
{},
|
|
194
|
+
BLOCKED_CONSENT
|
|
195
|
+
);
|
|
196
|
+
await (0, external_vitest_namespaceObject.expect)(
|
|
197
|
+
fetch('https://subdomain.google-analytics.com/track')
|
|
198
|
+
).rejects.toThrow(
|
|
199
|
+
'Request to https://subdomain.google-analytics.com/track blocked due to missing consent'
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
);
|
|
203
|
+
(0, external_vitest_namespaceObject.test)(
|
|
204
|
+
'can be disabled via config',
|
|
205
|
+
async () => {
|
|
206
|
+
(0, external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
207
|
+
{
|
|
208
|
+
disableAutomaticBlocking: true,
|
|
209
|
+
},
|
|
210
|
+
BLOCKED_CONSENT
|
|
211
|
+
);
|
|
212
|
+
await fetch('https://www.google-analytics.com/analytics.js');
|
|
213
|
+
(0, external_vitest_namespaceObject.expect)(fetch).toHaveBeenCalledWith(
|
|
214
|
+
'https://www.google-analytics.com/analytics.js'
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
);
|
|
218
|
+
(0, external_vitest_namespaceObject.test)(
|
|
219
|
+
'cleanup restores original fetch and XMLHttpRequest functionality',
|
|
220
|
+
async () => {
|
|
221
|
+
const trackingBlocker = (0,
|
|
222
|
+
external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
223
|
+
{},
|
|
224
|
+
BLOCKED_CONSENT
|
|
225
|
+
);
|
|
226
|
+
await (0, external_vitest_namespaceObject.expect)(
|
|
227
|
+
fetch('https://www.google-analytics.com/analytics.js')
|
|
228
|
+
).rejects.toThrow();
|
|
229
|
+
trackingBlocker.destroy();
|
|
230
|
+
await fetch('https://www.google-analytics.com/analytics.js');
|
|
231
|
+
(0, external_vitest_namespaceObject.expect)(fetch).toHaveBeenCalledWith(
|
|
232
|
+
'https://www.google-analytics.com/analytics.js'
|
|
233
|
+
);
|
|
234
|
+
const xhr = new XMLHttpRequest();
|
|
235
|
+
(0, external_vitest_namespaceObject.expect)(() => {
|
|
236
|
+
xhr.open('GET', 'https://www.google-analytics.com/analytics.js');
|
|
237
|
+
}).not.toThrow();
|
|
238
|
+
}
|
|
239
|
+
);
|
|
240
|
+
(0, external_vitest_namespaceObject.test)(
|
|
241
|
+
'handles multiple concurrent requests correctly',
|
|
242
|
+
async () => {
|
|
243
|
+
(0, external_tracking_blocker_cjs_namespaceObject.createTrackingBlocker)(
|
|
244
|
+
{},
|
|
245
|
+
BLOCKED_CONSENT
|
|
246
|
+
);
|
|
247
|
+
const requests = Promise.all([
|
|
248
|
+
(0, external_vitest_namespaceObject.expect)(
|
|
249
|
+
fetch('https://www.google-analytics.com/analytics.js')
|
|
250
|
+
).rejects.toThrow(),
|
|
251
|
+
(0, external_vitest_namespaceObject.expect)(
|
|
252
|
+
fetch('https://www.google-analytics.com/collect')
|
|
253
|
+
).rejects.toThrow(),
|
|
254
|
+
fetch('https://api.example.com/data'),
|
|
255
|
+
]);
|
|
256
|
+
await requests;
|
|
257
|
+
(0, external_vitest_namespaceObject.expect)(
|
|
258
|
+
document.dispatchEvent
|
|
259
|
+
).toHaveBeenCalledTimes(6);
|
|
260
|
+
}
|
|
261
|
+
);
|
|
262
|
+
});
|
|
263
|
+
var __webpack_export_target__ = exports;
|
|
264
|
+
for (var __webpack_i__ in __webpack_exports__)
|
|
265
|
+
__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
266
|
+
if (__webpack_exports__.__esModule)
|
|
267
|
+
Object.defineProperty(__webpack_export_target__, '__esModule', {
|
|
268
|
+
value: true,
|
|
269
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracking-blocker.test.d.ts","sourceRoot":"","sources":["../../../src/libs/__tests__/tracking-blocker.test.ts"],"names":[],"mappings":""}
|