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.

Files changed (94) hide show
  1. package/.eslintignore +11 -0
  2. package/LICENSE.md +13 -0
  3. package/README.md +3 -3
  4. package/dist/CookieContext.d.ts +10 -0
  5. package/dist/CookieContext.js +182 -0
  6. package/dist/TrackingManagerContext.d.ts +6 -0
  7. package/dist/TrackingManagerContext.js +53 -0
  8. package/dist/analytics.js +119 -0
  9. package/dist/constants.d.ts +11 -0
  10. package/dist/constants.js +32 -0
  11. package/dist/examples/config.d.ts +28 -0
  12. package/dist/examples/config.js +77 -0
  13. package/dist/hooks/useHasConsent.d.ts +2 -0
  14. package/dist/hooks/useHasConsent.js +14 -0
  15. package/dist/hooks/useRequiredCategories.d.ts +3 -0
  16. package/dist/hooks/useRequiredCategories.js +10 -0
  17. package/dist/hooks/useSavedTrackingPreference.d.ts +3 -0
  18. package/dist/hooks/useSavedTrackingPreference.js +38 -0
  19. package/dist/hooks/useSetTrackingPreference.d.ts +3 -0
  20. package/dist/hooks/useSetTrackingPreference.js +27 -0
  21. package/dist/hooks/useTrackingPreference.d.ts +3 -0
  22. package/dist/hooks/useTrackingPreference.js +16 -0
  23. package/dist/index.d.ts +14 -0
  24. package/dist/index.js +39 -0
  25. package/dist/types.d.ts +62 -0
  26. package/dist/types.js +28 -0
  27. package/dist/utils/areCookiesEnabled.d.ts +2 -0
  28. package/dist/utils/areCookiesEnabled.js +14 -0
  29. package/dist/utils/getAllCookies.d.ts +3 -0
  30. package/dist/utils/getAllCookies.js +64 -0
  31. package/dist/utils/getDefaultTrackingPreference.d.ts +3 -0
  32. package/dist/utils/getDefaultTrackingPreference.js +28 -0
  33. package/dist/utils/getDomain.d.ts +2 -0
  34. package/dist/utils/getDomain.js +21 -0
  35. package/dist/utils/getTrackerCategory.d.ts +3 -0
  36. package/dist/utils/getTrackerCategory.js +11 -0
  37. package/dist/utils/getTrackerInfo.d.ts +3 -0
  38. package/dist/utils/getTrackerInfo.js +12 -0
  39. package/dist/utils/hasConsent.d.ts +11 -0
  40. package/dist/utils/hasConsent.js +29 -0
  41. package/dist/utils/isMaxKBSize.d.ts +2 -0
  42. package/dist/utils/isMaxKBSize.js +7 -0
  43. package/dist/utils/isOptOut.d.ts +16 -0
  44. package/dist/utils/isOptOut.js +25 -0
  45. package/dist/utils/persistMobileAppPreferences.d.ts +2 -0
  46. package/dist/utils/persistMobileAppPreferences.js +36 -0
  47. package/dist/utils/setGTMVariables.d.ts +3 -0
  48. package/dist/utils/setGTMVariables.js +14 -0
  49. package/dist/utils/setTrackingPreference.d.ts +4 -0
  50. package/dist/utils/setTrackingPreference.js +22 -0
  51. package/dist/utils/trackerMatches.d.ts +3 -0
  52. package/dist/utils/trackerMatches.js +12 -0
  53. package/jest.config.ts +204 -0
  54. package/package.json +30 -3
  55. package/src/CookieContext.test.tsx +105 -0
  56. package/src/CookieContext.tsx +215 -0
  57. package/src/TrackingManagerContext.tsx +25 -0
  58. package/src/analytics.ts +65 -0
  59. package/src/constants.ts +35 -0
  60. package/src/examples/config.ts +76 -0
  61. package/src/global.d.ts +3 -0
  62. package/src/hooks/useHasConsent.ts +11 -0
  63. package/src/hooks/useRequiredCaregories.test.tsx +43 -0
  64. package/src/hooks/useRequiredCategories.ts +11 -0
  65. package/src/hooks/useSavedTrackingPreference.ts +47 -0
  66. package/src/hooks/useSetTrackingPreference.test.tsx +82 -0
  67. package/src/hooks/useSetTrackingPreference.ts +31 -0
  68. package/src/hooks/useTrackingPreference.ts +15 -0
  69. package/src/index.ts +20 -0
  70. package/src/types.ts +71 -0
  71. package/src/utils/areCookiesEnabled.ts +13 -0
  72. package/src/utils/getAllCookies.test.ts +35 -0
  73. package/src/utils/getAllCookies.ts +68 -0
  74. package/src/utils/getDefaultTrackingPreference.test.ts +16 -0
  75. package/src/utils/getDefaultTrackingPreference.ts +28 -0
  76. package/src/utils/getDomain.test.ts +16 -0
  77. package/src/utils/getDomain.ts +19 -0
  78. package/src/utils/getTrackerCategory.test.ts +34 -0
  79. package/src/utils/getTrackerCategory.ts +11 -0
  80. package/src/utils/getTrackerInfo.test.ts +11 -0
  81. package/src/utils/getTrackerInfo.ts +10 -0
  82. package/src/utils/hasConsent.test.ts +64 -0
  83. package/src/utils/hasConsent.ts +32 -0
  84. package/src/utils/isMaxKBSize.test.ts +10 -0
  85. package/src/utils/isMaxKBSize.ts +7 -0
  86. package/src/utils/isOptOut.test.ts +14 -0
  87. package/src/utils/isOptOut.ts +28 -0
  88. package/src/utils/persistMobileAppPreferences.ts +32 -0
  89. package/src/utils/setGTMVariables.test.ts +20 -0
  90. package/src/utils/setGTMVariables.ts +17 -0
  91. package/src/utils/setTrackingPreference.ts +36 -0
  92. package/src/utils/trackerMatches.test.ts +13 -0
  93. package/src/utils/trackerMatches.ts +12 -0
  94. 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,3 @@
