@groundbrick/sveltekit-adapter 0.1.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/README.md +554 -0
- package/dist/analytics/components/GoogleAnalytics.svelte +96 -0
- package/dist/analytics/config/analytics.config.d.ts +6 -0
- package/dist/analytics/config/analytics.config.d.ts.map +1 -0
- package/dist/analytics/config/analytics.config.js +27 -0
- package/dist/analytics/config/analytics.config.js.map +1 -0
- package/dist/analytics/index.d.ts +7 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +9 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/interfaces/IAnalyticsService.d.ts +40 -0
- package/dist/analytics/interfaces/IAnalyticsService.d.ts.map +1 -0
- package/dist/analytics/interfaces/IAnalyticsService.js +2 -0
- package/dist/analytics/interfaces/IAnalyticsService.js.map +1 -0
- package/dist/analytics/services/AnalyticsService.d.ts +37 -0
- package/dist/analytics/services/AnalyticsService.d.ts.map +1 -0
- package/dist/analytics/services/AnalyticsService.js +261 -0
- package/dist/analytics/services/AnalyticsService.js.map +1 -0
- package/dist/analytics/utils/consent.d.ts +52 -0
- package/dist/analytics/utils/consent.d.ts.map +1 -0
- package/dist/analytics/utils/consent.js +138 -0
- package/dist/analytics/utils/consent.js.map +1 -0
- package/dist/auth/index.d.ts +10 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +49 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/client/ApiClient.d.ts +17 -0
- package/dist/client/ApiClient.d.ts.map +1 -0
- package/dist/client/ApiClient.js +184 -0
- package/dist/client/ApiClient.js.map +1 -0
- package/dist/client/NotificationComponent.d.ts +7 -0
- package/dist/client/NotificationComponent.d.ts.map +1 -0
- package/dist/client/NotificationComponent.js +131 -0
- package/dist/client/NotificationComponent.js.map +1 -0
- package/dist/client/apiWrapper.d.ts +324 -0
- package/dist/client/apiWrapper.d.ts.map +1 -0
- package/dist/client/apiWrapper.js +257 -0
- package/dist/client/apiWrapper.js.map +1 -0
- package/dist/client/authErrorHandler.d.ts +19 -0
- package/dist/client/authErrorHandler.d.ts.map +1 -0
- package/dist/client/authErrorHandler.js +40 -0
- package/dist/client/authErrorHandler.js.map +1 -0
- package/dist/client/hooks.d.ts +11 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +28 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/index.d.ts +8 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +13 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/jwtDecoder.d.ts +56 -0
- package/dist/client/jwtDecoder.d.ts.map +1 -0
- package/dist/client/jwtDecoder.js +114 -0
- package/dist/client/jwtDecoder.js.map +1 -0
- package/dist/client/notifications.d.ts +55 -0
- package/dist/client/notifications.d.ts.map +1 -0
- package/dist/client/notifications.js +160 -0
- package/dist/client/notifications.js.map +1 -0
- package/dist/client/stores.d.ts +26 -0
- package/dist/client/stores.d.ts.map +1 -0
- package/dist/client/stores.js +196 -0
- package/dist/client/stores.js.map +1 -0
- package/dist/consent/components/CookieConsent.svelte +580 -0
- package/dist/consent/config/consent.config.d.ts +7 -0
- package/dist/consent/config/consent.config.d.ts.map +1 -0
- package/dist/consent/config/consent.config.js +194 -0
- package/dist/consent/config/consent.config.js.map +1 -0
- package/dist/consent/index.d.ts +5 -0
- package/dist/consent/index.d.ts.map +1 -0
- package/dist/consent/index.js +7 -0
- package/dist/consent/index.js.map +1 -0
- package/dist/consent/interfaces/IConsentService.d.ts +121 -0
- package/dist/consent/interfaces/IConsentService.d.ts.map +1 -0
- package/dist/consent/interfaces/IConsentService.js +2 -0
- package/dist/consent/interfaces/IConsentService.js.map +1 -0
- package/dist/consent/services/ConsentService.d.ts +39 -0
- package/dist/consent/services/ConsentService.d.ts.map +1 -0
- package/dist/consent/services/ConsentService.js +302 -0
- package/dist/consent/services/ConsentService.js.map +1 -0
- package/dist/consent/utils/analytics.d.ts +52 -0
- package/dist/consent/utils/analytics.d.ts.map +1 -0
- package/dist/consent/utils/analytics.js +181 -0
- package/dist/consent/utils/analytics.js.map +1 -0
- package/dist/hooks/index.d.ts +14 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +218 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +88 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
export const DEFAULT_CONSENT_CONFIG = {
|
|
2
|
+
version: '2.0', // Updated for Consent Mode v2
|
|
3
|
+
storageKey: 'cookie-consent',
|
|
4
|
+
// Cookie categories mapped to Google Consent Mode v2 parameters
|
|
5
|
+
categories: {
|
|
6
|
+
functional: {
|
|
7
|
+
required: true,
|
|
8
|
+
name: 'Cookies funcionais (Essenciais)',
|
|
9
|
+
description: 'Necessários para o funcionamento básico do site. Sempre ativos.',
|
|
10
|
+
defaultValue: true,
|
|
11
|
+
// No mapping to gtag - functional cookies don't require consent
|
|
12
|
+
gtagMapping: null
|
|
13
|
+
},
|
|
14
|
+
analytics: {
|
|
15
|
+
required: false,
|
|
16
|
+
name: 'Cookies de análise',
|
|
17
|
+
description: 'Ajudam-nos a entender como utiliza o nosso site.',
|
|
18
|
+
defaultValue: true,
|
|
19
|
+
// Maps to analytics_storage in Google Consent Mode v2
|
|
20
|
+
gtagMapping: 'analytics_storage'
|
|
21
|
+
},
|
|
22
|
+
marketing: {
|
|
23
|
+
required: false,
|
|
24
|
+
name: 'Cookies de Marketing & Publicidade',
|
|
25
|
+
description: 'Utilizados para anúncios personalizados e remarketing.',
|
|
26
|
+
defaultValue: true,
|
|
27
|
+
// Maps to ad_storage, ad_user_data, and ad_personalization in Consent Mode v2
|
|
28
|
+
gtagMapping: ['ad_storage', 'ad_user_data', 'ad_personalization']
|
|
29
|
+
},
|
|
30
|
+
preferences: {
|
|
31
|
+
required: false,
|
|
32
|
+
name: 'Cookies de Preferências',
|
|
33
|
+
description: 'Lembrar as suas definições e preferências.',
|
|
34
|
+
defaultValue: true,
|
|
35
|
+
// Custom category - no direct gtag mapping
|
|
36
|
+
gtagMapping: null
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
// Banner configuration
|
|
40
|
+
banner: {
|
|
41
|
+
title: '🍪 We use cookies',
|
|
42
|
+
message: 'We use cookies to improve your experience and analyze our website traffic. Choose which types of cookies to accept to help us comply with privacy regulations.',
|
|
43
|
+
acceptAllText: 'Accept all',
|
|
44
|
+
rejectAllText: 'Reject all',
|
|
45
|
+
customizeText: 'Manage preferences',
|
|
46
|
+
savePreferencesText: 'Save preferences',
|
|
47
|
+
// New Consent Mode v2 specific messaging
|
|
48
|
+
consentModeNotice: 'Your choices help us comply with Google\'s updated consent requirements.'
|
|
49
|
+
},
|
|
50
|
+
// Compliance settings for Consent Mode v2
|
|
51
|
+
compliance: {
|
|
52
|
+
// Block scripts until consent (required for Consent Mode v2)
|
|
53
|
+
blockByDefault: true,
|
|
54
|
+
// Show detailed preferences by default
|
|
55
|
+
showPreferences: false,
|
|
56
|
+
// Require explicit consent (no pre-checked boxes)
|
|
57
|
+
requireExplicitConsent: true,
|
|
58
|
+
// Automatically show banner on first visit
|
|
59
|
+
autoShow: true,
|
|
60
|
+
// Wait time for consent updates (milliseconds)
|
|
61
|
+
waitForUpdate: 2000,
|
|
62
|
+
// Enable URL passthrough for better measurement without cookies
|
|
63
|
+
enableUrlPassthrough: true,
|
|
64
|
+
// Redact ads data when ad consent is denied
|
|
65
|
+
enableAdsDataRedaction: true
|
|
66
|
+
},
|
|
67
|
+
// Google Consent Mode v2 specific settings
|
|
68
|
+
consentMode: {
|
|
69
|
+
// Enable Google Consent Mode v2
|
|
70
|
+
enabled: true,
|
|
71
|
+
// Default consent states (all denied by default for compliance)
|
|
72
|
+
defaults: {
|
|
73
|
+
ad_storage: 'denied',
|
|
74
|
+
analytics_storage: 'denied',
|
|
75
|
+
ad_user_data: 'denied',
|
|
76
|
+
ad_personalization: 'denied'
|
|
77
|
+
},
|
|
78
|
+
// Region-specific settings
|
|
79
|
+
regions: {
|
|
80
|
+
// EU/EEA requires explicit consent
|
|
81
|
+
'EU': {
|
|
82
|
+
ad_storage: 'denied',
|
|
83
|
+
analytics_storage: 'denied',
|
|
84
|
+
ad_user_data: 'denied',
|
|
85
|
+
ad_personalization: 'denied'
|
|
86
|
+
},
|
|
87
|
+
// California (CCPA) - different requirements
|
|
88
|
+
'US-CA': {
|
|
89
|
+
ad_storage: 'granted',
|
|
90
|
+
analytics_storage: 'granted',
|
|
91
|
+
ad_user_data: 'denied',
|
|
92
|
+
ad_personalization: 'denied'
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
// GDPR-compliant configuration for EU/EEA
|
|
98
|
+
export const GDPR_CONFIG = {
|
|
99
|
+
version: '2.0',
|
|
100
|
+
compliance: {
|
|
101
|
+
blockByDefault: true,
|
|
102
|
+
requireExplicitConsent: true,
|
|
103
|
+
autoShow: true,
|
|
104
|
+
showPreferences: false,
|
|
105
|
+
waitForUpdate: 2000,
|
|
106
|
+
enableUrlPassthrough: true,
|
|
107
|
+
enableAdsDataRedaction: true
|
|
108
|
+
},
|
|
109
|
+
banner: {
|
|
110
|
+
title: 'Aceitas cookies?',
|
|
111
|
+
message: 'Usamos cookies e tecnologias semelhantes para que os nossos serviços funcionem melhor, sejam mais seguros e fáceis de usar. Ao clicar em "Aceitar todos", está a concordar com a utilização desses cookies. Pode gerir as suas preferências para escolher quais quer permitir.',
|
|
112
|
+
acceptAllText: 'Aceitar todos',
|
|
113
|
+
rejectAllText: 'Recusar os essenciais',
|
|
114
|
+
customizeText: 'Gerir preferências',
|
|
115
|
+
consentModeNotice: 'Isto ajuda-nos a cumprir as regulamentações de privacidade da UE e os requisitos de consentimento do Google.',
|
|
116
|
+
savePreferencesText: 'Guardar preferências'
|
|
117
|
+
},
|
|
118
|
+
consentMode: {
|
|
119
|
+
enabled: true,
|
|
120
|
+
defaults: {
|
|
121
|
+
ad_storage: 'denied',
|
|
122
|
+
analytics_storage: 'denied',
|
|
123
|
+
ad_user_data: 'denied',
|
|
124
|
+
ad_personalization: 'denied'
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
// CCPA-compliant configuration for California
|
|
129
|
+
export const CCPA_CONFIG = {
|
|
130
|
+
version: '2.0',
|
|
131
|
+
compliance: {
|
|
132
|
+
blockByDefault: false,
|
|
133
|
+
requireExplicitConsent: false,
|
|
134
|
+
autoShow: true,
|
|
135
|
+
showPreferences: true,
|
|
136
|
+
waitForUpdate: 1000,
|
|
137
|
+
enableUrlPassthrough: false,
|
|
138
|
+
enableAdsDataRedaction: false
|
|
139
|
+
},
|
|
140
|
+
banner: {
|
|
141
|
+
title: 'Your Privacy Choices',
|
|
142
|
+
message: 'We and our partners use cookies and similar technologies. You have choices about how we use this data. California residents have additional rights under CCPA.',
|
|
143
|
+
acceptAllText: 'Allow all',
|
|
144
|
+
rejectAllText: 'Do not sell my info',
|
|
145
|
+
customizeText: 'Privacy settings',
|
|
146
|
+
consentModeNotice: 'Your choices are processed according to California privacy laws.',
|
|
147
|
+
savePreferencesText: 'Save preferences'
|
|
148
|
+
},
|
|
149
|
+
consentMode: {
|
|
150
|
+
enabled: true,
|
|
151
|
+
defaults: {
|
|
152
|
+
ad_storage: 'granted',
|
|
153
|
+
analytics_storage: 'granted',
|
|
154
|
+
ad_user_data: 'denied',
|
|
155
|
+
ad_personalization: 'denied'
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
// Generic configuration for other regions
|
|
160
|
+
export const GENERIC_CONFIG = {
|
|
161
|
+
version: '2.0',
|
|
162
|
+
compliance: {
|
|
163
|
+
blockByDefault: false,
|
|
164
|
+
requireExplicitConsent: false,
|
|
165
|
+
autoShow: true,
|
|
166
|
+
showPreferences: false,
|
|
167
|
+
waitForUpdate: 500,
|
|
168
|
+
enableUrlPassthrough: false,
|
|
169
|
+
enableAdsDataRedaction: false
|
|
170
|
+
},
|
|
171
|
+
consentMode: {
|
|
172
|
+
enabled: true,
|
|
173
|
+
defaults: {
|
|
174
|
+
ad_storage: 'granted',
|
|
175
|
+
analytics_storage: 'granted',
|
|
176
|
+
ad_user_data: 'granted',
|
|
177
|
+
ad_personalization: 'granted'
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
// Helper function to get region-appropriate config
|
|
182
|
+
export function getRegionConfig(region) {
|
|
183
|
+
const euRegions = ['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'IS', 'LI', 'NO'];
|
|
184
|
+
if (!region)
|
|
185
|
+
return GENERIC_CONFIG;
|
|
186
|
+
if (euRegions.includes(region) || region === 'EU') {
|
|
187
|
+
return GDPR_CONFIG;
|
|
188
|
+
}
|
|
189
|
+
if (region === 'US-CA') {
|
|
190
|
+
return CCPA_CONFIG;
|
|
191
|
+
}
|
|
192
|
+
return GENERIC_CONFIG;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=consent.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent.config.js","sourceRoot":"","sources":["../../../src/consent/config/consent.config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ConsentService } from './services/ConsentService.js';
|
|
2
|
+
export type { ConsentState, ConsentPreferences, ConsentCategory, ConsentConfig, IConsentService } from './interfaces/IConsentService.js';
|
|
3
|
+
export { DEFAULT_CONSENT_CONFIG, GDPR_CONFIG, CCPA_CONFIG, GENERIC_CONFIG } from './config/consent.config.js';
|
|
4
|
+
export { default as CookieConsent } from './components/CookieConsent.svelte';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/consent/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,YAAY,EACR,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,eAAe,EAClB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACH,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,cAAc,EACjB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Main service
|
|
2
|
+
export { ConsentService } from './services/ConsentService.js';
|
|
3
|
+
// Configuration presets
|
|
4
|
+
export { DEFAULT_CONSENT_CONFIG, GDPR_CONFIG, CCPA_CONFIG, GENERIC_CONFIG } from './config/consent.config.js';
|
|
5
|
+
// Svelte component (needs special handling for .svelte files)
|
|
6
|
+
export { default as CookieConsent } from './components/CookieConsent.svelte';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/consent/index.ts"],"names":[],"mappings":"AACA,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAW9D,wBAAwB;AACxB,OAAO,EACH,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,cAAc,EACjB,MAAM,4BAA4B,CAAC;AAEpC,8DAA8D;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
export type ConsentValue = 'granted' | 'denied';
|
|
2
|
+
export interface ConsentModeParams {
|
|
3
|
+
ad_storage: ConsentValue;
|
|
4
|
+
analytics_storage: ConsentValue;
|
|
5
|
+
ad_user_data: ConsentValue;
|
|
6
|
+
ad_personalization: ConsentValue;
|
|
7
|
+
}
|
|
8
|
+
export interface ConsentModeRegion extends ConsentModeParams {
|
|
9
|
+
region?: string | string[];
|
|
10
|
+
}
|
|
11
|
+
export interface ConsentState {
|
|
12
|
+
analytics: boolean | null;
|
|
13
|
+
marketing: boolean | null;
|
|
14
|
+
functional: boolean | null;
|
|
15
|
+
preferences: boolean | null;
|
|
16
|
+
timestamp: number;
|
|
17
|
+
version: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ConsentPreferences {
|
|
20
|
+
analytics: boolean;
|
|
21
|
+
marketing: boolean;
|
|
22
|
+
functional: boolean;
|
|
23
|
+
preferences: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface ConsentCategory {
|
|
26
|
+
required: boolean;
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
defaultValue: boolean;
|
|
30
|
+
gtagMapping: keyof ConsentModeParams | (keyof ConsentModeParams)[] | null;
|
|
31
|
+
}
|
|
32
|
+
export interface BannerConfig {
|
|
33
|
+
title: string;
|
|
34
|
+
message: string;
|
|
35
|
+
acceptAllText: string;
|
|
36
|
+
rejectAllText: string;
|
|
37
|
+
customizeText: string;
|
|
38
|
+
savePreferencesText: string;
|
|
39
|
+
consentModeNotice?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ComplianceConfig {
|
|
42
|
+
blockByDefault: boolean;
|
|
43
|
+
showPreferences: boolean;
|
|
44
|
+
requireExplicitConsent: boolean;
|
|
45
|
+
autoShow: boolean;
|
|
46
|
+
waitForUpdate?: number;
|
|
47
|
+
enableUrlPassthrough?: boolean;
|
|
48
|
+
enableAdsDataRedaction?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface ConsentModeConfig {
|
|
51
|
+
enabled: boolean;
|
|
52
|
+
defaults: ConsentModeParams;
|
|
53
|
+
regions?: Record<string, ConsentModeParams>;
|
|
54
|
+
}
|
|
55
|
+
export interface ConsentConfig {
|
|
56
|
+
version: string;
|
|
57
|
+
storageKey: string;
|
|
58
|
+
categories: Record<string, ConsentCategory>;
|
|
59
|
+
banner: BannerConfig;
|
|
60
|
+
compliance: ComplianceConfig;
|
|
61
|
+
consentMode?: ConsentModeConfig;
|
|
62
|
+
}
|
|
63
|
+
export type ConsentChangeEvent = (state: ConsentState) => void;
|
|
64
|
+
export interface IConsentService {
|
|
65
|
+
initialize(config?: Partial<ConsentConfig>): IConsentService;
|
|
66
|
+
getConsentState(): ConsentState | null;
|
|
67
|
+
setConsent(preferences: ConsentPreferences): Promise<void>;
|
|
68
|
+
hasConsent(type: keyof ConsentPreferences): boolean;
|
|
69
|
+
getConsentModeParams(): ConsentModeParams;
|
|
70
|
+
updateGtagConsent(params: Partial<ConsentModeParams>): void;
|
|
71
|
+
setDefaultConsent(params: ConsentModeParams, region?: string | string[]): void;
|
|
72
|
+
isConsentRequired(): boolean;
|
|
73
|
+
clearConsent(): void;
|
|
74
|
+
acceptAll(): Promise<void>;
|
|
75
|
+
rejectAll(): Promise<void>;
|
|
76
|
+
onConsentChange(callback: ConsentChangeEvent): () => void;
|
|
77
|
+
updateConfig(config: Partial<ConsentConfig>): void;
|
|
78
|
+
getConfig(): ConsentConfig;
|
|
79
|
+
setRegion(region: string): void;
|
|
80
|
+
getRegion(): string | null;
|
|
81
|
+
}
|
|
82
|
+
export interface CookieConsentProps {
|
|
83
|
+
config?: Partial<ConsentConfig>;
|
|
84
|
+
onConsentChange?: ConsentChangeEvent;
|
|
85
|
+
position?: 'top' | 'bottom';
|
|
86
|
+
theme?: 'light' | 'dark' | 'auto';
|
|
87
|
+
className?: string;
|
|
88
|
+
autoDetectRegion?: boolean;
|
|
89
|
+
}
|
|
90
|
+
export interface AnalyticsConsentConfig {
|
|
91
|
+
gaId?: string;
|
|
92
|
+
enableDebug?: boolean;
|
|
93
|
+
anonymizeIp?: boolean;
|
|
94
|
+
cookieFlags?: string;
|
|
95
|
+
enableUrlPassthrough?: boolean;
|
|
96
|
+
enableAdsDataRedaction?: boolean;
|
|
97
|
+
waitForUpdate?: number;
|
|
98
|
+
}
|
|
99
|
+
export interface ConsentStorage {
|
|
100
|
+
get(key: string): ConsentState | null;
|
|
101
|
+
set(key: string, value: ConsentState): void;
|
|
102
|
+
remove(key: string): void;
|
|
103
|
+
clear(): void;
|
|
104
|
+
}
|
|
105
|
+
export interface ConsentValidationResult {
|
|
106
|
+
isValid: boolean;
|
|
107
|
+
errors: string[];
|
|
108
|
+
warnings: string[];
|
|
109
|
+
}
|
|
110
|
+
export type ConsentCategoryKey = keyof ConsentPreferences;
|
|
111
|
+
export type RequiredConsentCategories = {
|
|
112
|
+
[K in ConsentCategoryKey]: ConsentCategory & {
|
|
113
|
+
required: true;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
export type OptionalConsentCategories = {
|
|
117
|
+
[K in ConsentCategoryKey]: ConsentCategory & {
|
|
118
|
+
required: false;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=IConsentService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IConsentService.d.ts","sourceRoot":"","sources":["../../../src/consent/interfaces/IConsentService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IConsentService.js","sourceRoot":"","sources":["../../../src/consent/interfaces/IConsentService.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { IConsentService, ConsentConfig, ConsentState, ConsentPreferences, ConsentChangeEvent, ConsentModeParams } from '../interfaces/IConsentService.js';
|
|
2
|
+
declare global {
|
|
3
|
+
interface Window {
|
|
4
|
+
dataLayer: any[];
|
|
5
|
+
gtag: (...args: any[]) => void;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export declare class ConsentService implements IConsentService {
|
|
9
|
+
private static instance;
|
|
10
|
+
private config;
|
|
11
|
+
private storage;
|
|
12
|
+
private listeners;
|
|
13
|
+
private currentRegion;
|
|
14
|
+
private constructor();
|
|
15
|
+
static getInstance(config?: Partial<ConsentConfig>): ConsentService;
|
|
16
|
+
initialize(config?: Partial<ConsentConfig>): ConsentService;
|
|
17
|
+
private mergeConfig;
|
|
18
|
+
private detectRegion;
|
|
19
|
+
private initializeConsentMode;
|
|
20
|
+
private getDefaultConsentParams;
|
|
21
|
+
private mapInternalToGtagConsent;
|
|
22
|
+
getConsentState(): ConsentState | null;
|
|
23
|
+
setConsent(preferences: ConsentPreferences): Promise<void>;
|
|
24
|
+
hasConsent(type: keyof ConsentPreferences): boolean;
|
|
25
|
+
getConsentModeParams(): ConsentModeParams;
|
|
26
|
+
updateGtagConsent(params: Partial<ConsentModeParams>): void;
|
|
27
|
+
setDefaultConsent(params: ConsentModeParams, region?: string | string[]): void;
|
|
28
|
+
isConsentRequired(): boolean;
|
|
29
|
+
clearConsent(): void;
|
|
30
|
+
acceptAll(): Promise<void>;
|
|
31
|
+
rejectAll(): Promise<void>;
|
|
32
|
+
onConsentChange(callback: ConsentChangeEvent): () => void;
|
|
33
|
+
updateConfig(config: Partial<ConsentConfig>): void;
|
|
34
|
+
getConfig(): ConsentConfig;
|
|
35
|
+
setRegion(region: string): void;
|
|
36
|
+
getRegion(): string | null;
|
|
37
|
+
private notifyListeners;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ConsentService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsentService.d.ts","sourceRoot":"","sources":["../../../src/consent/services/ConsentService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,eAAe,EACf,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EAEpB,MAAM,kCAAkC,CAAC;AAgD1C,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,SAAS,EAAE,GAAG,EAAE,CAAC;QACjB,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KAClC;CACJ;AAED,qBAAa,cAAe,YAAW,eAAe;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA+B;IACtD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO;IAOP,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,cAAc;IASnE,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,cAAc;IAO3D,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,wBAAwB;IAwBhC,eAAe,IAAI,YAAY,GAAG,IAAI;IAIhC,UAAU,CAAC,WAAW,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhE,UAAU,CAAC,IAAI,EAAE,MAAM,kBAAkB,GAAG,OAAO;IAMnD,oBAAoB,IAAI,iBAAiB;IAKzC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAO3D,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAiB9E,iBAAiB,IAAI,OAAO;IAK5B,YAAY,IAAI,IAAI;IAYd,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAU1B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAUhC,eAAe,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAYzD,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IASlD,SAAS,IAAI,aAAa;IAK1B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM/B,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,OAAO,CAAC,eAAe;CAS1B"}
|