@communecter/cocolight-api-client 1.0.8 → 1.0.9

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.
@@ -0,0 +1,246 @@
1
+ import { fileTypeFromBuffer } from "file-type";
2
+
3
+ import { ApiAuthenticationError, ApiValidationError } from "../error.js";
4
+
5
+ // UtilMixin.js
6
+ export const UtilMixin = {
7
+
8
+ async call(constant, data = {}) {
9
+ return this.apiClient.safeCall(async () => {
10
+ const response = await this.apiClient.callEndpoint(constant, data);
11
+ this.apiClient.checkAndThrowApiResponseError(response);
12
+ return response.data;
13
+ });
14
+ },
15
+
16
+ async callNoConnected(constant, data = {}) {
17
+ if(this.isConnected) {
18
+ throw new ApiAuthenticationError("Vous devez ne devez pas être connecté pour faire cette action.");
19
+ }
20
+ return this.call(constant, data);
21
+ },
22
+
23
+ async callIsConnected(param, data = {}) {
24
+ if(!this.isConnected) {
25
+ throw new ApiAuthenticationError("Vous devez être connecté pour faire cette action.");
26
+ }
27
+ // Si le premier paramètre est une fonction, on l'exécute en tant que callback
28
+ if (typeof param === "function") {
29
+ return await param();
30
+ }
31
+ return this.call(param, data);
32
+ },
33
+
34
+ async callIsMe(param, data = {}) {
35
+ if (!this.isMe) {
36
+ throw new ApiAuthenticationError("Vous devez être vous-même pour faire cette action.");
37
+ }
38
+ // Si le premier paramètre est une fonction, on l'exécute en tant que callback
39
+ if (typeof param === "function") {
40
+ return await param();
41
+ }
42
+ // Sinon, on considère qu'il s'agit d'un constant et on appelle la méthode par défaut
43
+ return await this.callIsConnected(param, data);
44
+ },
45
+
46
+ async validateImage(imageInput){
47
+ const image = await this._validateUploadInput(imageInput, {
48
+ allowedMimeTypes: ["image/jpeg", "image/png", "image/jpg"],
49
+ expectedType: "image"
50
+ });
51
+ return image;
52
+ },
53
+
54
+ async validateFile(fileInput){
55
+ const file = await this._validateUploadInput(fileInput, {
56
+ allowedMimeTypes: ["application/pdf", "text/plain", "text/csv"],
57
+ expectedType: "file"
58
+ });
59
+ return file;
60
+ },
61
+
62
+ async _validateUploadInput(input, { allowedMimeTypes = [], expectedType = "any" }) {
63
+ if (!input) {
64
+ throw new ApiValidationError("Le fichier est requis.");
65
+ }
66
+
67
+ const isNode = typeof window === "undefined" && typeof process !== "undefined";
68
+ let mimeType = "";
69
+ let output = input;
70
+
71
+ // Navigateur : File
72
+ if (typeof File !== "undefined" && input instanceof File) {
73
+ mimeType = input.type;
74
+ if (!allowedMimeTypes.includes(mimeType)) {
75
+ throw new ApiValidationError("Le type du fichier est invalide.");
76
+ }
77
+ }
78
+
79
+ // Navigateur : Blob
80
+ else if (typeof Blob !== "undefined" && input instanceof Blob) {
81
+ mimeType = input.type;
82
+ if (!allowedMimeTypes.includes(mimeType)) {
83
+ throw new ApiValidationError("Le type du fichier est invalide.");
84
+ }
85
+
86
+ const ext = mimeType.split("/")[1] || "bin";
87
+ const fileName = `${Date.now()}.${ext}`;
88
+ output = new File([input], fileName, { type: mimeType });
89
+ }
90
+
91
+ // Node.js : Buffer
92
+ else if (isNode && Buffer.isBuffer(input)) {
93
+ const fileTypeResult = await fileTypeFromBuffer(input);
94
+ mimeType = fileTypeResult?.mime;
95
+
96
+ if (!fileTypeResult || !allowedMimeTypes.includes(mimeType)) {
97
+ throw new ApiValidationError("Le type du fichier est invalide.");
98
+ }
99
+
100
+ // Pour un fichier image, on transforme en stream
101
+ if (expectedType === "image") {
102
+ const ext = fileTypeResult.ext;
103
+ const filename = `${Date.now()}.${ext}`;
104
+ output = await this._createReadStreamFromBuffer(input, filename, mimeType);
105
+ }
106
+ }
107
+
108
+ // Node.js : ReadableStream
109
+ else if (isNode && input?.readable && typeof input._read === "function") {
110
+ const previewChunks = [];
111
+ const tee = await this._passThrough();
112
+ const resultStream = await this._passThrough();
113
+
114
+ const MAX_BYTES = 4100;
115
+ let bytesRead = 0;
116
+
117
+ input.on("data", (chunk) => {
118
+ if (bytesRead < MAX_BYTES) {
119
+ previewChunks.push(chunk);
120
+ bytesRead += chunk.length;
121
+ }
122
+ });
123
+
124
+ input.pipe(tee).pipe(resultStream);
125
+ await new Promise((resolve) => setTimeout(resolve, 10));
126
+
127
+ const previewBuffer = Buffer.concat(previewChunks);
128
+ const fileTypeResult = await fileTypeFromBuffer(previewBuffer);
129
+ mimeType = fileTypeResult?.mime;
130
+
131
+ if (!fileTypeResult || !allowedMimeTypes.includes(mimeType)) {
132
+ throw new ApiValidationError("Le type du fichier est invalide.");
133
+ }
134
+
135
+ resultStream.path = `${Date.now()}.${fileTypeResult.ext}`;
136
+ resultStream.mimeType = mimeType;
137
+ output = resultStream;
138
+ }
139
+
140
+ else {
141
+ throw new ApiValidationError("Type de fichier non reconnu.");
142
+ }
143
+
144
+ return output;
145
+ },
146
+
147
+ /**
148
+ * Transforme un Buffer en ReadableStream équivalent à fs.createReadStream
149
+ * @param {Buffer} buffer - Le buffer contenant les données binaires
150
+ * @param {string} filename - Nom de fichier (utilisé dans FormData)
151
+ * @param {string} mimeType - Type MIME (utilisé dans FormData)
152
+ * @returns {Object} - { stream, filename, mimeType }
153
+ */
154
+ async _createReadStreamFromBuffer(buffer, filename = "file.bin", mimeType = "application/octet-stream") {
155
+ const stream = await this._bufferToReadable(buffer);
156
+ stream.path = filename; // 👈 hack pour simuler un vrai fichier ReadStream
157
+ stream.mimeType = mimeType;
158
+ return stream;
159
+ },
160
+
161
+ async _bufferToReadable(buffer) {
162
+ if (typeof window === "undefined") {
163
+ const { bufferToReadable } = await import("../utils/stream-utils.node.js");
164
+ return bufferToReadable(buffer);
165
+ } else {
166
+ throw new Error("bufferToReadable ne doit pas être appelé dans le navigateur");
167
+ }
168
+ },
169
+
170
+ async _passThrough() {
171
+ if (typeof window === "undefined") {
172
+ const { createPassThrough } = await import("../utils/stream-utils.node.js");
173
+ return createPassThrough();
174
+ } else {
175
+ throw new Error("passThrough ne doit pas être appelé dans le navigateur");
176
+ }
177
+ },
178
+
179
+ // async _bufferToReadable(buffer) {
180
+ // if (typeof window === "undefined") {
181
+ // const { Readable } = await import("stream");
182
+ // return Readable.from(buffer);
183
+ // } else {
184
+ // throw new Error("bufferToReadable ne doit pas être appelé dans le navigateur");
185
+ // }
186
+ // },
187
+
188
+ // async _passThrough() {
189
+ // if (typeof window === "undefined") {
190
+ // const { PassThrough } = await import("stream");
191
+ // return new PassThrough();
192
+ // } else {
193
+ // throw new Error("passThrough ne doit pas être appelé dans le navigateur");
194
+ // }
195
+ // },
196
+
197
+ _omitProps(obj, propsToRemove) {
198
+ if (!obj || typeof obj !== "object") return {};
199
+
200
+ const result = { ...obj };
201
+ for (const prop of propsToRemove) {
202
+ delete result[prop];
203
+ }
204
+ return result;
205
+ },
206
+
207
+ _pickProps(obj, keys, transforms = {}) {
208
+ if (!obj || typeof obj !== "object") return {};
209
+
210
+ const result = {};
211
+
212
+ for (const key of keys) {
213
+ if (key in obj) {
214
+ const value = obj[key];
215
+ if (typeof transforms[key] === "function") {
216
+ result[key] = transforms[key](value, obj); // (valeur, objet source)
217
+ } else {
218
+ result[key] = value;
219
+ }
220
+ }
221
+ }
222
+
223
+ return result;
224
+ },
225
+
226
+ _createFilteredProxy(list) {
227
+ return new Proxy(list, {
228
+ get(target, prop, receiver) {
229
+ if (typeof prop === "string" && !isNaN(prop)) {
230
+ const active = target.filter(n => !n._isDeleted);
231
+ return active[prop];
232
+ }
233
+ if (prop === "length") {
234
+ return target.filter(n => !n._isDeleted).length;
235
+ }
236
+ if (typeof target[prop] === "function") {
237
+ return (...args) => target.filter(n => !n._isDeleted)[prop](...args);
238
+ }
239
+ return Reflect.get(target, prop, receiver);
240
+ }
241
+ });
242
+ }
243
+
244
+
245
+ };
246
+
@@ -0,0 +1,10 @@
1
+ // utils/stream-utils.node.js
2
+ export async function bufferToReadable(buffer) {
3
+ const { Readable } = await import("stream");
4
+ return Readable.from(buffer);
5
+ }
6
+
7
+ export async function createPassThrough() {
8
+ const { PassThrough } = await import("stream");
9
+ return new PassThrough();
10
+ }
@@ -1 +0,0 @@
1
- /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
@@ -1 +0,0 @@
1
- /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
@@ -1,249 +0,0 @@
1
- import { ApiResponseError } from "../error.js";
2
-
3
- // EntityMixin.js
4
- export const EntityMixin = {
5
- /**
6
- * Résout l'identifiant de l'entité si seul le slug est fourni.
7
- * @param {string} type - Le type d'entité (ex : "citoyens", "organizations", "projects").
8
- * @returns {Promise<string>} L'identifiant résolu.
9
- */
10
- async resolveId(type) {
11
- if (!this.id && this.slug) {
12
- try {
13
- const data = await this._getElementsKey({
14
- pathParams:{
15
- slug: this.slug
16
- }
17
- });
18
- if(data?.contextId && data?.contextType === type) {
19
- this._id(data.contextId);
20
- } else {
21
- throw new ApiResponseError(`Le slug ${this.slug} ne correspond pas à un ${type}`, 200, data);
22
- }
23
- } catch (error) {
24
- if(error instanceof ApiResponseError) {
25
- if(error?.responseData?.contextType !== type) {
26
- throw error;
27
- } else {
28
- throw new ApiResponseError(`Impossible de récupérer l'identifiant pour le slug ${this.slug}`, error.status, error.responseData);
29
- }
30
- } else {
31
- throw error;
32
- }
33
- }
34
- }
35
- return this.id;
36
- },
37
-
38
- /**
39
- * Récupère le profil public de l'entité.
40
- * @returns {Promise<Object>} Les données du profil public.
41
- */
42
- async getPublicProfile() {
43
- await this.resolveId(this.getEntityType());
44
- return this._getElementsAbout({ pathParams: { id: this.id, type: this.getEntityType() } });
45
- },
46
-
47
- /**
48
- * Obtenir les éléments liés : Récupère les informations détaillées d'un élément et de ses éléments liés.
49
- * Constant : GET_ELEMENTS_ABOUT
50
- * @param {Object} data - Les données à envoyer.
51
- * @param {string} data.tpl - Template utilisé (ex: ficheInfoElement) (default: "ficheInfoElement")
52
- * @param {Object} data.pathParams - Les paramètres de chemin.
53
- * @param {string} data.pathParams.type - Type d'entité (default: "citoyens")
54
- * @param {string} data.pathParams.id - ID de l'utilisateur ou de l'entité
55
- * @returns {Promise<Object>} - Les données de réponse.
56
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
57
- * @throws {Error} - En cas d'erreur inattendue.
58
- */
59
- async _getElementsAbout(data = {}) {
60
- return this.call("GET_ELEMENTS_ABOUT", data);
61
- },
62
-
63
- /**
64
- * Récuperer l'id et la collection d'un element en fonction du slug : Récuperer l'id et la collection d'un element en fonction du slug
65
- * Constant : GET_ELEMENTS_KEY
66
- * @param {Object} data.pathParams - Les paramètres de chemin.
67
- * @param {string} data.pathParams.slug - Slug de l'élément à récupérer
68
- * @returns {Promise<Object>} - Les données de réponse.
69
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
70
- * @throws {Error} - En cas d'erreur inattendue.
71
- */
72
- async _getElementsKey(data = {}) {
73
- return this.call("GET_ELEMENTS_KEY", data);
74
- },
75
-
76
- /**
77
- * Mettre à jour l'image de profil : Permet de mettre à jour l'image de profil d'un utilisateur ou d'une entité.
78
- * Constant : PROFIL_IMAGE
79
- * @param {Object} data - Les données à envoyer.
80
- * @param {undefined} data.profil_avatar - Fichier image de profil au format binaire
81
- * @param {Object} data.pathParams - Les paramètres de chemin.
82
- * @param {string} data.pathParams.folder - Type d'entité (default: "citoyens")
83
- * @param {string} data.pathParams.ownerId - ID de l'utilisateur ou de l'entité
84
- * @returns {Promise<Object>} - Les données de réponse.
85
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
86
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
87
- * @throws {Error} - En cas d'erreur inattendue.
88
- */
89
- async _profilImage(data = {}) {
90
- return this.callIsConnected("PROFIL_IMAGE", data);
91
- },
92
-
93
- /**
94
- * Mettre à jour les paramètres d'un élément : Mise à jour des paramètres spécifiques d'un élément.
95
- * Constant : UPDATE_SETTINGS
96
- * @param {Object} data - Les données à envoyer.
97
- * @param {string} data.type - data.type
98
- * @param {undefined} data.value - data.value
99
- * @param {string} data.typeEntity - Type d'élément (citoyens, projects, organizations) (default: "citoyens")
100
- * @param {string} data.idEntity - Id de l'élément
101
- * @returns {Promise<Object>} - Les données de réponse.
102
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
103
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
104
- * @throws {Error} - En cas d'erreur inattendue.
105
- */
106
- async _updateSettings(data = {}) {
107
- return this.callIsConnected("UPDATE_SETTINGS", data);
108
- },
109
-
110
- /**
111
- * Mettre à jour la description d'un élément : Permet de mettre à jour la description courte et complète d'un élément.
112
- * Constant : UPDATE_BLOCK_DESCRIPTION
113
- * @param {Object} data - Les données à envoyer.
114
- * @param {string} data.block - Nom du bloc à mettre à jour (doit être 'descriptions') (default: "descriptions")
115
- * @param {string} data.typeElement - Type d'élément (citoyens, projects, organizations) (default: "citoyens")
116
- * @param {string} data.id - ID de l'élément concerné
117
- * @param {string | null} data.scope - Périmètre de mise à jour (default: "")
118
- * @param {string} data.descMentions - Mentions dans la description (default: "")
119
- * @param {string} data.shortDescription - Courte description
120
- * @param {string} data.description - Description complète
121
- * @returns {Promise<Object>} - Les données de réponse.
122
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
123
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
124
- * @throws {Error} - En cas d'erreur inattendue.
125
- */
126
- async _updateBlockDescription(data = {}) {
127
- return this.callIsConnected("UPDATE_BLOCK_DESCRIPTION", data);
128
- },
129
-
130
- /**
131
- * Mettre à jour les informations d'un élément : Permet de mettre à jour les informations générales d'un élément (nom, contacts, etc.).
132
- * Constant : UPDATE_BLOCK_INFO
133
- * @param {Object} data - Les données à envoyer.
134
- * @param {string} data.block - Nom du bloc à mettre à jour (doit être 'info') (default: "info")
135
- * @param {string} data.typeElement - Type d'élément (citoyens, projects, organizations) (default: "citoyens")
136
- * @param {string} data.id - ID de l'élément concerné
137
- * @param {string} data.scope - Périmètre de mise à jour (default: "")
138
- * @returns {Promise<Object>} - Les données de réponse.
139
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
140
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
141
- * @throws {Error} - En cas d'erreur inattendue.
142
- */
143
- async _updateBlockInfo(data = {}) {
144
- return this.callIsConnected("UPDATE_BLOCK_INFO", data);
145
- },
146
-
147
- /**
148
- * Mettre à jour les réseaux sociaux d'un élément : Permet de mettre à jour les liens vers les réseaux sociaux d'un élément.
149
- * Constant : UPDATE_BLOCK_SOCIAL
150
- * @param {Object} data - Les données à envoyer.
151
- * @param {string} data.block - Nom du bloc à mettre à jour (doit être 'network') (default: "network")
152
- * @param {string} data.typeElement - Type d'élément (citoyens, projects, organizations) (default: "citoyens")
153
- * @param {string} data.id - ID de l'élément concerné
154
- * @param {string} data.scope - Périmètre de mise à jour (default: "")
155
- * @param {string} data.gitlab - Compte Gitlab
156
- * @param {string} data.github - Compte Github
157
- * @param {string} data.twitter - Compte Twitter
158
- * @param {string} data.facebook - Compte Facebook
159
- * @param {string} data.instagram - Compte Instagram
160
- * @param {string} data.diaspora - Compte Diaspora
161
- * @param {string} data.mastodon - Compte Mastodon
162
- * @param {string} data.telegram - Compte Telegram
163
- * @param {string} data.signal - Compte Signal
164
- * @returns {Promise<Object>} - Les données de réponse.
165
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
166
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
167
- * @throws {Error} - En cas d'erreur inattendue.
168
- */
169
- async _updateBlockSocial(data = {}) {
170
- return this.callIsConnected("UPDATE_BLOCK_SOCIAL", data);
171
- },
172
-
173
- /**
174
- * Mettre à jour les localités d'un élément : Permet de mettre à jour l'adresse et les informations géographiques d'un élément.
175
- * Constant : UPDATE_BLOCK_LOCALITY
176
- * @param {Object} data - Les données à envoyer.
177
- * @param {string} data.block - Nom du bloc à mettre à jour (doit être 'localities') (default: "localities")
178
- * @param {string} data.typeElement - Type d'élément (default: "citoyens")
179
- * @param {string} data.id - ID de l'élément concerné
180
- * @param {string} data.scope - Périmètre de mise à jour (default: "")
181
- * @param {object} data.geo - Coordonnées géographiques
182
- * @param {string} data.geo.@type - data.geo.@type
183
- * @param {string | number} data.geo.latitude - data.geo.latitude
184
- * @param {string | number} data.geo.longitude - data.geo.longitude
185
- * @param {object} data.geoPosition - Position géographique GeoJSON
186
- * @param {string} data.geoPosition.type - Type GeoJSON (doit être 'Point')
187
- * @param {Array<number>} data.geoPosition.coordinates - Tableau contenant [longitude, latitude]
188
- * @param {boolean} data.geoPosition.float - Indicateur pour forcer la conversion en float côté serveur (default: true)
189
- * @param {object} data.address - data.address
190
- * @param {string} data.address.@type - data.address.@type
191
- * @param {string} data.address.addressCountry - data.address.addressCountry
192
- * @param {string} data.address.codeInsee - data.address.codeInsee
193
- * @param {string} data.address.addressLocality - data.address.addressLocality
194
- * @param {string} data.address.localityId - data.address.localityId
195
- * @param {string} data.address.level1 - data.address.level1
196
- * @param {string} data.address.level1Name - data.address.level1Name
197
- * @param {string} data.address.level3 - ID du département. Peut être vide pour les pays étrangers.
198
- * @param {string} data.address.level3Name - Nom du département. Peut être vide pour les pays étrangers.
199
- * @param {string} data.address.level4 - ID de la commune. Peut être vide pour les pays étrangers.
200
- * @param {string} data.address.level4Name - Nom de la commune. Peut être vide pour les pays étrangers.
201
- * @param {string} data.address.postalCode - data.address.postalCode
202
- * @param {string} data.address.streetAddress - data.address.streetAddress
203
- * @returns {Promise<Object>} - Les données de réponse.
204
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
205
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
206
- * @throws {Error} - En cas d'erreur inattendue.
207
- */
208
- async _updateBlockLocality(data = {}) {
209
- return this.callIsConnected("UPDATE_BLOCK_LOCALITY", data);
210
- },
211
-
212
- /**
213
- * Mettre à jour le slug d'un élément : Permet de mettre à jour le slug pour une URL simplifiée.
214
- * Constant : UPDATE_BLOCK_SLUG
215
- * @param {Object} data - Les données à envoyer.
216
- * @param {string} data.block - Nom du bloc à mettre à jour (doit être 'info') (default: "info")
217
- * @param {string} data.typeElement - Type d'élément (citoyens, projects, organizations) (default: "citoyens")
218
- * @param {string} data.id - ID de l'élément concerné
219
- * @param {string} data.scope - data.scope (default: "")
220
- * @param {string} data.slug - Slug simplifié pour URL
221
- * @returns {Promise<Object>} - Les données de réponse.
222
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
223
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
224
- * @throws {Error} - En cas d'erreur inattendue.
225
- */
226
- async _updateBlockSlug(data = {}) {
227
- return this.callIsConnected("UPDATE_BLOCK_SLUG", data);
228
- },
229
-
230
- /**
231
- * Vérifier l'état d'une URL : Vérifie si une URL (slug) est valide ou disponible.
232
- * Constant : CHECK
233
- * @param {Object} data - Les données à envoyer.
234
- * @param {string} data.block - Nom du bloc (default: "info")
235
- * @param {string} data.id - ID de l'élément
236
- * @param {string} data.type - Type d'élément (default: "citoyens")
237
- * @param {string} data.slug - Slug à vérifier
238
- * @returns {Promise<Object>} - Les données de réponse.
239
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
240
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
241
- * @throws {Error} - En cas d'erreur inattendue.
242
- */
243
- async _check(data = {}) {
244
- return this.callIsConnected("CHECK", data);
245
- }
246
-
247
-
248
- };
249
-
@@ -1,168 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- import { ApiResponseError } from "../error.js";
3
-
4
- // NewsMixin.js
5
- export const NewsMixin = {
6
-
7
- /**
8
- * Récupérer les actualités : Récupère la liste d’actualités selon plusieurs critères.
9
- * Constant : GET_NEWS
10
- * @param {Object} data - Les données à envoyer.
11
- * @param {number} data.dateLimit - Limite de date timestamp ou 0 (default: 0)
12
- * @param {object} data.search - data.search
13
- * @param {string} data.search.name - Nom ou terme recherché (default: "")
14
- * @param {number} data.indexStep - Nombre de résultats par page (default: 12)
15
- * @param {Object} data.pathParams - Les paramètres de chemin.
16
- * @param {boolean} data.pathParams.isLive - Indique si l'actualité est en direct (default: true)
17
- * @param {string} data.pathParams.type - Type d'actualité (ex: 'citoyens', 'projects', 'organizations') (default: "citoyens")
18
- * @param {string} data.pathParams.id - ID de l'élément (ex: ID d'un utilisateur, d'un projet ou d'une organisation)
19
- * @returns {Promise<Object>} - Les données de réponse.
20
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
21
- * @throws {Error} - En cas d'erreur inattendue.
22
- */
23
- async _getNews(data = {}) {
24
- return this.call("GET_NEWS", data);
25
- },
26
-
27
- /**
28
- * Récupérer des actualités par IDs : Récupère des actualités à partir d’une liste d’identifiants.
29
- * Constant : GET_NEWS_BY_ID
30
- * @param {Object} data - Les données à envoyer.
31
- * @param {Array<string>} data.ids - Liste des IDs d’actualités à récupérer
32
- * @returns {Promise<Object>} - Les données de réponse.
33
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
34
- * @throws {Error} - En cas d'erreur inattendue.
35
- */
36
- async _getNewsById(data = {}) {
37
- return this.call("GET_NEWS_BY_ID", data);
38
- },
39
-
40
- /**
41
- * Ajouter une actualité : Ajoute une nouvelle actualité.
42
- * Constant : ADD_NEWS
43
- * @param {Object} data - Les données à envoyer.
44
- * @param {string} data.text - Contenu de l’actualité
45
- * @param {string} data.scope - Portée de l'actualité (ex: public, privé...) (default: "public")
46
- * @param {boolean} data.markdownActive - Markdown activé (true/false) (default: true)
47
- * @param {string} data.parentId - ID de l'entité parente
48
- * @param {string} data.parentType - Type de l'entité parente (default: "citoyens")
49
- * @param {string} data.type - Type de l'objet, toujours 'news'. (default: "news")
50
- * @param {boolean} data.json - Indique que la réponse est au format JSON. (default: true)
51
- * @param {array | string} data.tags - Tags : "" pour effacer tous les tags, ou tableau de mots-clés.
52
- * @param {object} data.mediaImg - Optionnel. Informations sur les images associées à la news.
53
- * @param {number} data.mediaImg.countImages - Nombre d'images.
54
- * @param {Array<string>} data.mediaImg.images - Liste des identifiants ou chemins d'images.
55
- * @param {object} data.mediaFile - Optionnel. Informations sur les fichiers associés à la news.
56
- * @param {number} data.mediaFile.countFiles - Nombre de fichiers.
57
- * @param {Array<string>} data.mediaFile.files - Liste des identifiants ou chemins de fichiers.
58
- * @param {object} data.mentions - Liste des mentions sous forme d'objet avec des clés dynamiques représentant l'indice de la mention.
59
- * @param {Object.<string, object>} data.mentions - Objet dont les clés keys matching ^[0-9]+$
60
- * @returns {Promise<Object>} - Les données de réponse.
61
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
62
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
63
- * @throws {Error} - En cas d'erreur inattendue.
64
- */
65
- async _addNews(data = {}) {
66
- return this.callIsConnected("ADD_NEWS", data);
67
- },
68
-
69
- /**
70
- * Ajouter une image à une actualité : Ajoute une images à une actualité.
71
- * Constant : ADD_IMAGE_NEWS
72
- * @param {Object} data - Les données à envoyer.
73
- * @param {undefined} data.newsImage - Fichier image à télécharger
74
- * @param {Object} data.pathParams - Les paramètres de chemin.
75
- * @param {string} data.pathParams.folder - Type de l'entité parente (ex: 'citoyens', 'projects', 'organizations') (default: "citoyens")
76
- * @param {string} data.pathParams.ownerId - ID de l'utilisateur ou de l'entité parente
77
- * @returns {Promise<Object>} - Les données de réponse.
78
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
79
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
80
- * @throws {Error} - En cas d'erreur inattendue.
81
- */
82
- async _addImageNews(data = {}) {
83
- return this.callIsConnected("ADD_IMAGE_NEWS", data);
84
- },
85
-
86
- /**
87
- * Ajouter un fichier à une actualité : Ajoute un fichier à une actualité.
88
- * Constant : ADD_FILE_NEWS
89
- * @param {Object} data - Les données à envoyer.
90
- * @param {undefined} data.newsFile - Fichier image à télécharger
91
- * @param {Object} data.pathParams - Les paramètres de chemin.
92
- * @param {string} data.pathParams.folder - Type de l'entité parente (ex: 'citoyens', 'projects', 'organizations') (default: "citoyens")
93
- * @param {string} data.pathParams.ownerId - ID de l'utilisateur ou de l'entité parente
94
- * @returns {Promise<Object>} - Les données de réponse.
95
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
96
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
97
- * @throws {Error} - En cas d'erreur inattendue.
98
- */
99
- async _addFileNews(data = {}) {
100
- return this.callIsConnected("ADD_FILE_NEWS", data);
101
- },
102
-
103
- /**
104
- * Supprimer une actualité : Supprime une actualité existante.
105
- * Constant : DELETE_NEWS
106
- * @param {Object} data - Les données à envoyer.
107
- * @param {boolean} data.isLive - data.isLive (default: false)
108
- * @param {Object} data.pathParams - Les paramètres de chemin.
109
- * @param {string} data.pathParams.id - ID de l'actualité à supprimer
110
- * @returns {Promise<Object>} - Les données de réponse.
111
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
112
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
113
- * @throws {Error} - En cas d'erreur inattendue.
114
- */
115
- async _deleteNews(data = {}) {
116
- return this.callIsConnected("DELETE_NEWS", data);
117
- },
118
-
119
- /**
120
- * Mettre à jour une actualité : Met à jour le contenu d’une actualité existante.
121
- * Constant : UPDATE_NEWS
122
- * @param {Object} data - Les données à envoyer.
123
- * @param {string} data.idNews - ID de l'actualité à mettre à jour
124
- * @param {string} data.text - Contenu de l’actualité
125
- * @param {string} data.scope - Portée de l'actualité (ex: public, privé...) (default: "public")
126
- * @param {boolean} data.markdownActive - Markdown activé (true/false) (default: true)
127
- * @param {string} data.parentId - ID de l'entité parente
128
- * @param {string} data.parentType - Type de l'entité parente (default: "citoyens")
129
- * @param {string} data.type - Type de l'objet, toujours 'news'. (default: "news")
130
- * @param {array | string} data.tags - Tags : "" pour effacer tous les tags, ou tableau de mots-clés.
131
- * @param {object} data.mediaImg - Optionnel. Informations sur les images associées à la news.
132
- * @param {number} data.mediaImg.countImages - Nombre d'images.
133
- * @param {Array<string>} data.mediaImg.images - Liste des identifiants ou chemins d'images.
134
- * @param {object} data.mediaFile - Optionnel. Informations sur les fichiers associés à la news.
135
- * @param {number} data.mediaFile.countFiles - Nombre de fichiers.
136
- * @param {Array<string>} data.mediaFile.files - Liste des identifiants ou chemins de fichiers.
137
- * @param {object} data.mentions - Liste des mentions sous forme d'objet avec des clés dynamiques représentant l'indice de la mention.
138
- * @param {Object.<string, object>} data.mentions - Objet dont les clés keys matching ^[0-9]+$
139
- * @returns {Promise<Object>} - Les données de réponse.
140
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
141
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
142
- * @throws {Error} - En cas d'erreur inattendue.
143
- */
144
- async _updateNews(data = {}) {
145
- return this.callIsConnected("UPDATE_NEWS", data);
146
- },
147
-
148
- /**
149
- * Partager une actualité : Partage une actualité avec une entité ou un utilisateur.
150
- * Constant : SHARE_NEWS
151
- * @param {Object} data - Les données à envoyer.
152
- * @param {string} data.parentId - ID de l'actualité à partager
153
- * @param {string} data.parentType - Type de l'objet, toujours 'news'. (default: "news")
154
- * @param {string} data.childId - ID de l'entité partageante
155
- * @param {string} data.childType - Type de l'entité partageante (default: "citoyens")
156
- * @param {string} data.connectType - Type de connexion, toujours 'share'. (default: "share")
157
- * @param {string} data.comment - Commentaire de partage
158
- * @returns {Promise<Object>} - Les données de réponse.
159
- * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
160
- * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
161
- * @throws {Error} - En cas d'erreur inattendue.
162
- */
163
- async _shareNews(data = {}) {
164
- return this.callIsConnected("SHARE_NEWS", data);
165
- }
166
-
167
- };
168
-