@modernconsent/vendors 0.0.1
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/LICENSE +21 -0
- package/dist/abtasty-3G4JRT5W.js +21 -0
- package/dist/abtasty-3G4JRT5W.js.map +1 -0
- package/dist/abtasty.d.ts +8 -0
- package/dist/abtasty.js +53 -0
- package/dist/abtasty.js.map +1 -0
- package/dist/amplitude-CFLVTHYV.js +25 -0
- package/dist/amplitude-CFLVTHYV.js.map +1 -0
- package/dist/amplitude.d.ts +8 -0
- package/dist/amplitude.js +57 -0
- package/dist/amplitude.js.map +1 -0
- package/dist/chunk-6JXWYPMF.js +28 -0
- package/dist/chunk-6JXWYPMF.js.map +1 -0
- package/dist/chunk-TBZUWLOP.js +35 -0
- package/dist/chunk-TBZUWLOP.js.map +1 -0
- package/dist/clarity-KJPNK3FJ.js +29 -0
- package/dist/clarity-KJPNK3FJ.js.map +1 -0
- package/dist/clarity.d.ts +13 -0
- package/dist/clarity.js +39 -0
- package/dist/clarity.js.map +1 -0
- package/dist/criteo-XKQPP2XY.js +23 -0
- package/dist/criteo-XKQPP2XY.js.map +1 -0
- package/dist/criteo.d.ts +13 -0
- package/dist/criteo.js +55 -0
- package/dist/criteo.js.map +1 -0
- package/dist/gcmads-LKOHK6MW.js +23 -0
- package/dist/gcmads-LKOHK6MW.js.map +1 -0
- package/dist/gcmads.d.ts +10 -0
- package/dist/gcmads.js +33 -0
- package/dist/gcmads.js.map +1 -0
- package/dist/google-analytics-SSTM7QMW.js +37 -0
- package/dist/google-analytics-SSTM7QMW.js.map +1 -0
- package/dist/google-analytics.d.ts +14 -0
- package/dist/google-analytics.js +69 -0
- package/dist/google-analytics.js.map +1 -0
- package/dist/googleads-XPXUKIXQ.js +72 -0
- package/dist/googleads-XPXUKIXQ.js.map +1 -0
- package/dist/googleads.d.ts +14 -0
- package/dist/googleads.js +104 -0
- package/dist/googleads.js.map +1 -0
- package/dist/gtm-WFI6ABNK.js +25 -0
- package/dist/gtm-WFI6ABNK.js.map +1 -0
- package/dist/gtm.d.ts +13 -0
- package/dist/gtm.js +57 -0
- package/dist/gtm.js.map +1 -0
- package/dist/hotjar-YCFHYSKB.js +38 -0
- package/dist/hotjar-YCFHYSKB.js.map +1 -0
- package/dist/hotjar.d.ts +8 -0
- package/dist/hotjar.js +48 -0
- package/dist/hotjar.js.map +1 -0
- package/dist/hubspot-TLVPT4LG.js +31 -0
- package/dist/hubspot-TLVPT4LG.js.map +1 -0
- package/dist/hubspot.d.ts +8 -0
- package/dist/hubspot.js +63 -0
- package/dist/hubspot.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/intercom-4MUKJZOV.js +42 -0
- package/dist/intercom-4MUKJZOV.js.map +1 -0
- package/dist/intercom.d.ts +14 -0
- package/dist/intercom.js +52 -0
- package/dist/intercom.js.map +1 -0
- package/dist/linkedin-insight-EH5OICV7.js +40 -0
- package/dist/linkedin-insight-EH5OICV7.js.map +1 -0
- package/dist/linkedin-insight.d.ts +16 -0
- package/dist/linkedin-insight.js +50 -0
- package/dist/linkedin-insight.js.map +1 -0
- package/dist/matomo-H4JJCYJR.js +29 -0
- package/dist/matomo-H4JJCYJR.js.map +1 -0
- package/dist/matomo.d.ts +14 -0
- package/dist/matomo.js +39 -0
- package/dist/matomo.js.map +1 -0
- package/dist/meta-pixel-26NJ4GZJ.js +34 -0
- package/dist/meta-pixel-26NJ4GZJ.js.map +1 -0
- package/dist/meta-pixel.d.ts +19 -0
- package/dist/meta-pixel.js +66 -0
- package/dist/meta-pixel.js.map +1 -0
- package/dist/piano-analytics-CZXSQQNF.js +30 -0
- package/dist/piano-analytics-CZXSQQNF.js.map +1 -0
- package/dist/piano-analytics.d.ts +10 -0
- package/dist/piano-analytics.js +62 -0
- package/dist/piano-analytics.js.map +1 -0
- package/dist/pinterest-pixel-B7J3RCSI.js +31 -0
- package/dist/pinterest-pixel-B7J3RCSI.js.map +1 -0
- package/dist/pinterest-pixel.d.ts +16 -0
- package/dist/pinterest-pixel.js +63 -0
- package/dist/pinterest-pixel.js.map +1 -0
- package/dist/plausible-GI4L4SM4.js +25 -0
- package/dist/plausible-GI4L4SM4.js.map +1 -0
- package/dist/plausible.d.ts +11 -0
- package/dist/plausible.js +57 -0
- package/dist/plausible.js.map +1 -0
- package/dist/posthog-N2HG7XOO.js +32 -0
- package/dist/posthog-N2HG7XOO.js.map +1 -0
- package/dist/posthog.d.ts +9 -0
- package/dist/posthog.js +42 -0
- package/dist/posthog.js.map +1 -0
- package/dist/reddit-pixel-SKXRCFEF.js +34 -0
- package/dist/reddit-pixel-SKXRCFEF.js.map +1 -0
- package/dist/reddit-pixel.d.ts +16 -0
- package/dist/reddit-pixel.js +66 -0
- package/dist/reddit-pixel.js.map +1 -0
- package/dist/segment-GZJFC57W.js +66 -0
- package/dist/segment-GZJFC57W.js.map +1 -0
- package/dist/segment.d.ts +13 -0
- package/dist/segment.js +76 -0
- package/dist/segment.js.map +1 -0
- package/dist/sentry-UIBASRVZ.js +27 -0
- package/dist/sentry-UIBASRVZ.js.map +1 -0
- package/dist/sentry.d.ts +10 -0
- package/dist/sentry.js +59 -0
- package/dist/sentry.js.map +1 -0
- package/dist/smartsupp-I6XHQISS.js +27 -0
- package/dist/smartsupp-I6XHQISS.js.map +1 -0
- package/dist/smartsupp.d.ts +14 -0
- package/dist/smartsupp.js +37 -0
- package/dist/smartsupp.js.map +1 -0
- package/dist/snapchat-pixel-SYR3ZSSB.js +37 -0
- package/dist/snapchat-pixel-SYR3ZSSB.js.map +1 -0
- package/dist/snapchat-pixel.d.ts +15 -0
- package/dist/snapchat-pixel.js +47 -0
- package/dist/snapchat-pixel.js.map +1 -0
- package/dist/tiktok-pixel-FDGVKGOH.js +70 -0
- package/dist/tiktok-pixel-FDGVKGOH.js.map +1 -0
- package/dist/tiktok-pixel.d.ts +14 -0
- package/dist/tiktok-pixel.js +80 -0
- package/dist/tiktok-pixel.js.map +1 -0
- package/package.json +58 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kévin Schnekenburger
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { loadScript } from './chunk-6JXWYPMF.js';
|
|
2
|
+
import { PURPOSE_ANALYTICS } from './chunk-TBZUWLOP.js';
|
|
3
|
+
|
|
4
|
+
// src/abtasty.ts
|
|
5
|
+
var ABTasty = {
|
|
6
|
+
name: "AB Tasty",
|
|
7
|
+
category: "Analytics",
|
|
8
|
+
description: "A/B testing, feature flagging et personnalisation de l'exp\xE9rience utilisateur.",
|
|
9
|
+
...PURPOSE_ANALYTICS,
|
|
10
|
+
requireConsent: true,
|
|
11
|
+
artifacts: ["ABTasty", "ABTastySession"],
|
|
12
|
+
init: (config) => {
|
|
13
|
+
if (!config?.accountId) return;
|
|
14
|
+
loadScript(`https://try.abtasty.com/${config.accountId}.js`);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var abtasty_default = ABTasty;
|
|
18
|
+
|
|
19
|
+
export { abtasty_default as default };
|
|
20
|
+
//# sourceMappingURL=abtasty-3G4JRT5W.js.map
|
|
21
|
+
//# sourceMappingURL=abtasty-3G4JRT5W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/abtasty.ts"],"names":[],"mappings":";;;;AAQA,IAAM,OAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,UAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,mFAAA;AAAA,EACb,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,SAAA,EAAW,gBAAgB,CAAA;AAAA,EACvC,IAAA,EAAM,CAAC,MAAA,KAA0B;AAC/B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACxB,IAAA,UAAA,CAAW,CAAA,wBAAA,EAA2B,MAAA,CAAO,SAAS,CAAA,GAAA,CAAK,CAAA;AAAA,EAC7D;AACF,CAAA;AAEA,IAAO,eAAA,GAAQ","file":"abtasty-3G4JRT5W.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype ABTastyConfig = {\n accountId: string;\n};\n\nconst ABTasty: Vendor<ABTastyConfig> = {\n name: 'AB Tasty',\n category: 'Analytics',\n description: \"A/B testing, feature flagging et personnalisation de l'expérience utilisateur.\",\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['ABTasty', 'ABTastySession'],\n init: (config: ABTastyConfig) => {\n if (!config?.accountId) return;\n loadScript(`https://try.abtasty.com/${config.accountId}.js`);\n },\n};\n\nexport default ABTasty;\n"]}
|
package/dist/abtasty.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// src/utils/loader.ts
|
|
2
|
+
function loadScript(src, callback, attrs = {}) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
if (document.querySelector(`script[src="${src}"]`)) {
|
|
5
|
+
resolve();
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const script = document.createElement("script");
|
|
9
|
+
script.src = src;
|
|
10
|
+
script.async = true;
|
|
11
|
+
for (const [key, value] of Object.entries(attrs)) {
|
|
12
|
+
script.setAttribute(key, value);
|
|
13
|
+
}
|
|
14
|
+
script.onload = () => {
|
|
15
|
+
resolve();
|
|
16
|
+
};
|
|
17
|
+
script.onerror = () => {
|
|
18
|
+
reject(new Error(`Failed to load script: ${src}`));
|
|
19
|
+
};
|
|
20
|
+
document.head.appendChild(script);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// src/utils/purposes.ts
|
|
25
|
+
var PURPOSE_ANALYTICS = {
|
|
26
|
+
purposeLabel: {
|
|
27
|
+
fr: "Analyse de session utilisateur et mesure d'audience",
|
|
28
|
+
en: "User session analysis and audience measurement"
|
|
29
|
+
},
|
|
30
|
+
purposeDescription: {
|
|
31
|
+
fr: "Ces cookies nous permettent d'\xE9tablir des statistiques et volumes de fr\xE9quentation et d'utilisation des \xE9l\xE9ments du site.",
|
|
32
|
+
en: "These cookies allow us to compile statistics on site traffic and usage."
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// src/abtasty.ts
|
|
37
|
+
var ABTasty = {
|
|
38
|
+
name: "AB Tasty",
|
|
39
|
+
category: "Analytics",
|
|
40
|
+
description: "A/B testing, feature flagging et personnalisation de l'exp\xE9rience utilisateur.",
|
|
41
|
+
...PURPOSE_ANALYTICS,
|
|
42
|
+
requireConsent: true,
|
|
43
|
+
artifacts: ["ABTasty", "ABTastySession"],
|
|
44
|
+
init: (config) => {
|
|
45
|
+
if (!config?.accountId) return;
|
|
46
|
+
loadScript(`https://try.abtasty.com/${config.accountId}.js`);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var abtasty_default = ABTasty;
|
|
50
|
+
|
|
51
|
+
export { abtasty_default as default };
|
|
52
|
+
//# sourceMappingURL=abtasty.js.map
|
|
53
|
+
//# sourceMappingURL=abtasty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/loader.ts","../src/utils/purposes.ts","../src/abtasty.ts"],"names":[],"mappings":";AAAO,SAAS,UAAA,CACd,GAAA,EACA,QAAA,EACA,KAAA,GAAgC,EAAC,EAClB;AACf,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAItC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AAER,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAEf,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,OAAA,EAAQ;AACG,IACb,CAAA;AAEA,IAAA,MAAA,CAAO,UAAU,MAAM;AACrB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,GAAG,EAAE,CAAC,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;;;AC5BO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,qDAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,uIAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;ACNA,IAAM,OAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,UAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,mFAAA;AAAA,EACb,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,SAAA,EAAW,gBAAgB,CAAA;AAAA,EACvC,IAAA,EAAM,CAAC,MAAA,KAA0B;AAC/B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACxB,IAAA,UAAA,CAAW,CAAA,wBAAA,EAA2B,MAAA,CAAO,SAAS,CAAA,GAAA,CAAK,CAAA;AAAA,EAC7D;AACF,CAAA;AAEA,IAAO,eAAA,GAAQ","file":"abtasty.js","sourcesContent":["export function loadScript(\n src: string,\n callback?: () => void,\n attrs: Record<string, string> = {},\n): Promise<void> {\n return new Promise((resolve, reject) => {\n /**\n * check if already loaded.\n */\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve();\n callback?.();\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n for (const [key, value] of Object.entries(attrs)) {\n script.setAttribute(key, value);\n }\n\n script.onload = () => {\n resolve();\n callback?.();\n };\n\n script.onerror = () => {\n reject(new Error(`Failed to load script: ${src}`));\n };\n document.head.appendChild(script);\n });\n}\n","/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype ABTastyConfig = {\n accountId: string;\n};\n\nconst ABTasty: Vendor<ABTastyConfig> = {\n name: 'AB Tasty',\n category: 'Analytics',\n description: \"A/B testing, feature flagging et personnalisation de l'expérience utilisateur.\",\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['ABTasty', 'ABTastySession'],\n init: (config: ABTastyConfig) => {\n if (!config?.accountId) return;\n loadScript(`https://try.abtasty.com/${config.accountId}.js`);\n },\n};\n\nexport default ABTasty;\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { loadScript } from './chunk-6JXWYPMF.js';
|
|
2
|
+
import { PURPOSE_ANALYTICS } from './chunk-TBZUWLOP.js';
|
|
3
|
+
|
|
4
|
+
// src/amplitude.ts
|
|
5
|
+
var Amplitude = {
|
|
6
|
+
name: "Amplitude",
|
|
7
|
+
category: "Analytics",
|
|
8
|
+
description: "Analyse produit : \xE9v\xE9nements, funnels, cohortes et r\xE9tention utilisateur.",
|
|
9
|
+
...PURPOSE_ANALYTICS,
|
|
10
|
+
requireConsent: true,
|
|
11
|
+
artifacts: ["amp_", "AMP_unsent"],
|
|
12
|
+
init: (config) => {
|
|
13
|
+
if (!config?.apiKey) return;
|
|
14
|
+
loadScript("https://cdn.amplitude.com/libs/analytics-browser-2.11.1-min.js.gz").then(() => {
|
|
15
|
+
if (window.amplitude) {
|
|
16
|
+
window.amplitude.init(config.apiKey);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var amplitude_default = Amplitude;
|
|
22
|
+
|
|
23
|
+
export { amplitude_default as default };
|
|
24
|
+
//# sourceMappingURL=amplitude-CFLVTHYV.js.map
|
|
25
|
+
//# sourceMappingURL=amplitude-CFLVTHYV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/amplitude.ts"],"names":[],"mappings":";;;;AAQA,IAAM,SAAA,GAAqC;AAAA,EACzC,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,oFAAA;AAAA,EACb,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,EAChC,IAAA,EAAM,CAAC,MAAA,KAA4B;AACjC,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,IAAA,UAAA,CAAW,mEAAmE,CAAA,CAAE,IAAA,CAAK,MAAM;AACzF,MAAA,IAAK,OAAe,SAAA,EAAW;AAC7B,QAAC,MAAA,CAAe,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC9C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,iBAAA,GAAQ","file":"amplitude-CFLVTHYV.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype AmplitudeConfig = {\n apiKey: string;\n};\n\nconst Amplitude: Vendor<AmplitudeConfig> = {\n name: 'Amplitude',\n category: 'Analytics',\n description: 'Analyse produit : événements, funnels, cohortes et rétention utilisateur.',\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['amp_', 'AMP_unsent'],\n init: (config: AmplitudeConfig) => {\n if (!config?.apiKey) return;\n\n loadScript('https://cdn.amplitude.com/libs/analytics-browser-2.11.1-min.js.gz').then(() => {\n if ((window as any).amplitude) {\n (window as any).amplitude.init(config.apiKey);\n }\n });\n },\n};\n\nexport default Amplitude;\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// src/utils/loader.ts
|
|
2
|
+
function loadScript(src, callback, attrs = {}) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
if (document.querySelector(`script[src="${src}"]`)) {
|
|
5
|
+
resolve();
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const script = document.createElement("script");
|
|
9
|
+
script.src = src;
|
|
10
|
+
script.async = true;
|
|
11
|
+
for (const [key, value] of Object.entries(attrs)) {
|
|
12
|
+
script.setAttribute(key, value);
|
|
13
|
+
}
|
|
14
|
+
script.onload = () => {
|
|
15
|
+
resolve();
|
|
16
|
+
};
|
|
17
|
+
script.onerror = () => {
|
|
18
|
+
reject(new Error(`Failed to load script: ${src}`));
|
|
19
|
+
};
|
|
20
|
+
document.head.appendChild(script);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// src/utils/purposes.ts
|
|
25
|
+
var PURPOSE_ANALYTICS = {
|
|
26
|
+
purposeLabel: {
|
|
27
|
+
fr: "Analyse de session utilisateur et mesure d'audience",
|
|
28
|
+
en: "User session analysis and audience measurement"
|
|
29
|
+
},
|
|
30
|
+
purposeDescription: {
|
|
31
|
+
fr: "Ces cookies nous permettent d'\xE9tablir des statistiques et volumes de fr\xE9quentation et d'utilisation des \xE9l\xE9ments du site.",
|
|
32
|
+
en: "These cookies allow us to compile statistics on site traffic and usage."
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// src/amplitude.ts
|
|
37
|
+
var Amplitude = {
|
|
38
|
+
name: "Amplitude",
|
|
39
|
+
category: "Analytics",
|
|
40
|
+
description: "Analyse produit : \xE9v\xE9nements, funnels, cohortes et r\xE9tention utilisateur.",
|
|
41
|
+
...PURPOSE_ANALYTICS,
|
|
42
|
+
requireConsent: true,
|
|
43
|
+
artifacts: ["amp_", "AMP_unsent"],
|
|
44
|
+
init: (config) => {
|
|
45
|
+
if (!config?.apiKey) return;
|
|
46
|
+
loadScript("https://cdn.amplitude.com/libs/analytics-browser-2.11.1-min.js.gz").then(() => {
|
|
47
|
+
if (window.amplitude) {
|
|
48
|
+
window.amplitude.init(config.apiKey);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
var amplitude_default = Amplitude;
|
|
54
|
+
|
|
55
|
+
export { amplitude_default as default };
|
|
56
|
+
//# sourceMappingURL=amplitude.js.map
|
|
57
|
+
//# sourceMappingURL=amplitude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/loader.ts","../src/utils/purposes.ts","../src/amplitude.ts"],"names":[],"mappings":";AAAO,SAAS,UAAA,CACd,GAAA,EACA,QAAA,EACA,KAAA,GAAgC,EAAC,EAClB;AACf,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAItC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AAER,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAEf,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,OAAA,EAAQ;AACG,IACb,CAAA;AAEA,IAAA,MAAA,CAAO,UAAU,MAAM;AACrB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,GAAG,EAAE,CAAC,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;;;AC5BO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,qDAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,uIAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;ACNA,IAAM,SAAA,GAAqC;AAAA,EACzC,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,oFAAA;AAAA,EACb,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,EAChC,IAAA,EAAM,CAAC,MAAA,KAA4B;AACjC,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,IAAA,UAAA,CAAW,mEAAmE,CAAA,CAAE,IAAA,CAAK,MAAM;AACzF,MAAA,IAAK,OAAe,SAAA,EAAW;AAC7B,QAAC,MAAA,CAAe,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC9C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,iBAAA,GAAQ","file":"amplitude.js","sourcesContent":["export function loadScript(\n src: string,\n callback?: () => void,\n attrs: Record<string, string> = {},\n): Promise<void> {\n return new Promise((resolve, reject) => {\n /**\n * check if already loaded.\n */\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve();\n callback?.();\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n for (const [key, value] of Object.entries(attrs)) {\n script.setAttribute(key, value);\n }\n\n script.onload = () => {\n resolve();\n callback?.();\n };\n\n script.onerror = () => {\n reject(new Error(`Failed to load script: ${src}`));\n };\n document.head.appendChild(script);\n });\n}\n","/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype AmplitudeConfig = {\n apiKey: string;\n};\n\nconst Amplitude: Vendor<AmplitudeConfig> = {\n name: 'Amplitude',\n category: 'Analytics',\n description: 'Analyse produit : événements, funnels, cohortes et rétention utilisateur.',\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['amp_', 'AMP_unsent'],\n init: (config: AmplitudeConfig) => {\n if (!config?.apiKey) return;\n\n loadScript('https://cdn.amplitude.com/libs/analytics-browser-2.11.1-min.js.gz').then(() => {\n if ((window as any).amplitude) {\n (window as any).amplitude.init(config.apiKey);\n }\n });\n },\n};\n\nexport default Amplitude;\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// src/utils/loader.ts
|
|
2
|
+
function loadScript(src, callback, attrs = {}) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
if (document.querySelector(`script[src="${src}"]`)) {
|
|
5
|
+
resolve();
|
|
6
|
+
callback?.();
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const script = document.createElement("script");
|
|
10
|
+
script.src = src;
|
|
11
|
+
script.async = true;
|
|
12
|
+
for (const [key, value] of Object.entries(attrs)) {
|
|
13
|
+
script.setAttribute(key, value);
|
|
14
|
+
}
|
|
15
|
+
script.onload = () => {
|
|
16
|
+
resolve();
|
|
17
|
+
callback?.();
|
|
18
|
+
};
|
|
19
|
+
script.onerror = () => {
|
|
20
|
+
reject(new Error(`Failed to load script: ${src}`));
|
|
21
|
+
};
|
|
22
|
+
document.head.appendChild(script);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { loadScript };
|
|
27
|
+
//# sourceMappingURL=chunk-6JXWYPMF.js.map
|
|
28
|
+
//# sourceMappingURL=chunk-6JXWYPMF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/loader.ts"],"names":[],"mappings":";AAAO,SAAS,UAAA,CACd,GAAA,EACA,QAAA,EACA,KAAA,GAAgC,EAAC,EAClB;AACf,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAItC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AACR,MAAA,QAAA,IAAW;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAEf,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,OAAA,EAAQ;AACR,MAAA,QAAA,IAAW;AAAA,IACb,CAAA;AAEA,IAAA,MAAA,CAAO,UAAU,MAAM;AACrB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,GAAG,EAAE,CAAC,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH","file":"chunk-6JXWYPMF.js","sourcesContent":["export function loadScript(\n src: string,\n callback?: () => void,\n attrs: Record<string, string> = {},\n): Promise<void> {\n return new Promise((resolve, reject) => {\n /**\n * check if already loaded.\n */\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve();\n callback?.();\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n for (const [key, value] of Object.entries(attrs)) {\n script.setAttribute(key, value);\n }\n\n script.onload = () => {\n resolve();\n callback?.();\n };\n\n script.onerror = () => {\n reject(new Error(`Failed to load script: ${src}`));\n };\n document.head.appendChild(script);\n });\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/utils/purposes.ts
|
|
2
|
+
var PURPOSE_ANALYTICS = {
|
|
3
|
+
purposeLabel: {
|
|
4
|
+
fr: "Analyse de session utilisateur et mesure d'audience",
|
|
5
|
+
en: "User session analysis and audience measurement"
|
|
6
|
+
},
|
|
7
|
+
purposeDescription: {
|
|
8
|
+
fr: "Ces cookies nous permettent d'\xE9tablir des statistiques et volumes de fr\xE9quentation et d'utilisation des \xE9l\xE9ments du site.",
|
|
9
|
+
en: "These cookies allow us to compile statistics on site traffic and usage."
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var PURPOSE_ADS = {
|
|
13
|
+
purposeLabel: {
|
|
14
|
+
fr: "Ciblage publicitaire",
|
|
15
|
+
en: "Advertising targeting"
|
|
16
|
+
},
|
|
17
|
+
purposeDescription: {
|
|
18
|
+
fr: "Ces cookies sont utilis\xE9s pour vous proposer des publicit\xE9s personnalis\xE9es en fonction de votre navigation.",
|
|
19
|
+
en: "These cookies are used to deliver personalized ads based on your browsing behavior."
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var PURPOSE_SUPPORT = {
|
|
23
|
+
purposeLabel: {
|
|
24
|
+
fr: "Support et assistance",
|
|
25
|
+
en: "Support and assistance"
|
|
26
|
+
},
|
|
27
|
+
purposeDescription: {
|
|
28
|
+
fr: "Ces cookies permettent d'interagir avec notre service client et de b\xE9n\xE9ficier d'une assistance en direct.",
|
|
29
|
+
en: "These cookies enable interaction with our customer support and provide live assistance."
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export { PURPOSE_ADS, PURPOSE_ANALYTICS, PURPOSE_SUPPORT };
|
|
34
|
+
//# sourceMappingURL=chunk-TBZUWLOP.js.map
|
|
35
|
+
//# sourceMappingURL=chunk-TBZUWLOP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/purposes.ts"],"names":[],"mappings":";AAKO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,qDAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,uIAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,sBAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,sHAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER;AAEO,IAAM,eAAA,GAAkB;AAAA,EAC7B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,uBAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,iHAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER","file":"chunk-TBZUWLOP.js","sourcesContent":["/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { PURPOSE_ANALYTICS } from './chunk-TBZUWLOP.js';
|
|
2
|
+
|
|
3
|
+
// src/clarity.ts
|
|
4
|
+
var Clarity = {
|
|
5
|
+
name: "Microsoft Clarity",
|
|
6
|
+
category: "Analytics",
|
|
7
|
+
description: "Enregistrement de sessions et cartes de chaleur pour comprendre le comportement des utilisateurs.",
|
|
8
|
+
...PURPOSE_ANALYTICS,
|
|
9
|
+
requireConsent: true,
|
|
10
|
+
artifacts: ["_clck", "_clsk", "CLID", "ANONCHK", "MR", "MUID", "SM"],
|
|
11
|
+
init: (config) => {
|
|
12
|
+
if (!config?.projectId) return;
|
|
13
|
+
(function(c, l, a, r, i) {
|
|
14
|
+
c[a] = c[a] || function(...args) {
|
|
15
|
+
(c[a].q = c[a].q || []).push(args);
|
|
16
|
+
};
|
|
17
|
+
const t = l.createElement(r);
|
|
18
|
+
t.async = true;
|
|
19
|
+
t.src = "https://www.clarity.ms/tag/" + i;
|
|
20
|
+
const y = l.getElementsByTagName(r)[0];
|
|
21
|
+
y.parentNode.insertBefore(t, y);
|
|
22
|
+
})(window, document, "clarity", "script", config.projectId);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
var clarity_default = Clarity;
|
|
26
|
+
|
|
27
|
+
export { clarity_default as default };
|
|
28
|
+
//# sourceMappingURL=clarity-KJPNK3FJ.js.map
|
|
29
|
+
//# sourceMappingURL=clarity-KJPNK3FJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/clarity.ts"],"names":[],"mappings":";;;AAaA,IAAM,OAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,mBAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EACE,mGAAA;AAAA,EACF,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,OAAA,EAAS,OAAA,EAAS,QAAQ,SAAA,EAAW,IAAA,EAAM,QAAQ,IAAI,CAAA;AAAA,EACnE,IAAA,EAAM,CAAC,MAAA,KAA0B;AAC/B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AAExB,IAAA,CAAC,SAAU,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAQ,GAAW,CAAA,EAAW;AACvD,MAAA,CAAA,CAAE,CAAC,CAAA,GACD,CAAA,CAAE,CAAC,CAAA,IACH,YAAa,IAAA,EAAa;AACxB,QAAA,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,IAAK,EAAC,EAAG,IAAA,CAAK,IAAI,CAAA;AAAA,MACnC,CAAA;AACF,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,aAAA,CAAc,CAAC,CAAA;AAC3B,MAAA,CAAA,CAAE,KAAA,GAAQ,IAAA;AACV,MAAA,CAAA,CAAE,MAAM,6BAAA,GAAgC,CAAA;AACxC,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,oBAAA,CAAqB,CAAC,EAAE,CAAC,CAAA;AACrC,MAAA,CAAA,CAAE,UAAA,CAAY,YAAA,CAAa,CAAA,EAAG,CAAC,CAAA;AAAA,IACjC,GAAG,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,OAAO,SAAS,CAAA;AAAA,EAC5D;AACF,CAAA;AAEA,IAAO,eAAA,GAAQ","file":"clarity-KJPNK3FJ.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype ClarityConfig = {\n projectId: string;\n};\n\ndeclare global {\n interface Window {\n clarity: (...args: any[]) => void;\n }\n}\n\nconst Clarity: Vendor<ClarityConfig> = {\n name: 'Microsoft Clarity',\n category: 'Analytics',\n description:\n 'Enregistrement de sessions et cartes de chaleur pour comprendre le comportement des utilisateurs.',\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['_clck', '_clsk', 'CLID', 'ANONCHK', 'MR', 'MUID', 'SM'],\n init: (config: ClarityConfig) => {\n if (!config?.projectId) return;\n\n (function (c: any, l: any, a: any, r: string, i: string) {\n c[a] =\n c[a] ||\n function (...args: any[]) {\n (c[a].q = c[a].q || []).push(args);\n };\n const t = l.createElement(r) as HTMLScriptElement;\n t.async = true;\n t.src = 'https://www.clarity.ms/tag/' + i;\n const y = l.getElementsByTagName(r)[0] as HTMLScriptElement;\n y.parentNode!.insertBefore(t, y);\n })(window, document, 'clarity', 'script', config.projectId);\n },\n};\n\nexport default Clarity;\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Vendor } from '@modernconsent/core';
|
|
2
|
+
|
|
3
|
+
type ClarityConfig = {
|
|
4
|
+
projectId: string;
|
|
5
|
+
};
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
clarity: (...args: any[]) => void;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
declare const Clarity: Vendor<ClarityConfig>;
|
|
12
|
+
|
|
13
|
+
export { Clarity as default };
|
package/dist/clarity.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// src/utils/purposes.ts
|
|
2
|
+
var PURPOSE_ANALYTICS = {
|
|
3
|
+
purposeLabel: {
|
|
4
|
+
fr: "Analyse de session utilisateur et mesure d'audience",
|
|
5
|
+
en: "User session analysis and audience measurement"
|
|
6
|
+
},
|
|
7
|
+
purposeDescription: {
|
|
8
|
+
fr: "Ces cookies nous permettent d'\xE9tablir des statistiques et volumes de fr\xE9quentation et d'utilisation des \xE9l\xE9ments du site.",
|
|
9
|
+
en: "These cookies allow us to compile statistics on site traffic and usage."
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// src/clarity.ts
|
|
14
|
+
var Clarity = {
|
|
15
|
+
name: "Microsoft Clarity",
|
|
16
|
+
category: "Analytics",
|
|
17
|
+
description: "Enregistrement de sessions et cartes de chaleur pour comprendre le comportement des utilisateurs.",
|
|
18
|
+
...PURPOSE_ANALYTICS,
|
|
19
|
+
requireConsent: true,
|
|
20
|
+
artifacts: ["_clck", "_clsk", "CLID", "ANONCHK", "MR", "MUID", "SM"],
|
|
21
|
+
init: (config) => {
|
|
22
|
+
if (!config?.projectId) return;
|
|
23
|
+
(function(c, l, a, r, i) {
|
|
24
|
+
c[a] = c[a] || function(...args) {
|
|
25
|
+
(c[a].q = c[a].q || []).push(args);
|
|
26
|
+
};
|
|
27
|
+
const t = l.createElement(r);
|
|
28
|
+
t.async = true;
|
|
29
|
+
t.src = "https://www.clarity.ms/tag/" + i;
|
|
30
|
+
const y = l.getElementsByTagName(r)[0];
|
|
31
|
+
y.parentNode.insertBefore(t, y);
|
|
32
|
+
})(window, document, "clarity", "script", config.projectId);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
var clarity_default = Clarity;
|
|
36
|
+
|
|
37
|
+
export { clarity_default as default };
|
|
38
|
+
//# sourceMappingURL=clarity.js.map
|
|
39
|
+
//# sourceMappingURL=clarity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/purposes.ts","../src/clarity.ts"],"names":[],"mappings":";AAKO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,qDAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,uIAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;ACDA,IAAM,OAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,mBAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EACE,mGAAA;AAAA,EACF,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,OAAA,EAAS,OAAA,EAAS,QAAQ,SAAA,EAAW,IAAA,EAAM,QAAQ,IAAI,CAAA;AAAA,EACnE,IAAA,EAAM,CAAC,MAAA,KAA0B;AAC/B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AAExB,IAAA,CAAC,SAAU,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAQ,GAAW,CAAA,EAAW;AACvD,MAAA,CAAA,CAAE,CAAC,CAAA,GACD,CAAA,CAAE,CAAC,CAAA,IACH,YAAa,IAAA,EAAa;AACxB,QAAA,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,IAAK,EAAC,EAAG,IAAA,CAAK,IAAI,CAAA;AAAA,MACnC,CAAA;AACF,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,aAAA,CAAc,CAAC,CAAA;AAC3B,MAAA,CAAA,CAAE,KAAA,GAAQ,IAAA;AACV,MAAA,CAAA,CAAE,MAAM,6BAAA,GAAgC,CAAA;AACxC,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,oBAAA,CAAqB,CAAC,EAAE,CAAC,CAAA;AACrC,MAAA,CAAA,CAAE,UAAA,CAAY,YAAA,CAAa,CAAA,EAAG,CAAC,CAAA;AAAA,IACjC,GAAG,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,OAAO,SAAS,CAAA;AAAA,EAC5D;AACF,CAAA;AAEA,IAAO,eAAA,GAAQ","file":"clarity.js","sourcesContent":["/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype ClarityConfig = {\n projectId: string;\n};\n\ndeclare global {\n interface Window {\n clarity: (...args: any[]) => void;\n }\n}\n\nconst Clarity: Vendor<ClarityConfig> = {\n name: 'Microsoft Clarity',\n category: 'Analytics',\n description:\n 'Enregistrement de sessions et cartes de chaleur pour comprendre le comportement des utilisateurs.',\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['_clck', '_clsk', 'CLID', 'ANONCHK', 'MR', 'MUID', 'SM'],\n init: (config: ClarityConfig) => {\n if (!config?.projectId) return;\n\n (function (c: any, l: any, a: any, r: string, i: string) {\n c[a] =\n c[a] ||\n function (...args: any[]) {\n (c[a].q = c[a].q || []).push(args);\n };\n const t = l.createElement(r) as HTMLScriptElement;\n t.async = true;\n t.src = 'https://www.clarity.ms/tag/' + i;\n const y = l.getElementsByTagName(r)[0] as HTMLScriptElement;\n y.parentNode!.insertBefore(t, y);\n })(window, document, 'clarity', 'script', config.projectId);\n },\n};\n\nexport default Clarity;\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { loadScript } from './chunk-6JXWYPMF.js';
|
|
2
|
+
import { PURPOSE_ADS } from './chunk-TBZUWLOP.js';
|
|
3
|
+
|
|
4
|
+
// src/criteo.ts
|
|
5
|
+
var Criteo = {
|
|
6
|
+
name: "Criteo",
|
|
7
|
+
category: "Publicit\xE9",
|
|
8
|
+
description: "Reciblage publicitaire et annonces display dynamiques.",
|
|
9
|
+
...PURPOSE_ADS,
|
|
10
|
+
requireConsent: true,
|
|
11
|
+
artifacts: ["cto_bundle", "cto_bidid", "cto_optout", "criteo_write_test"],
|
|
12
|
+
init: (config) => {
|
|
13
|
+
if (!config?.accountId) return;
|
|
14
|
+
window.criteo_q = window.criteo_q || [];
|
|
15
|
+
window.criteo_q.push({ event: "setAccount", account: config.accountId }, { event: "viewPage" });
|
|
16
|
+
loadScript("https://static.criteo.net/js/ld/ld.js", void 0, { async: "true" });
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
var criteo_default = Criteo;
|
|
20
|
+
|
|
21
|
+
export { criteo_default as default };
|
|
22
|
+
//# sourceMappingURL=criteo-XKQPP2XY.js.map
|
|
23
|
+
//# sourceMappingURL=criteo-XKQPP2XY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/criteo.ts"],"names":[],"mappings":";;;;AAcA,IAAM,MAAA,GAA+B;AAAA,EACnC,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,wDAAA;AAAA,EACb,GAAG,WAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,YAAA,EAAc,WAAA,EAAa,cAAc,mBAAmB,CAAA;AAAA,EACxE,IAAA,EAAM,CAAC,MAAA,KAAyB;AAC9B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AAExB,IAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,IAAY,EAAC;AACtC,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,YAAA,EAAc,OAAA,EAAS,MAAA,CAAO,SAAA,EAAU,EAAG,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AAE9F,IAAA,UAAA,CAAW,uCAAA,EAAyC,MAAA,EAAW,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,EAClF;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ","file":"criteo-XKQPP2XY.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ADS } from './utils/purposes';\n\ntype CriteoConfig = {\n accountId: string;\n};\n\ndeclare global {\n interface Window {\n criteo_q: any[];\n }\n}\n\nconst Criteo: Vendor<CriteoConfig> = {\n name: 'Criteo',\n category: 'Publicité',\n description: 'Reciblage publicitaire et annonces display dynamiques.',\n ...PURPOSE_ADS,\n requireConsent: true,\n artifacts: ['cto_bundle', 'cto_bidid', 'cto_optout', 'criteo_write_test'],\n init: (config: CriteoConfig) => {\n if (!config?.accountId) return;\n\n window.criteo_q = window.criteo_q || [];\n window.criteo_q.push({ event: 'setAccount', account: config.accountId }, { event: 'viewPage' });\n\n loadScript('https://static.criteo.net/js/ld/ld.js', undefined, { async: 'true' });\n },\n};\n\nexport default Criteo;\n"]}
|
package/dist/criteo.d.ts
ADDED
package/dist/criteo.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// src/utils/loader.ts
|
|
2
|
+
function loadScript(src, callback, attrs = {}) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
if (document.querySelector(`script[src="${src}"]`)) {
|
|
5
|
+
resolve();
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const script = document.createElement("script");
|
|
9
|
+
script.src = src;
|
|
10
|
+
script.async = true;
|
|
11
|
+
for (const [key, value] of Object.entries(attrs)) {
|
|
12
|
+
script.setAttribute(key, value);
|
|
13
|
+
}
|
|
14
|
+
script.onload = () => {
|
|
15
|
+
resolve();
|
|
16
|
+
};
|
|
17
|
+
script.onerror = () => {
|
|
18
|
+
reject(new Error(`Failed to load script: ${src}`));
|
|
19
|
+
};
|
|
20
|
+
document.head.appendChild(script);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// src/utils/purposes.ts
|
|
25
|
+
var PURPOSE_ADS = {
|
|
26
|
+
purposeLabel: {
|
|
27
|
+
fr: "Ciblage publicitaire",
|
|
28
|
+
en: "Advertising targeting"
|
|
29
|
+
},
|
|
30
|
+
purposeDescription: {
|
|
31
|
+
fr: "Ces cookies sont utilis\xE9s pour vous proposer des publicit\xE9s personnalis\xE9es en fonction de votre navigation.",
|
|
32
|
+
en: "These cookies are used to deliver personalized ads based on your browsing behavior."
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// src/criteo.ts
|
|
37
|
+
var Criteo = {
|
|
38
|
+
name: "Criteo",
|
|
39
|
+
category: "Publicit\xE9",
|
|
40
|
+
description: "Reciblage publicitaire et annonces display dynamiques.",
|
|
41
|
+
...PURPOSE_ADS,
|
|
42
|
+
requireConsent: true,
|
|
43
|
+
artifacts: ["cto_bundle", "cto_bidid", "cto_optout", "criteo_write_test"],
|
|
44
|
+
init: (config) => {
|
|
45
|
+
if (!config?.accountId) return;
|
|
46
|
+
window.criteo_q = window.criteo_q || [];
|
|
47
|
+
window.criteo_q.push({ event: "setAccount", account: config.accountId }, { event: "viewPage" });
|
|
48
|
+
loadScript("https://static.criteo.net/js/ld/ld.js", void 0, { async: "true" });
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var criteo_default = Criteo;
|
|
52
|
+
|
|
53
|
+
export { criteo_default as default };
|
|
54
|
+
//# sourceMappingURL=criteo.js.map
|
|
55
|
+
//# sourceMappingURL=criteo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/loader.ts","../src/utils/purposes.ts","../src/criteo.ts"],"names":[],"mappings":";AAAO,SAAS,UAAA,CACd,GAAA,EACA,QAAA,EACA,KAAA,GAAgC,EAAC,EAClB;AACf,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAItC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AAER,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAEf,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,OAAA,EAAQ;AACG,IACb,CAAA;AAEA,IAAA,MAAA,CAAO,UAAU,MAAM;AACrB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,GAAG,EAAE,CAAC,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;;;ACjBO,IAAM,WAAA,GAAc;AAAA,EACzB,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,sBAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,sHAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;ACXA,IAAM,MAAA,GAA+B;AAAA,EACnC,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,wDAAA;AAAA,EACb,GAAG,WAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,YAAA,EAAc,WAAA,EAAa,cAAc,mBAAmB,CAAA;AAAA,EACxE,IAAA,EAAM,CAAC,MAAA,KAAyB;AAC9B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AAExB,IAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,IAAY,EAAC;AACtC,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,YAAA,EAAc,OAAA,EAAS,MAAA,CAAO,SAAA,EAAU,EAAG,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AAE9F,IAAA,UAAA,CAAW,uCAAA,EAAyC,MAAA,EAAW,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,EAClF;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ","file":"criteo.js","sourcesContent":["export function loadScript(\n src: string,\n callback?: () => void,\n attrs: Record<string, string> = {},\n): Promise<void> {\n return new Promise((resolve, reject) => {\n /**\n * check if already loaded.\n */\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve();\n callback?.();\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n for (const [key, value] of Object.entries(attrs)) {\n script.setAttribute(key, value);\n }\n\n script.onload = () => {\n resolve();\n callback?.();\n };\n\n script.onerror = () => {\n reject(new Error(`Failed to load script: ${src}`));\n };\n document.head.appendChild(script);\n });\n}\n","/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ADS } from './utils/purposes';\n\ntype CriteoConfig = {\n accountId: string;\n};\n\ndeclare global {\n interface Window {\n criteo_q: any[];\n }\n}\n\nconst Criteo: Vendor<CriteoConfig> = {\n name: 'Criteo',\n category: 'Publicité',\n description: 'Reciblage publicitaire et annonces display dynamiques.',\n ...PURPOSE_ADS,\n requireConsent: true,\n artifacts: ['cto_bundle', 'cto_bidid', 'cto_optout', 'criteo_write_test'],\n init: (config: CriteoConfig) => {\n if (!config?.accountId) return;\n\n window.criteo_q = window.criteo_q || [];\n window.criteo_q.push({ event: 'setAccount', account: config.accountId }, { event: 'viewPage' });\n\n loadScript('https://static.criteo.net/js/ld/ld.js', undefined, { async: 'true' });\n },\n};\n\nexport default Criteo;\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { PURPOSE_ADS } from './chunk-TBZUWLOP.js';
|
|
2
|
+
|
|
3
|
+
// src/gcmads.ts
|
|
4
|
+
var GCMAds = {
|
|
5
|
+
name: "Google Ads (Personnalis\xE9s)",
|
|
6
|
+
category: "Publicit\xE9",
|
|
7
|
+
description: "Active la personnalisation des publicit\xE9s via Google Consent Mode.",
|
|
8
|
+
...PURPOSE_ADS,
|
|
9
|
+
requireConsent: true,
|
|
10
|
+
init: () => {
|
|
11
|
+
if (typeof window.gtag === "function") {
|
|
12
|
+
window.gtag("consent", "update", {
|
|
13
|
+
ad_personalization: "granted",
|
|
14
|
+
ad_user_data: "granted"
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
var gcmads_default = GCMAds;
|
|
20
|
+
|
|
21
|
+
export { gcmads_default as default };
|
|
22
|
+
//# sourceMappingURL=gcmads-LKOHK6MW.js.map
|
|
23
|
+
//# sourceMappingURL=gcmads-LKOHK6MW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/gcmads.ts"],"names":[],"mappings":";;;AASA,IAAM,MAAA,GAAiB;AAAA,EACrB,IAAA,EAAM,+BAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,uEAAA;AAAA,EACb,GAAG,WAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,MAAM,MAAM;AACV,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AACrC,MAAA,MAAA,CAAO,IAAA,CAAK,WAAW,QAAA,EAAU;AAAA,QAC/B,kBAAA,EAAoB,SAAA;AAAA,QACpB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ","file":"gcmads-LKOHK6MW.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { PURPOSE_ADS } from './utils/purposes';\n\ndeclare global {\n interface Window {\n gtag: (...args: any[]) => void;\n }\n}\n\nconst GCMAds: Vendor = {\n name: 'Google Ads (Personnalisés)',\n category: 'Publicité',\n description: 'Active la personnalisation des publicités via Google Consent Mode.',\n ...PURPOSE_ADS,\n requireConsent: true,\n init: () => {\n if (typeof window.gtag === 'function') {\n window.gtag('consent', 'update', {\n ad_personalization: 'granted',\n ad_user_data: 'granted',\n });\n }\n },\n};\n\nexport default GCMAds;\n"]}
|
package/dist/gcmads.d.ts
ADDED
package/dist/gcmads.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// src/utils/purposes.ts
|
|
2
|
+
var PURPOSE_ADS = {
|
|
3
|
+
purposeLabel: {
|
|
4
|
+
fr: "Ciblage publicitaire",
|
|
5
|
+
en: "Advertising targeting"
|
|
6
|
+
},
|
|
7
|
+
purposeDescription: {
|
|
8
|
+
fr: "Ces cookies sont utilis\xE9s pour vous proposer des publicit\xE9s personnalis\xE9es en fonction de votre navigation.",
|
|
9
|
+
en: "These cookies are used to deliver personalized ads based on your browsing behavior."
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// src/gcmads.ts
|
|
14
|
+
var GCMAds = {
|
|
15
|
+
name: "Google Ads (Personnalis\xE9s)",
|
|
16
|
+
category: "Publicit\xE9",
|
|
17
|
+
description: "Active la personnalisation des publicit\xE9s via Google Consent Mode.",
|
|
18
|
+
...PURPOSE_ADS,
|
|
19
|
+
requireConsent: true,
|
|
20
|
+
init: () => {
|
|
21
|
+
if (typeof window.gtag === "function") {
|
|
22
|
+
window.gtag("consent", "update", {
|
|
23
|
+
ad_personalization: "granted",
|
|
24
|
+
ad_user_data: "granted"
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var gcmads_default = GCMAds;
|
|
30
|
+
|
|
31
|
+
export { gcmads_default as default };
|
|
32
|
+
//# sourceMappingURL=gcmads.js.map
|
|
33
|
+
//# sourceMappingURL=gcmads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/purposes.ts","../src/gcmads.ts"],"names":[],"mappings":";AAgBO,IAAM,WAAA,GAAc;AAAA,EACzB,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,sBAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,sHAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;AChBA,IAAM,MAAA,GAAiB;AAAA,EACrB,IAAA,EAAM,+BAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,uEAAA;AAAA,EACb,GAAG,WAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,MAAM,MAAM;AACV,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AACrC,MAAA,MAAA,CAAO,IAAA,CAAK,WAAW,QAAA,EAAU;AAAA,QAC/B,kBAAA,EAAoB,SAAA;AAAA,QACpB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ","file":"gcmads.js","sourcesContent":["/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { PURPOSE_ADS } from './utils/purposes';\n\ndeclare global {\n interface Window {\n gtag: (...args: any[]) => void;\n }\n}\n\nconst GCMAds: Vendor = {\n name: 'Google Ads (Personnalisés)',\n category: 'Publicité',\n description: 'Active la personnalisation des publicités via Google Consent Mode.',\n ...PURPOSE_ADS,\n requireConsent: true,\n init: () => {\n if (typeof window.gtag === 'function') {\n window.gtag('consent', 'update', {\n ad_personalization: 'granted',\n ad_user_data: 'granted',\n });\n }\n },\n};\n\nexport default GCMAds;\n"]}
|