1
+ import { TrackingPreference } from '../types';
2
+ declare const useSetTrackingPreference: () => (preference: TrackingPreference) => void;
3
+ export default useSetTrackingPreference;
@@ -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,3 @@
1
+ import { TrackingPreference } from '../types';
2
+ declare const useTrackingPreference: () => TrackingPreference;
3
+ export default useTrackingPreference;
@@ -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;
@@ -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; } });
@@ -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,2 @@
1
+ declare const areCookiesEnabled: () => boolean;
2
+ export default areCookiesEnabled;
@@ -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,3 @@
1
+ import { Config, Region, TrackingPreference } from '../types';
2
+ declare const getDefaultTrackingPreference: (region: Region, config: Config) => TrackingPreference;
3
+ export default getDefaultTrackingPreference;
@@ -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,2 @@
1
+ export declare function getHostname(): string | undefined;
2
+ export declare function getDomainWithoutSubdomain(): string | undefined;
@@ -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,3 @@
1
+ import { Config, ConfigCategoryInfo } from '../types';
2
+ declare const getTrackerCategory: (trackerId: string, config: Config) => ConfigCategoryInfo | undefined;
3
+ export default getTrackerCategory;
@@ -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,3 @@
1
+ import { Config } from '../types';
2
+ declare const getTrackerInfo: (trackerId: string, config: Config) => import("../types").Tracker | undefined;
3
+ export default getTrackerInfo;
@@ -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,2 @@
1
+ declare const isMaxKBSize: (str: string, max: number) => boolean;
2
+ export default isMaxKBSize;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const constants_1 = require("../constants");
4
+ const isMaxKBSize = (str, max) => {
5
+ return Buffer.from(str).length / constants_1.KB > max;
6
+ };
7
+ exports.default = isMaxKBSize;
@@ -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,2 @@
1
+ export declare function persistMobileAppPreferences(): void;
2
+ export declare function getIsMobileAppFromQueryParams(): boolean;
@@ -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,3 @@
1
+ import { AdTrackingPreference, TrackingPreference } from '../types';
2
+ declare const setGTMVariables: (preference: TrackingPreference, adTrackingPreference: AdTrackingPreference) => void;
3
+ export default setGTMVariables;
@@ -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,3 @@
1
+ import { Tracker } from '../types';
2
+ declare const trackerMatches: (tracker: Tracker, id: string) => boolean;
3
+ export default trackerMatches;
@@ -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;