@communecter/cocolight-api-client 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/cocolight-api-client.browser.js +7 -6
- package/dist/cocolight-api-client.browser.js.LICENSE.txt +1 -0
- package/dist/cocolight-api-client.cjs +2 -1
- package/dist/cocolight-api-client.cjs.LICENSE.txt +1 -0
- package/dist/cocolight-api-client.mjs.js +2 -1
- package/dist/cocolight-api-client.mjs.js.LICENSE.txt +1 -0
- package/package.json +11 -4
- package/src/Api.js +4 -5
- package/src/ApiClient.js +77 -5
- package/src/api/EntityMixin.js +220 -14
- package/src/api/NewsMixin.js +168 -0
- package/src/api/Organization.js +57 -5
- package/src/api/Project.js +57 -5
- package/src/api/User.js +144 -7
- package/src/api/UserMixin.js +59 -0
- package/src/api/UtilMixin.js +82 -0
- package/src/endpoints.module.js +2 -2
- package/src/error.js +11 -0
- package/src/index.js +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@communecter/cocolight-api-client",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "Client Axios simplifié pour l'API cocolight",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,7 +29,10 @@
|
|
|
29
29
|
"generate:module:publish": "node ./scripts/transform-json-module.publish.js",
|
|
30
30
|
"generate:doc": "node ./scripts/generate-doc.js",
|
|
31
31
|
"generate:test": "node ./scripts/generate-tests.js",
|
|
32
|
-
"generate:testdata": "node ./scripts/generate-test-data.js"
|
|
32
|
+
"generate:testdata": "node ./scripts/generate-test-data.js",
|
|
33
|
+
"generate:reponses": "node ./scripts/generate-constant-response-200.js",
|
|
34
|
+
"generate:methodeapi": "node ./scripts/generate-methode-api.js",
|
|
35
|
+
"generate:ajv-standalone": "node ./scripts/generate-validate-function-ajv.js"
|
|
33
36
|
},
|
|
34
37
|
"keywords": [
|
|
35
38
|
"communecter",
|
|
@@ -47,25 +50,28 @@
|
|
|
47
50
|
"README.md"
|
|
48
51
|
],
|
|
49
52
|
"peerDependencies": {
|
|
53
|
+
"@segment/ajv-human-errors": "^2.15.0",
|
|
50
54
|
"ajv": "^8.17.1",
|
|
51
55
|
"ajv-formats": "^3.0.1",
|
|
52
56
|
"axios": "^1.4.0",
|
|
53
57
|
"axios-retry": "^4.5.0",
|
|
54
58
|
"ejson": "^2.2.3",
|
|
55
59
|
"events": "^3.3.0",
|
|
60
|
+
"jwt-decode": "^4.0.0",
|
|
56
61
|
"pino": "^9.6.0",
|
|
57
62
|
"pino-pretty": "^13.0.0",
|
|
58
|
-
"
|
|
63
|
+
"file-type": "^20.4.1"
|
|
59
64
|
},
|
|
60
65
|
"devDependencies": {
|
|
61
66
|
"@babel/core": "^7.26.10",
|
|
62
67
|
"@babel/preset-env": "^7.26.9",
|
|
63
68
|
"@eslint/js": "^9.23.0",
|
|
69
|
+
"@segment/ajv-human-errors": "^2.15.0",
|
|
64
70
|
"ajv": "^8.17.1",
|
|
65
71
|
"ajv-formats": "^3.0.1",
|
|
66
72
|
"axios": "^1.4.0",
|
|
67
73
|
"axios-retry": "^4.5.0",
|
|
68
|
-
"
|
|
74
|
+
"file-type": "^20.4.1",
|
|
69
75
|
"babel-jest": "^29.7.0",
|
|
70
76
|
"babel-loader": "^10.0.0",
|
|
71
77
|
"ejson": "^2.2.3",
|
|
@@ -74,6 +80,7 @@
|
|
|
74
80
|
"events": "^3.3.0",
|
|
75
81
|
"globals": "^16.0.0",
|
|
76
82
|
"jest": "^29.7.0",
|
|
83
|
+
"jwt-decode": "^4.0.0",
|
|
77
84
|
"nodemon": "^3.1.9",
|
|
78
85
|
"pino": "^9.6.0",
|
|
79
86
|
"pino-pretty": "^13.0.0",
|
package/src/Api.js
CHANGED
|
@@ -55,10 +55,9 @@ export default class Api {
|
|
|
55
55
|
if(error instanceof ApiClientError) {
|
|
56
56
|
if(error?.details?.error) {
|
|
57
57
|
throw new ApiAuthenticationError(error.details.error, error.status, error.details);
|
|
58
|
-
} else {
|
|
59
|
-
throw error;
|
|
60
58
|
}
|
|
61
59
|
}
|
|
60
|
+
throw error;
|
|
62
61
|
}
|
|
63
62
|
}
|
|
64
63
|
|
|
@@ -80,7 +79,7 @@ export default class Api {
|
|
|
80
79
|
*/
|
|
81
80
|
me() {
|
|
82
81
|
if (!this._loggedUser) {
|
|
83
|
-
throw new
|
|
82
|
+
throw new ApiAuthenticationError("Accès refusé : utilisateur non authentifié.");
|
|
84
83
|
}
|
|
85
84
|
return this._loggedUser;
|
|
86
85
|
}
|
|
@@ -114,7 +113,7 @@ export default class Api {
|
|
|
114
113
|
try {
|
|
115
114
|
const oraganization = new Organization(this._client, organizationData);
|
|
116
115
|
if (options.getProfile) {
|
|
117
|
-
await oraganization.
|
|
116
|
+
await oraganization.getProfil();
|
|
118
117
|
}
|
|
119
118
|
return oraganization;
|
|
120
119
|
} catch (error) {
|
|
@@ -136,7 +135,7 @@ export default class Api {
|
|
|
136
135
|
try {
|
|
137
136
|
const project = new Project(this._client, projectData);
|
|
138
137
|
if (options.getProfile) {
|
|
139
|
-
await project.
|
|
138
|
+
await project.getProfil();
|
|
140
139
|
}
|
|
141
140
|
return project;
|
|
142
141
|
} catch (error) {
|
package/src/ApiClient.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from "events";
|
|
2
2
|
|
|
3
|
+
import { AggregateAjvError } from "@segment/ajv-human-errors";
|
|
3
4
|
import Ajv from "ajv";
|
|
4
5
|
import addFormats from "ajv-formats";
|
|
5
6
|
import axios from "axios";
|
|
@@ -10,7 +11,7 @@ import pino from "pino";
|
|
|
10
11
|
|
|
11
12
|
import MongoID from "./EJSONType.js";
|
|
12
13
|
import endpointsJson from "./endpoints.module.js";
|
|
13
|
-
import { ApiClientError, CircuitBreakerError } from "./error.js";
|
|
14
|
+
import { ApiClientError, ApiResponseError, ApiValidationError, CircuitBreakerError } from "./error.js";
|
|
14
15
|
|
|
15
16
|
EJSON.addType("oid", value => {
|
|
16
17
|
return new MongoID.ObjectID(value);
|
|
@@ -74,7 +75,7 @@ export default class ApiClient extends EventEmitter {
|
|
|
74
75
|
};
|
|
75
76
|
|
|
76
77
|
// AJV
|
|
77
|
-
this._ajv = new Ajv({ strict: false, useDefaults: true });
|
|
78
|
+
this._ajv = new Ajv({ strict: false, useDefaults: true, allErrors: true, verbose: true });
|
|
78
79
|
addFormats(this._ajv);
|
|
79
80
|
|
|
80
81
|
// Pino logger
|
|
@@ -470,6 +471,15 @@ export default class ApiClient extends EventEmitter {
|
|
|
470
471
|
return obj;
|
|
471
472
|
}
|
|
472
473
|
|
|
474
|
+
/**
|
|
475
|
+
* Safely calls an asynchronous function and handles any errors that occur.
|
|
476
|
+
* Logs the error message using the instance's logger before re-throwing the error.
|
|
477
|
+
*
|
|
478
|
+
* @param {Function} fn - The asynchronous function to be called.
|
|
479
|
+
* @param {...any} args - The arguments to pass to the function.
|
|
480
|
+
* @returns {Promise<any>} The result of the asynchronous function.
|
|
481
|
+
* @throws {Error} Re-throws any error that occurs during the function execution.
|
|
482
|
+
*/
|
|
473
483
|
async safeCall(fn, ...args) {
|
|
474
484
|
try {
|
|
475
485
|
return await fn(...args);
|
|
@@ -543,8 +553,9 @@ export default class ApiClient extends EventEmitter {
|
|
|
543
553
|
const valid = validatePathParams(pathParams);
|
|
544
554
|
|
|
545
555
|
if (!valid) {
|
|
556
|
+
const errorMessages = this._ajvErrorHuman(validatePathParams.errors);
|
|
546
557
|
this.emit("validationError", { stage: "pathParams", errors: validatePathParams.errors });
|
|
547
|
-
throw new
|
|
558
|
+
throw new ApiValidationError("Path parameter validation failed.", 400, errorMessages, validatePathParams.errors);
|
|
548
559
|
}
|
|
549
560
|
|
|
550
561
|
resolvedParams = this._resolveSpecialValuesInPlace(pathParams);
|
|
@@ -571,8 +582,9 @@ export default class ApiClient extends EventEmitter {
|
|
|
571
582
|
const validateRequest = this._ajv.compile(schemaToCompile);
|
|
572
583
|
const valid = validateRequest(cleanedData);
|
|
573
584
|
if (!valid) {
|
|
585
|
+
const errorMessages = this._ajvErrorHuman(validateRequest.errors);
|
|
574
586
|
this.emit("validationError", { stage: "request", errors: validateRequest.errors });
|
|
575
|
-
throw new
|
|
587
|
+
throw new ApiValidationError("Request validation failed.", 400, errorMessages, validateRequest.errors);
|
|
576
588
|
}
|
|
577
589
|
|
|
578
590
|
data = this._resolveSpecialValuesInPlace(cleanedData, resolvedParams);
|
|
@@ -603,8 +615,9 @@ export default class ApiClient extends EventEmitter {
|
|
|
603
615
|
const validateResponse = this._ajv.compile(schema);
|
|
604
616
|
const valid = validateResponse(response.data);
|
|
605
617
|
if (!valid) {
|
|
618
|
+
const errorMessages = this._ajvErrorHuman(validateResponse.errors);
|
|
606
619
|
this.emit("validationError", { stage: "response", errors: validateResponse.errors });
|
|
607
|
-
throw new
|
|
620
|
+
throw new ApiValidationError("Response validation failed.", status, errorMessages, validateResponse.errors);
|
|
608
621
|
}
|
|
609
622
|
}
|
|
610
623
|
}
|
|
@@ -674,6 +687,65 @@ export default class ApiClient extends EventEmitter {
|
|
|
674
687
|
}
|
|
675
688
|
}
|
|
676
689
|
|
|
690
|
+
/**
|
|
691
|
+
* Converts AJV (Another JSON Schema Validator) errors into human-readable messages.
|
|
692
|
+
*
|
|
693
|
+
* @param {Array} errors - An array of AJV validation error objects.
|
|
694
|
+
* @returns {Array<string>} An array of human-readable error messages extracted from the AJV errors.
|
|
695
|
+
*/
|
|
696
|
+
_ajvErrorHuman(errors){
|
|
697
|
+
const errorsMessages = new AggregateAjvError(errors);
|
|
698
|
+
const messages = errorsMessages.errors.map(({ message }) => message);
|
|
699
|
+
return messages;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
/**
|
|
703
|
+
* Checks the API response for errors and throws an `ApiResponseError` if any are found.
|
|
704
|
+
*
|
|
705
|
+
* This method examines the `response.data` object to determine if it contains
|
|
706
|
+
* error information. It handles both standard and nested error cases:
|
|
707
|
+
*
|
|
708
|
+
* - Standard case: If `data.result` is a boolean and is `false`, an error is thrown.
|
|
709
|
+
* - Nested case: If `data.resultErrors` exists and contains a `result` property
|
|
710
|
+
* that is a boolean and is `false`, an error is thrown.
|
|
711
|
+
*
|
|
712
|
+
* If no errors are found, the original `response` is returned.
|
|
713
|
+
*
|
|
714
|
+
* @param {Object} response - The API response object to check.
|
|
715
|
+
* @param {Object} response.data - The data payload of the response.
|
|
716
|
+
* @param {number} response.status - The HTTP status code of the response.
|
|
717
|
+
* @throws {ApiResponseError} If an error is detected in the response data.
|
|
718
|
+
* @returns {Object} The original `response` object if no errors are found.
|
|
719
|
+
*/
|
|
720
|
+
checkAndThrowApiResponseError(response) {
|
|
721
|
+
const data = response.data;
|
|
722
|
+
if (!data || typeof data !== "object") {
|
|
723
|
+
return response;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
// Cas standard : vérifie si data.result vaut false
|
|
727
|
+
if (typeof data.result === "boolean" && data.result === false) {
|
|
728
|
+
throw new ApiResponseError(
|
|
729
|
+
data.msg || "Erreur inconnue",
|
|
730
|
+
response.status,
|
|
731
|
+
data
|
|
732
|
+
);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
// Cas imbriqué : vérifie si data.resultErrors existe et contient une erreur
|
|
736
|
+
if (data.resultErrors && typeof data.resultErrors === "object") {
|
|
737
|
+
if (typeof data.resultErrors.result === "boolean" && data.resultErrors.result === false) {
|
|
738
|
+
throw new ApiResponseError(
|
|
739
|
+
data.resultErrors.msg || "Erreur inconnue",
|
|
740
|
+
response.status,
|
|
741
|
+
data
|
|
742
|
+
);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
return response;
|
|
747
|
+
}
|
|
748
|
+
|
|
677
749
|
/**
|
|
678
750
|
* Réinitialise complètement la session de l'utilisateur :
|
|
679
751
|
* - Token d'accès
|
package/src/api/EntityMixin.js
CHANGED
|
@@ -8,25 +8,31 @@ export const EntityMixin = {
|
|
|
8
8
|
* @returns {Promise<string>} L'identifiant résolu.
|
|
9
9
|
*/
|
|
10
10
|
async resolveId(type) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
11
|
+
if (!this.id && this.slug) {
|
|
12
|
+
try {
|
|
13
|
+
const data = await this._getElementsKey({
|
|
14
14
|
pathParams:{
|
|
15
15
|
slug: this.slug
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
|
-
if(
|
|
19
|
-
|
|
20
|
-
|
|
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;
|
|
21
27
|
} else {
|
|
22
|
-
throw new ApiResponseError(`
|
|
28
|
+
throw new ApiResponseError(`Impossible de récupérer l'identifiant pour le slug ${this.slug}`, error.status, error.responseData);
|
|
23
29
|
}
|
|
24
30
|
} else {
|
|
25
|
-
throw
|
|
31
|
+
throw error;
|
|
26
32
|
}
|
|
27
33
|
}
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
}
|
|
35
|
+
return this.id;
|
|
30
36
|
},
|
|
31
37
|
|
|
32
38
|
/**
|
|
@@ -34,10 +40,210 @@ export const EntityMixin = {
|
|
|
34
40
|
* @returns {Promise<Object>} Les données du profil public.
|
|
35
41
|
*/
|
|
36
42
|
async getPublicProfile() {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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);
|
|
41
245
|
}
|
|
246
|
+
|
|
247
|
+
|
|
42
248
|
};
|
|
43
249
|
|
|
@@ -0,0 +1,168 @@
|
|
|
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
|
+
|