nimiq-supply-calculator 0.0.1-security → 1.0.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.
Potentially problematic release.
This version of nimiq-supply-calculator might be problematic. Click here for more details.
- package/.eslintignore +11 -0
- package/LICENSE.md +13 -0
- package/README.md +3 -3
- package/dist/CookieContext.d.ts +10 -0
- package/dist/CookieContext.js +182 -0
- package/dist/TrackingManagerContext.d.ts +6 -0
- package/dist/TrackingManagerContext.js +53 -0
- package/dist/analytics.js +119 -0
- package/dist/constants.d.ts +11 -0
- package/dist/constants.js +32 -0
- package/dist/examples/config.d.ts +28 -0
- package/dist/examples/config.js +77 -0
- package/dist/hooks/useHasConsent.d.ts +2 -0
- package/dist/hooks/useHasConsent.js +14 -0
- package/dist/hooks/useRequiredCategories.d.ts +3 -0
- package/dist/hooks/useRequiredCategories.js +10 -0
- package/dist/hooks/useSavedTrackingPreference.d.ts +3 -0
- package/dist/hooks/useSavedTrackingPreference.js +38 -0
- package/dist/hooks/useSetTrackingPreference.d.ts +3 -0
- package/dist/hooks/useSetTrackingPreference.js +27 -0
- package/dist/hooks/useTrackingPreference.d.ts +3 -0
- package/dist/hooks/useTrackingPreference.js +16 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +39 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.js +28 -0
- package/dist/utils/areCookiesEnabled.d.ts +2 -0
- package/dist/utils/areCookiesEnabled.js +14 -0
- package/dist/utils/getAllCookies.d.ts +3 -0
- package/dist/utils/getAllCookies.js +64 -0
- package/dist/utils/getDefaultTrackingPreference.d.ts +3 -0
- package/dist/utils/getDefaultTrackingPreference.js +28 -0
- package/dist/utils/getDomain.d.ts +2 -0
- package/dist/utils/getDomain.js +21 -0
- package/dist/utils/getTrackerCategory.d.ts +3 -0
- package/dist/utils/getTrackerCategory.js +11 -0
- package/dist/utils/getTrackerInfo.d.ts +3 -0
- package/dist/utils/getTrackerInfo.js +12 -0
- package/dist/utils/hasConsent.d.ts +11 -0
- package/dist/utils/hasConsent.js +29 -0
- package/dist/utils/isMaxKBSize.d.ts +2 -0
- package/dist/utils/isMaxKBSize.js +7 -0
- package/dist/utils/isOptOut.d.ts +16 -0
- package/dist/utils/isOptOut.js +25 -0
- package/dist/utils/persistMobileAppPreferences.d.ts +2 -0
- package/dist/utils/persistMobileAppPreferences.js +36 -0
- package/dist/utils/setGTMVariables.d.ts +3 -0
- package/dist/utils/setGTMVariables.js +14 -0
- package/dist/utils/setTrackingPreference.d.ts +4 -0
- package/dist/utils/setTrackingPreference.js +22 -0
- package/dist/utils/trackerMatches.d.ts +3 -0
- package/dist/utils/trackerMatches.js +12 -0
- package/jest.config.ts +204 -0
- package/package.json +30 -3
- package/src/CookieContext.test.tsx +105 -0
- package/src/CookieContext.tsx +215 -0
- package/src/TrackingManagerContext.tsx +25 -0
- package/src/analytics.ts +65 -0
- package/src/constants.ts +35 -0
- package/src/examples/config.ts +76 -0
- package/src/global.d.ts +3 -0
- package/src/hooks/useHasConsent.ts +11 -0
- package/src/hooks/useRequiredCaregories.test.tsx +43 -0
- package/src/hooks/useRequiredCategories.ts +11 -0
- package/src/hooks/useSavedTrackingPreference.ts +47 -0
- package/src/hooks/useSetTrackingPreference.test.tsx +82 -0
- package/src/hooks/useSetTrackingPreference.ts +31 -0
- package/src/hooks/useTrackingPreference.ts +15 -0
- package/src/index.ts +20 -0
- package/src/types.ts +71 -0
- package/src/utils/areCookiesEnabled.ts +13 -0
- package/src/utils/getAllCookies.test.ts +35 -0
- package/src/utils/getAllCookies.ts +68 -0
- package/src/utils/getDefaultTrackingPreference.test.ts +16 -0
- package/src/utils/getDefaultTrackingPreference.ts +28 -0
- package/src/utils/getDomain.test.ts +16 -0
- package/src/utils/getDomain.ts +19 -0
- package/src/utils/getTrackerCategory.test.ts +34 -0
- package/src/utils/getTrackerCategory.ts +11 -0
- package/src/utils/getTrackerInfo.test.ts +11 -0
- package/src/utils/getTrackerInfo.ts +10 -0
- package/src/utils/hasConsent.test.ts +64 -0
- package/src/utils/hasConsent.ts +32 -0
- package/src/utils/isMaxKBSize.test.ts +10 -0
- package/src/utils/isMaxKBSize.ts +7 -0
- package/src/utils/isOptOut.test.ts +14 -0
- package/src/utils/isOptOut.ts +28 -0
- package/src/utils/persistMobileAppPreferences.ts +32 -0
- package/src/utils/setGTMVariables.test.ts +20 -0
- package/src/utils/setGTMVariables.ts +17 -0
- package/src/utils/setTrackingPreference.ts +36 -0
- package/src/utils/trackerMatches.test.ts +13 -0
- package/src/utils/trackerMatches.ts +12 -0
- package/tsconfig.json +112 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useSavedTrackingPreference = exports.useSavedTrackingPreferenceFromMobileApp = void 0;
|
4
|
+
const react_1 = require("react");
|
5
|
+
const constants_1 = require("../constants");
|
6
|
+
const CookieContext_1 = require("../CookieContext");
|
7
|
+
const TrackingManagerContext_1 = require("../TrackingManagerContext");
|
8
|
+
const types_1 = require("../types");
|
9
|
+
const persistMobileAppPreferences_1 = require("../utils/persistMobileAppPreferences");
|
10
|
+
const useSavedTrackingPreferenceFromMobileApp = () => {
|
11
|
+
const { region } = (0, TrackingManagerContext_1.useTrackingManager)();
|
12
|
+
const [isMobileAppFromCookie] = (0, CookieContext_1.useCookie)(constants_1.IS_MOBILE_APP);
|
13
|
+
const isMobileAppFromQueryParams = (0, react_1.useMemo)(() => (0, persistMobileAppPreferences_1.getIsMobileAppFromQueryParams)(), []);
|
14
|
+
const isMobileApp = isMobileAppFromCookie || isMobileAppFromQueryParams;
|
15
|
+
const mobileAppPreference = (0, react_1.useMemo)(() => {
|
16
|
+
if (isMobileApp)
|
17
|
+
return {
|
18
|
+
region,
|
19
|
+
consent: [types_1.TrackingCategory.NECESSARY],
|
20
|
+
};
|
21
|
+
}, [isMobileApp, region]);
|
22
|
+
return mobileAppPreference;
|
23
|
+
};
|
24
|
+
exports.useSavedTrackingPreferenceFromMobileApp = useSavedTrackingPreferenceFromMobileApp;
|
25
|
+
const useSavedTrackingPreference = () => {
|
26
|
+
const { region, onError } = (0, TrackingManagerContext_1.useTrackingManager)();
|
27
|
+
const [euCookie] = (0, CookieContext_1.useCookie)(constants_1.EU_CONSENT_PREFERENCES_COOKIE);
|
28
|
+
const [defaultCookie] = (0, CookieContext_1.useCookie)(constants_1.DEFAULT_CONSENT_PREFERENCES_COOKIE);
|
29
|
+
const preference = region === types_1.Region.EU ? euCookie : defaultCookie;
|
30
|
+
if (!preference)
|
31
|
+
return;
|
32
|
+
if (!preference.region || !preference.consent) {
|
33
|
+
onError(new Error('Malformed preferences'));
|
34
|
+
return;
|
35
|
+
}
|
36
|
+
return preference;
|
37
|
+
};
|
38
|
+
exports.useSavedTrackingPreference = useSavedTrackingPreference;
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const react_1 = require("react");
|
7
|
+
const CookieContext_1 = require("../CookieContext");
|
8
|
+
const TrackingManagerContext_1 = require("../TrackingManagerContext");
|
9
|
+
const setTrackingPreference_1 = __importDefault(require("../utils/setTrackingPreference"));
|
10
|
+
const useRequiredCategories_1 = __importDefault(require("./useRequiredCategories"));
|
11
|
+
const useSetTrackingPreference = () => {
|
12
|
+
const { region, onPreferenceChange, onError } = (0, TrackingManagerContext_1.useTrackingManager)();
|
13
|
+
const setCookie = (0, CookieContext_1.useSetCookie)();
|
14
|
+
const requiredCategories = (0, useRequiredCategories_1.default)();
|
15
|
+
const changePreference = (0, react_1.useCallback)((preference) => {
|
16
|
+
const preferencesToSet = preference;
|
17
|
+
requiredCategories.forEach((c) => {
|
18
|
+
if (!preference.consent.includes(c)) {
|
19
|
+
onError(new Error(`Trying to remove category ${c} that is required`));
|
20
|
+
preferencesToSet.consent = [...preference.consent, c];
|
21
|
+
}
|
22
|
+
});
|
23
|
+
(0, setTrackingPreference_1.default)(setCookie, preferencesToSet, region, onPreferenceChange);
|
24
|
+
}, [onError, onPreferenceChange, region, requiredCategories, setCookie]);
|
25
|
+
return changePreference;
|
26
|
+
};
|
27
|
+
exports.default = useSetTrackingPreference;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const TrackingManagerContext_1 = require("../TrackingManagerContext");
|
7
|
+
const getDefaultTrackingPreference_1 = __importDefault(require("../utils/getDefaultTrackingPreference"));
|
8
|
+
const useSavedTrackingPreference_1 = require("./useSavedTrackingPreference");
|
9
|
+
const useTrackingPreference = () => {
|
10
|
+
const preference = (0, useSavedTrackingPreference_1.useSavedTrackingPreference)();
|
11
|
+
const { region, config } = (0, TrackingManagerContext_1.useTrackingManager)();
|
12
|
+
if (!preference)
|
13
|
+
return (0, getDefaultTrackingPreference_1.default)(region, config);
|
14
|
+
return preference;
|
15
|
+
};
|
16
|
+
exports.default = useTrackingPreference;
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
export { TRACKER_CATEGORIES } from './constants';
|
2
|
+
export { useCookie } from './CookieContext';
|
3
|
+
export { default as useHasConsent } from './hooks/useHasConsent';
|
4
|
+
export { default as useRequiredCategories } from './hooks/useRequiredCategories';
|
5
|
+
export { useSavedTrackingPreference, useSavedTrackingPreferenceFromMobileApp, } from './hooks/useSavedTrackingPreference';
|
6
|
+
export { default as useSetTrackingPreference } from './hooks/useSetTrackingPreference';
|
7
|
+
export { default as useTrackingPreference } from './hooks/useTrackingPreference';
|
8
|
+
export { Provider } from './TrackingManagerContext';
|
9
|
+
export { useTrackingManager } from './TrackingManagerContext';
|
10
|
+
export { Framework, Region, TrackerType, TrackingCategory, TrackingPreference } from './types';
|
11
|
+
export { default as areCookiesEnabled } from './utils/areCookiesEnabled';
|
12
|
+
export { default as getDefaultTrackingPreference } from './utils/getDefaultTrackingPreference';
|
13
|
+
export { default as isOptOut } from './utils/isOptOut';
|
14
|
+
export { getIsMobileAppFromQueryParams, persistMobileAppPreferences, } from './utils/persistMobileAppPreferences';
|
package/dist/index.js
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.persistMobileAppPreferences = exports.getIsMobileAppFromQueryParams = exports.isOptOut = exports.getDefaultTrackingPreference = exports.areCookiesEnabled = exports.TrackingCategory = exports.TrackerType = exports.Region = exports.Framework = exports.useTrackingManager = exports.Provider = exports.useTrackingPreference = exports.useSetTrackingPreference = exports.useSavedTrackingPreferenceFromMobileApp = exports.useSavedTrackingPreference = exports.useRequiredCategories = exports.useHasConsent = exports.useCookie = exports.TRACKER_CATEGORIES = void 0;
|
7
|
+
var constants_1 = require("./constants");
|
8
|
+
Object.defineProperty(exports, "TRACKER_CATEGORIES", { enumerable: true, get: function () { return constants_1.TRACKER_CATEGORIES; } });
|
9
|
+
var CookieContext_1 = require("./CookieContext");
|
10
|
+
Object.defineProperty(exports, "useCookie", { enumerable: true, get: function () { return CookieContext_1.useCookie; } });
|
11
|
+
var useHasConsent_1 = require("./hooks/useHasConsent");
|
12
|
+
Object.defineProperty(exports, "useHasConsent", { enumerable: true, get: function () { return __importDefault(useHasConsent_1).default; } });
|
13
|
+
var useRequiredCategories_1 = require("./hooks/useRequiredCategories");
|
14
|
+
Object.defineProperty(exports, "useRequiredCategories", { enumerable: true, get: function () { return __importDefault(useRequiredCategories_1).default; } });
|
15
|
+
var useSavedTrackingPreference_1 = require("./hooks/useSavedTrackingPreference");
|
16
|
+
Object.defineProperty(exports, "useSavedTrackingPreference", { enumerable: true, get: function () { return useSavedTrackingPreference_1.useSavedTrackingPreference; } });
|
17
|
+
Object.defineProperty(exports, "useSavedTrackingPreferenceFromMobileApp", { enumerable: true, get: function () { return useSavedTrackingPreference_1.useSavedTrackingPreferenceFromMobileApp; } });
|
18
|
+
var useSetTrackingPreference_1 = require("./hooks/useSetTrackingPreference");
|
19
|
+
Object.defineProperty(exports, "useSetTrackingPreference", { enumerable: true, get: function () { return __importDefault(useSetTrackingPreference_1).default; } });
|
20
|
+
var useTrackingPreference_1 = require("./hooks/useTrackingPreference");
|
21
|
+
Object.defineProperty(exports, "useTrackingPreference", { enumerable: true, get: function () { return __importDefault(useTrackingPreference_1).default; } });
|
22
|
+
var TrackingManagerContext_1 = require("./TrackingManagerContext");
|
23
|
+
Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return TrackingManagerContext_1.Provider; } });
|
24
|
+
var TrackingManagerContext_2 = require("./TrackingManagerContext");
|
25
|
+
Object.defineProperty(exports, "useTrackingManager", { enumerable: true, get: function () { return TrackingManagerContext_2.useTrackingManager; } });
|
26
|
+
var types_1 = require("./types");
|
27
|
+
Object.defineProperty(exports, "Framework", { enumerable: true, get: function () { return types_1.Framework; } });
|
28
|
+
Object.defineProperty(exports, "Region", { enumerable: true, get: function () { return types_1.Region; } });
|
29
|
+
Object.defineProperty(exports, "TrackerType", { enumerable: true, get: function () { return types_1.TrackerType; } });
|
30
|
+
Object.defineProperty(exports, "TrackingCategory", { enumerable: true, get: function () { return types_1.TrackingCategory; } });
|
31
|
+
var areCookiesEnabled_1 = require("./utils/areCookiesEnabled");
|
32
|
+
Object.defineProperty(exports, "areCookiesEnabled", { enumerable: true, get: function () { return __importDefault(areCookiesEnabled_1).default; } });
|
33
|
+
var getDefaultTrackingPreference_1 = require("./utils/getDefaultTrackingPreference");
|
34
|
+
Object.defineProperty(exports, "getDefaultTrackingPreference", { enumerable: true, get: function () { return __importDefault(getDefaultTrackingPreference_1).default; } });
|
35
|
+
var isOptOut_1 = require("./utils/isOptOut");
|
36
|
+
Object.defineProperty(exports, "isOptOut", { enumerable: true, get: function () { return __importDefault(isOptOut_1).default; } });
|
37
|
+
var persistMobileAppPreferences_1 = require("./utils/persistMobileAppPreferences");
|
38
|
+
Object.defineProperty(exports, "getIsMobileAppFromQueryParams", { enumerable: true, get: function () { return persistMobileAppPreferences_1.getIsMobileAppFromQueryParams; } });
|
39
|
+
Object.defineProperty(exports, "persistMobileAppPreferences", { enumerable: true, get: function () { return persistMobileAppPreferences_1.persistMobileAppPreferences; } });
|
package/dist/types.d.ts
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
import { CookieAttributes } from 'js-cookie';
|
2
|
+
export type ErrorFunction = (error: Error, metadata?: {
|
3
|
+
[key: string]: any;
|
4
|
+
}) => void;
|
5
|
+
export type SetCookieFunction = (value: any, options?: CookieAttributes) => void;
|
6
|
+
export type LogFunction = (str: string, options?: Record<string, any>) => void;
|
7
|
+
export declare enum Region {
|
8
|
+
EU = "EU",
|
9
|
+
DEFAULT = "DEFAULT"
|
10
|
+
}
|
11
|
+
export declare enum TrackingCategory {
|
12
|
+
FUNCTIONAL = "functional",
|
13
|
+
NECESSARY = "necessary",
|
14
|
+
TARGETING = "targeting",
|
15
|
+
PERFORMANCE = "performance",
|
16
|
+
DELETE_IF_SEEN = "delete-if-seen"
|
17
|
+
}
|
18
|
+
export type TrackingPreference = {
|
19
|
+
region: Region;
|
20
|
+
consent: Array<TrackingCategory>;
|
21
|
+
};
|
22
|
+
export declare enum Framework {
|
23
|
+
OPT_OUT = "optOut",
|
24
|
+
OPT_IN = "optIn"
|
25
|
+
}
|
26
|
+
export type GeolocationRule = {
|
27
|
+
region: Region;
|
28
|
+
framework: Framework;
|
29
|
+
};
|
30
|
+
export declare enum TrackerType {
|
31
|
+
COOKIE = "cookie",
|
32
|
+
QUERY = "query",
|
33
|
+
PIXEL = "pixel",
|
34
|
+
BEACON = "beacon"
|
35
|
+
}
|
36
|
+
export type Tracker = {
|
37
|
+
id: string;
|
38
|
+
type: TrackerType;
|
39
|
+
regex?: string;
|
40
|
+
};
|
41
|
+
export type ConfigCategoryInfo = {
|
42
|
+
id: TrackingCategory;
|
43
|
+
trackers: Array<Tracker>;
|
44
|
+
required?: boolean;
|
45
|
+
};
|
46
|
+
export type Config = {
|
47
|
+
categories: Array<ConfigCategoryInfo>;
|
48
|
+
};
|
49
|
+
export type TrackingManagerDependencies = {
|
50
|
+
onError: ErrorFunction;
|
51
|
+
projectName: string;
|
52
|
+
locale: string;
|
53
|
+
region: Region;
|
54
|
+
onPreferenceChange?: (preference: TrackingPreference) => void;
|
55
|
+
config: Config;
|
56
|
+
shadowMode?: boolean;
|
57
|
+
log: LogFunction;
|
58
|
+
};
|
59
|
+
export type AdTrackingPreference = {
|
60
|
+
value: boolean;
|
61
|
+
updated_at?: number;
|
62
|
+
};
|
package/dist/types.js
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.TrackerType = exports.Framework = exports.TrackingCategory = exports.Region = void 0;
|
4
|
+
var Region;
|
5
|
+
(function (Region) {
|
6
|
+
Region["EU"] = "EU";
|
7
|
+
Region["DEFAULT"] = "DEFAULT";
|
8
|
+
})(Region || (exports.Region = Region = {}));
|
9
|
+
var TrackingCategory;
|
10
|
+
(function (TrackingCategory) {
|
11
|
+
TrackingCategory["FUNCTIONAL"] = "functional";
|
12
|
+
TrackingCategory["NECESSARY"] = "necessary";
|
13
|
+
TrackingCategory["TARGETING"] = "targeting";
|
14
|
+
TrackingCategory["PERFORMANCE"] = "performance";
|
15
|
+
TrackingCategory["DELETE_IF_SEEN"] = "delete-if-seen";
|
16
|
+
})(TrackingCategory || (exports.TrackingCategory = TrackingCategory = {}));
|
17
|
+
var Framework;
|
18
|
+
(function (Framework) {
|
19
|
+
Framework["OPT_OUT"] = "optOut";
|
20
|
+
Framework["OPT_IN"] = "optIn";
|
21
|
+
})(Framework || (exports.Framework = Framework = {}));
|
22
|
+
var TrackerType;
|
23
|
+
(function (TrackerType) {
|
24
|
+
TrackerType["COOKIE"] = "cookie";
|
25
|
+
TrackerType["QUERY"] = "query";
|
26
|
+
TrackerType["PIXEL"] = "pixel";
|
27
|
+
TrackerType["BEACON"] = "beacon";
|
28
|
+
})(TrackerType || (exports.TrackerType = TrackerType = {}));
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const js_cookie_1 = __importDefault(require("js-cookie"));
|
7
|
+
const TEST_COOKIE = 'test_cookie';
|
8
|
+
const areCookiesEnabled = () => {
|
9
|
+
js_cookie_1.default.set(TEST_COOKIE, 'test');
|
10
|
+
const result = !!js_cookie_1.default.get(TEST_COOKIE);
|
11
|
+
js_cookie_1.default.remove(TEST_COOKIE);
|
12
|
+
return result;
|
13
|
+
};
|
14
|
+
exports.default = areCookiesEnabled;
|
@@ -0,0 +1,3 @@
|
|
1
|
+
export declare const deserializeCookies: (cookies: Record<string, string>) => Record<string, any>;
|
2
|
+
export default function getAllCookies(initialCookies?: Record<string, string>): Record<string, any>;
|
3
|
+
export declare function areRecordsEqual(record1: Record<string, any>, record2: Record<string, any>): boolean;
|
@@ -0,0 +1,64 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.areRecordsEqual = exports.deserializeCookies = void 0;
|
7
|
+
const js_cookie_1 = __importDefault(require("js-cookie"));
|
8
|
+
const deserializeCookies = (cookies) => {
|
9
|
+
const parsedCookies = {};
|
10
|
+
Object.keys(cookies).forEach((c) => {
|
11
|
+
try {
|
12
|
+
parsedCookies[c] = JSON.parse(cookies[c]);
|
13
|
+
}
|
14
|
+
catch (e) {
|
15
|
+
parsedCookies[c] = cookies[c];
|
16
|
+
}
|
17
|
+
});
|
18
|
+
return parsedCookies;
|
19
|
+
};
|
20
|
+
exports.deserializeCookies = deserializeCookies;
|
21
|
+
function getAllCookies(initialCookies) {
|
22
|
+
if (typeof window === 'undefined' && initialCookies) {
|
23
|
+
return (0, exports.deserializeCookies)(initialCookies);
|
24
|
+
}
|
25
|
+
return (0, exports.deserializeCookies)(js_cookie_1.default.get() || {});
|
26
|
+
}
|
27
|
+
exports.default = getAllCookies;
|
28
|
+
function areRecordsEqual(record1, record2) {
|
29
|
+
// Check if the number of keys is the same
|
30
|
+
const keys1 = Object.keys(record1);
|
31
|
+
const keys2 = Object.keys(record2);
|
32
|
+
if (keys1.length !== keys2.length) {
|
33
|
+
return false;
|
34
|
+
}
|
35
|
+
// Check if all keys and their values are equal
|
36
|
+
for (const key of keys1) {
|
37
|
+
if (!deepEqual(record1[key], record2[key])) {
|
38
|
+
return false;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
return true;
|
42
|
+
}
|
43
|
+
exports.areRecordsEqual = areRecordsEqual;
|
44
|
+
function deepEqual(value1, value2) {
|
45
|
+
if (typeof value1 !== typeof value2) {
|
46
|
+
return false;
|
47
|
+
}
|
48
|
+
if (typeof value1 === 'object' && value1 !== null) {
|
49
|
+
const keys1 = Object.keys(value1);
|
50
|
+
const keys2 = Object.keys(value2);
|
51
|
+
if (keys1.length !== keys2.length) {
|
52
|
+
return false;
|
53
|
+
}
|
54
|
+
for (const key of keys1) {
|
55
|
+
if (!deepEqual(value1[key], value2[key])) {
|
56
|
+
return false;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
|
+
else if (value1 !== value2) {
|
61
|
+
return false;
|
62
|
+
}
|
63
|
+
return true;
|
64
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const types_1 = require("../types");
|
7
|
+
const isOptOut_1 = __importDefault(require("./isOptOut"));
|
8
|
+
const getDefaultTrackingPreference = (region, config) => {
|
9
|
+
// In opt in regions, we only allow required trackers
|
10
|
+
if (!(0, isOptOut_1.default)(region)) {
|
11
|
+
const categories = config.categories
|
12
|
+
.map((c) => {
|
13
|
+
if (c.required) {
|
14
|
+
return c.id;
|
15
|
+
}
|
16
|
+
})
|
17
|
+
.filter((c) => !!c);
|
18
|
+
return { region, consent: categories };
|
19
|
+
}
|
20
|
+
const categories = config.categories
|
21
|
+
.map((c) => c.id)
|
22
|
+
.filter((id) => id !== types_1.TrackingCategory.DELETE_IF_SEEN);
|
23
|
+
return {
|
24
|
+
region,
|
25
|
+
consent: categories,
|
26
|
+
};
|
27
|
+
};
|
28
|
+
exports.default = getDefaultTrackingPreference;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getDomainWithoutSubdomain = exports.getHostname = void 0;
|
4
|
+
function getHostname() {
|
5
|
+
if (typeof window !== 'undefined') {
|
6
|
+
return window.location.hostname;
|
7
|
+
}
|
8
|
+
}
|
9
|
+
exports.getHostname = getHostname;
|
10
|
+
function getDomainWithoutSubdomain() {
|
11
|
+
const hostname = getHostname();
|
12
|
+
if (!hostname) {
|
13
|
+
return;
|
14
|
+
}
|
15
|
+
if (hostname === 'localhost') {
|
16
|
+
return hostname;
|
17
|
+
}
|
18
|
+
const [, ...domain] = hostname.split('.');
|
19
|
+
return `.${domain.join('.')}`;
|
20
|
+
}
|
21
|
+
exports.getDomainWithoutSubdomain = getDomainWithoutSubdomain;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const trackerMatches_1 = __importDefault(require("./trackerMatches"));
|
7
|
+
const getTrackerCategory = (trackerId, config) => {
|
8
|
+
const category = config.categories.find((category) => category.trackers.find((tracker) => (0, trackerMatches_1.default)(tracker, trackerId)));
|
9
|
+
return category;
|
10
|
+
};
|
11
|
+
exports.default = getTrackerCategory;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const getTrackerCategory_1 = __importDefault(require("./getTrackerCategory"));
|
7
|
+
const trackerMatches_1 = __importDefault(require("./trackerMatches"));
|
8
|
+
const getTrackerInfo = (trackerId, config) => {
|
9
|
+
const trackingCategory = (0, getTrackerCategory_1.default)(trackerId, config);
|
10
|
+
return trackingCategory === null || trackingCategory === void 0 ? void 0 : trackingCategory.trackers.find((tracker) => (0, trackerMatches_1.default)(tracker, trackerId));
|
11
|
+
};
|
12
|
+
exports.default = getTrackerInfo;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Config, TrackingPreference } from '../types';
|
2
|
+
/**
|
3
|
+
* Used for determining if a specific tracker has user consent.
|
4
|
+
* It follows the following logic in order:
|
5
|
+
* 1) If we don't have a tracker category in the config then dont allow
|
6
|
+
* 2) If cookie is in a required category then allow
|
7
|
+
* 3) If cookie is required for cookie manager to function then allow
|
8
|
+
* 4) Determine consent from user consent preferences
|
9
|
+
*/
|
10
|
+
declare const hasConsent: (tracker: string, config: Config, trackingPreference: TrackingPreference) => boolean;
|
11
|
+
export default hasConsent;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const constants_1 = require("../constants");
|
7
|
+
const getTrackerCategory_1 = __importDefault(require("./getTrackerCategory"));
|
8
|
+
/**
|
9
|
+
* Used for determining if a specific tracker has user consent.
|
10
|
+
* It follows the following logic in order:
|
11
|
+
* 1) If we don't have a tracker category in the config then dont allow
|
12
|
+
* 2) If cookie is in a required category then allow
|
13
|
+
* 3) If cookie is required for cookie manager to function then allow
|
14
|
+
* 4) Determine consent from user consent preferences
|
15
|
+
*/
|
16
|
+
const hasConsent = (tracker, config, trackingPreference) => {
|
17
|
+
const trackingCategory = (0, getTrackerCategory_1.default)(tracker, config);
|
18
|
+
if (constants_1.REQUIRED_COOKIE_MANAGER_COOKIES.includes(tracker)) {
|
19
|
+
return true;
|
20
|
+
}
|
21
|
+
if (!trackingCategory) {
|
22
|
+
return false;
|
23
|
+
}
|
24
|
+
if (trackingCategory.required) {
|
25
|
+
return true;
|
26
|
+
}
|
27
|
+
return trackingPreference.consent.includes(trackingCategory.id);
|
28
|
+
};
|
29
|
+
exports.default = hasConsent;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { Region } from '../types';
|
2
|
+
/**
|
3
|
+
* Used for determining the if current region is using the optOut framework
|
4
|
+
* It follows the following logic in order:
|
5
|
+
* 1) If there's no geolocation rule for the specified region
|
6
|
+
* then use the rule for DEFAULT region
|
7
|
+
* - Otherwise use the DEFAULT_FRAMEWORK
|
8
|
+
* 2) Use geolocation rule
|
9
|
+
*/
|
10
|
+
/**
|
11
|
+
* optIn: Users must opt in to tracking (EU)
|
12
|
+
* optOut: Users must opt out of tracking (non-EU)
|
13
|
+
* We use the most restrictive framework (optIn) if we don't know the framework
|
14
|
+
*/
|
15
|
+
declare const isOptOut: (region: Region) => boolean;
|
16
|
+
export default isOptOut;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const constants_1 = require("../constants");
|
4
|
+
const types_1 = require("../types");
|
5
|
+
/**
|
6
|
+
* Used for determining the if current region is using the optOut framework
|
7
|
+
* It follows the following logic in order:
|
8
|
+
* 1) If there's no geolocation rule for the specified region
|
9
|
+
* then use the rule for DEFAULT region
|
10
|
+
* - Otherwise use the DEFAULT_FRAMEWORK
|
11
|
+
* 2) Use geolocation rule
|
12
|
+
*/
|
13
|
+
/**
|
14
|
+
* optIn: Users must opt in to tracking (EU)
|
15
|
+
* optOut: Users must opt out of tracking (non-EU)
|
16
|
+
* We use the most restrictive framework (optIn) if we don't know the framework
|
17
|
+
*/
|
18
|
+
const isOptOut = (region) => {
|
19
|
+
const rule = constants_1.GEOLOCATION_RULES.find((r) => r.region === region);
|
20
|
+
if (!rule) {
|
21
|
+
return true;
|
22
|
+
}
|
23
|
+
return rule.framework === types_1.Framework.OPT_OUT;
|
24
|
+
};
|
25
|
+
exports.default = isOptOut;
|
@@ -0,0 +1,36 @@
|
|
1
|
+
"use strict";
|
2
|
+
/*
|
3
|
+
* The purpose here is to allow the iOS/Android app to send a is_mobile_app=true
|
4
|
+
* parameter that should indicate to the web surfaces not to show the
|
5
|
+
* cookie banner
|
6
|
+
*
|
7
|
+
*/
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
9
|
+
exports.getIsMobileAppFromQueryParams = exports.persistMobileAppPreferences = void 0;
|
10
|
+
const constants_1 = require("../constants");
|
11
|
+
const getDomain_1 = require("./getDomain");
|
12
|
+
function persistMobileAppPreferences() {
|
13
|
+
try {
|
14
|
+
const isMobileApp = getIsMobileAppFromQueryParams();
|
15
|
+
if (isMobileApp) {
|
16
|
+
document.cookie = `${constants_1.IS_MOBILE_APP}=true; domain=${(0, getDomain_1.getDomainWithoutSubdomain)()}`;
|
17
|
+
}
|
18
|
+
}
|
19
|
+
catch (e) {
|
20
|
+
// Ignore, we are not in a browser.
|
21
|
+
}
|
22
|
+
}
|
23
|
+
exports.persistMobileAppPreferences = persistMobileAppPreferences;
|
24
|
+
function getIsMobileAppFromQueryParams() {
|
25
|
+
try {
|
26
|
+
const params = new URLSearchParams(window.location.search);
|
27
|
+
const isWebView = params.get('webview') === 'true';
|
28
|
+
const isMobileApp = params.get(constants_1.IS_MOBILE_APP) === 'true';
|
29
|
+
return Boolean(isWebView || isMobileApp);
|
30
|
+
}
|
31
|
+
catch (e) {
|
32
|
+
// Ignore, we are not in a browser.
|
33
|
+
}
|
34
|
+
return false;
|
35
|
+
}
|
36
|
+
exports.getIsMobileAppFromQueryParams = getIsMobileAppFromQueryParams;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const setGTMVariables = (preference, adTrackingPreference) => {
|
4
|
+
if (typeof window !== 'undefined') {
|
5
|
+
if (!window.dataLayer)
|
6
|
+
window.dataLayer = [];
|
7
|
+
const gtmData = [
|
8
|
+
{ consent: preference.consent },
|
9
|
+
{ adConsent: adTrackingPreference.value.toString() },
|
10
|
+
];
|
11
|
+
window.dataLayer.push(...gtmData);
|
12
|
+
}
|
13
|
+
};
|
14
|
+
exports.default = setGTMVariables;
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import { CookieAttributes } from 'js-cookie';
|
2
|
+
import { Region, TrackingPreference } from '../types';
|
3
|
+
declare const setTrackingPreference: (setCookie: (name: string, value: any, options?: CookieAttributes) => void, newConsentPreference: TrackingPreference, region: Region, onPreferenceChange?: ((preference: TrackingPreference) => void) | undefined) => void;
|
4
|
+
export default setTrackingPreference;
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const constants_1 = require("../constants");
|
4
|
+
const getDomain_1 = require("./getDomain");
|
5
|
+
const setTrackingPreference = (setCookie, newConsentPreference, region, onPreferenceChange) => {
|
6
|
+
const expiration = constants_1.PREFERENCE_EXPIRATION_YEAR * 365;
|
7
|
+
const cookieOptions = {
|
8
|
+
expires: expiration,
|
9
|
+
domain: (0, getDomain_1.getDomainWithoutSubdomain)(),
|
10
|
+
path: '/',
|
11
|
+
};
|
12
|
+
if (region === 'EU') {
|
13
|
+
setCookie(constants_1.EU_CONSENT_PREFERENCES_COOKIE, newConsentPreference, cookieOptions);
|
14
|
+
}
|
15
|
+
else {
|
16
|
+
setCookie(constants_1.DEFAULT_CONSENT_PREFERENCES_COOKIE, newConsentPreference, cookieOptions);
|
17
|
+
}
|
18
|
+
if (onPreferenceChange) {
|
19
|
+
onPreferenceChange(newConsentPreference);
|
20
|
+
}
|
21
|
+
};
|
22
|
+
exports.default = setTrackingPreference;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const trackerMatches = (tracker, id) => {
|
4
|
+
if (tracker.regex) {
|
5
|
+
const re = new RegExp(tracker.regex);
|
6
|
+
return re.test(id);
|
7
|
+
}
|
8
|
+
else {
|
9
|
+
return tracker.id === id;
|
10
|
+
}
|
11
|
+
};
|
12
|
+
exports.default = trackerMatches;
|