-
Notifications
You must be signed in to change notification settings - Fork 3
/
types.d.ts
245 lines (229 loc) · 6.2 KB
/
types.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
export interface CommonProps {
/**
* Date de la dernière mise à jour. La date par défaut est celle de la compilation.
*
* @example "01/01/2022"
* @default "<Date de la compilation>"
*/
date?: string;
/**
* Mentionner Beta.gouv ou non dans les textes en plus de l'ADEME.
*
* (non utilisé pour la politique de confidentialité)
*
* @default false
*/
includeBetaGouv?: boolean;
/**
* Nom du site.
*/
siteName: string;
}
//#region CookiePolicy
export namespace CookiesPolicyProps {
export type AnalyticTool = {
/**
* Url de la page listant les cookies utilisés par l'outil.
*/
cookieListUrl: string;
/**
* Nom de l'outil d'analyse.
*/
name: string;
/**
* Url de la politique de confidentialité de l'outil.
*/
policyUrl: string;
};
}
export interface CookiesPolicyProps<ElementType = string> extends CommonProps {
/**
* Outil d'analyse d'audience.
*/
analyticTool: CookiesPolicyProps.AnalyticTool;
/**
* Bouton de consentement aux cookies. Peut être un composant propre à la librairie utilisée.
*/
cookieConsentButton: ElementType;
}
//#endregion
//#region PrivacyPolicy
export namespace PrivacyPolicyProps {
export interface ThirdParty {
/**
* "Pays destinataire", pays d'origine du sous-traitant.
*/
country: string;
/**
* "Pays d’hébergement", pays où sont stockées les données.
*
* Si le service permet de changer la localisation du stockage ou du transit des données, le préciser.
*/
hostingCountry: string;
/**
* "Partenaire", nom du sous-traitant.
*/
name: string;
/**
* "Garantie", garanties de protection des données, lien de la politique de confidentialité du sous-traitant.
*/
policyUrl: string;
/**
* "Traitement réalisé", description du traitement des données.
*
* @example "Analyse de l'audience", "Hébergement", "Base de données"
*/
serviceType: string;
}
export interface Cookie {
/**
* "Catégorie de cookie"
*
* @example "Cookies de mesure d'audience", "Cookies de personnalisation"
*/
category: string;
/**
* "Destination", destination du cookie. Dans quel pays les données sont-elles envoyées ?
*
* @example "France", "Union européenne", "États-Unis"
*/
destination: string;
/**
* "Éditeur", nom de l'entité responsable du cookie.
*
* @example "Matomo & ADEME", "Google Analytics"
*/
editor: string;
/**
* "Durée de conservation", durée de conservation du cookie.
*
* @example "13 mois", "Session"
*/
expiration: string;
/**
* "Finalité", finalité du cookie.
*
* @example "Mesurer l'audience", "Personnaliser l'expérience utilisateur"
*/
finalities: string;
/**
* "Nom du cookie", nom du cookie.
*/
name: string;
}
export type WithThirdPartiesAsArray = {
table_thirdParties?: never;
/**
* Mentionner ici tous les sous-traitants intervenant dans le traitement des données.
*/
thirdParties: ThirdParty[];
};
export type WithThirdPartiesAsTableElement<ElementType = string> = {
/** @see {@link WithThirdPartiesAsArray.thirdParties} */
table_thirdParties: ElementType;
thirdParties?: never;
};
export type WithCookiesAsArray = {
/**
* Mentionner ici tous les cookies utilisés par le site.
*/
cookies: Cookie[];
table_cookies?: never;
};
export type WithCookiesAsTableElement<ElementType = string> = {
cookies?: never;
/** @see {@link WithCookiesAsArray.cookies} */
table_cookies: ElementType;
};
export type Base = CommonProps & {
/**
* Bouton de consentement aux cookies. Peut être un composant propre à la librairie utilisée.
*/
cookieConsentButton: ElementType;
};
}
export type PrivacyPolicyProps<ElementType = string> = PrivacyPolicyProps.Base &
(PrivacyPolicyProps.WithCookiesAsArray | PrivacyPolicyProps.WithCookiesAsTableElement<ElementType>) &
(PrivacyPolicyProps.WithThirdPartiesAsArray | PrivacyPolicyProps.WithThirdPartiesAsTableElement<ElementType>);
//#endregion
//#region LegalNotice
export namespace LegalNoticeProps {
export interface SiteHost {
/**
* "Adresse", adresse de l'hébergeur.
*/
address: string;
/**
* "Pays", pays d'hébergement du site.
*/
country: string;
/**
* "Email", email de l'hébergeur.
*/
email?: string;
/**
* "Nom", nom de l'hébergeur.
*/
name: string;
}
export interface ThirdParty {
/**
* Nom du service tiers.
*
* @example "Storyset"
*/
name: string;
/**
* Texte placé avant le nom du service tiers.
*
* @example "Certaines illustrations sont réalisées par"
*/
text: string;
/**
* Lien vers le service tiers.
*/
url: string;
}
export type WithThirdPartiesAsArray = {
element_thirdParties?: never;
/**
* Mentionner ici tout service tiers fournissant des éléments complémentaires
* tels que des fonctionnalités additionnelles – formulaire en ligne, API, Map… – ;
* des illustrations ou pictogrammes venant de banques d’images ;
* des polices de caractère propriétaire ; etc.
*/
thirdParties?: ThirdParty[];
};
export type WithThirdPartiesAsElement<ElementType = string> = {
/** @see {@link WithThirdPartiesAsArray.thirdParties} */
element_thirdParties?: ElementType;
thirdParties?: never;
};
export type Base = CommonProps & {
/**
* Email de contact.
*/
contactEmail: string;
/**
* Licence du code, habituellement sur GitHub.
*/
licenceUrl: string;
/**
* Lien vers la page de politique de confidentialité.
*
* @default "/politique-de-confidentialite"
*/
privacyPolicyUrl?: string;
/**
* Hébergeur du site.
*/
siteHost: LegalNoticeProps.SiteHost;
/**
* Url du site.
*/
siteUrl: string;
};
}
export type LegalNoticeProps<ElementType = string> = LegalNoticeProps.Base &
(LegalNoticeProps.WithThirdPartiesAsArray | LegalNoticeProps.WithThirdPartiesAsElement<ElementType>);
//#endregion