@communecter/cocolight-api-client 1.0.200 → 1.0.202
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/dist/4686.cocolight-api-client.browser.js +1 -1
- package/dist/4686.cocolight-api-client.cjs +1 -1
- package/dist/601.cocolight-api-client.browser.js +1 -1
- package/dist/601.cocolight-api-client.cjs +1 -1
- package/dist/cocolight-api-client.browser.js +1 -1
- package/dist/cocolight-api-client.cjs +1 -1
- package/dist/cocolight-api-client.vite.mjs.js +1 -1
- package/dist/cocolight-api-client.vite.mjs.js.map +1 -1
- package/package.json +1 -1
- package/types/Api.d.ts +7 -0
- package/types/ApiClient.d.ts +15 -3
- package/types/api/BaseEntity.d.ts +28 -0
- package/types/api/Comment.d.ts +49 -6
- package/types/api/Discussions.d.ts +184 -0
- package/types/api/EndpointApi.d.ts +50 -2
- package/types/api/EndpointApi.types.d.ts +145 -6
- package/types/api/News.d.ts +0 -15
- package/types/costum/types.d.ts +8 -0
- package/types/endpoints.module.d.ts +5730 -3400
- package/types/index.d.ts +4 -2
- package/types/utils/logger.d.ts +29 -0
- package/types/utils/validators.d.ts +27 -0
package/package.json
CHANGED
package/types/Api.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Answer } from "./api/Answer.js";
|
|
2
2
|
import { Classified } from "./api/Classified.js";
|
|
3
|
+
import { Discussions } from "./api/Discussions.js";
|
|
3
4
|
import EndpointApi from "./api/EndpointApi.js";
|
|
4
5
|
import { Event } from "./api/Event.js";
|
|
5
6
|
import { Form } from "./api/Form.js";
|
|
@@ -15,6 +16,7 @@ export default class Api {
|
|
|
15
16
|
private _loggedUser;
|
|
16
17
|
private _client;
|
|
17
18
|
private _endpointApi?;
|
|
19
|
+
private _discussions?;
|
|
18
20
|
/**
|
|
19
21
|
* Authentifie l'utilisateur et retourne une instance d'Api.
|
|
20
22
|
*/
|
|
@@ -80,6 +82,11 @@ export default class Api {
|
|
|
80
82
|
* Retourne l'instance d'EndpointApi.
|
|
81
83
|
*/
|
|
82
84
|
get endpointApi(): EndpointApi;
|
|
85
|
+
/**
|
|
86
|
+
* Le panneau « Discussions » et l'espace de discussion d'un commun (spec « module comment » §6-§7) :
|
|
87
|
+
* `api.discussions.list()`, `markSeen()`, `space()`, `create()`. Réponses typées (voir `api/Discussions.ts`).
|
|
88
|
+
*/
|
|
89
|
+
get discussions(): Discussions;
|
|
83
90
|
/**
|
|
84
91
|
* Recherche des tags correspondant à un mot-clé.
|
|
85
92
|
*
|
package/types/ApiClient.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from "events";
|
|
2
|
+
import { type ApiClientLogger } from "./utils/logger.js";
|
|
3
|
+
export type { ApiClientLogger } from "./utils/logger.js";
|
|
2
4
|
import { type TokenStorageStrategy } from "./utils/TokenStorage.js";
|
|
3
5
|
/**
|
|
4
6
|
* Résultat retourné quand une requête est **mise en file** (offline ou breaker).
|
|
@@ -19,7 +21,17 @@ export interface ApiClientOptions {
|
|
|
19
21
|
refreshUrl?: string;
|
|
20
22
|
endpoints?: any[];
|
|
21
23
|
timeout?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Niveau `debug` (sinon `info`) du logger de CE client, sans effet sur les autres. Avec un `logger`
|
|
26
|
+
* fourni : appliqué s'il sait faire des enfants (pino → enfant au niveau `debug`), ignoré sinon.
|
|
27
|
+
*/
|
|
22
28
|
debug?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Logger à utiliser à la place de celui de la lib (pino ou tout objet à `debug/info/warn/error`) :
|
|
31
|
+
* un serveur peut passer le sien, ou un logger muet. Par défaut, un enfant du logger pino partagé
|
|
32
|
+
* du processus (un seul transport par processus, cf. utils/logger.ts).
|
|
33
|
+
*/
|
|
34
|
+
logger?: ApiClientLogger | null;
|
|
23
35
|
maxRetries?: number;
|
|
24
36
|
circuitBreakerThreshold?: number;
|
|
25
37
|
circuitBreakerResetTime?: number;
|
|
@@ -108,7 +120,7 @@ export default class ApiClient extends EventEmitter {
|
|
|
108
120
|
private _offlineClientManager;
|
|
109
121
|
private _ajv;
|
|
110
122
|
private _ajvNoDefaults;
|
|
111
|
-
_logger:
|
|
123
|
+
_logger: ApiClientLogger;
|
|
112
124
|
private _client;
|
|
113
125
|
private readonly _breakerThreshold;
|
|
114
126
|
private readonly _breakerResetTime;
|
|
@@ -121,7 +133,7 @@ export default class ApiClient extends EventEmitter {
|
|
|
121
133
|
private _mode;
|
|
122
134
|
/** Contexte costum du SITE appelant, injecté sur les endpoints qui le déclarent (cf. setSiteCostum). */
|
|
123
135
|
private _siteCostum;
|
|
124
|
-
constructor({ baseURL, accessToken, refreshToken, refreshUrl, endpoints, timeout, debug, maxRetries, circuitBreakerThreshold, circuitBreakerResetTime, fromJSONValue, mode, tokenStorageStrategy, costumForceLive, siteCostum }: ApiClientOptions);
|
|
136
|
+
constructor({ baseURL, accessToken, refreshToken, refreshUrl, endpoints, timeout, debug, logger, maxRetries, circuitBreakerThreshold, circuitBreakerResetTime, fromJSONValue, mode, tokenStorageStrategy, costumForceLive, siteCostum }: ApiClientOptions);
|
|
125
137
|
/**
|
|
126
138
|
* Déclare l'identité costum du SITE APPELANT — l'entité au nom de laquelle ce front agit.
|
|
127
139
|
*
|
|
@@ -217,6 +229,7 @@ export default class ApiClient extends EventEmitter {
|
|
|
217
229
|
private _resetCircuitBreakerSuccess;
|
|
218
230
|
static stripNullsInPlace(obj: any): any;
|
|
219
231
|
private _resolveSpecialValuesInPlace;
|
|
232
|
+
/** Nettoyage « anonyme » d'un schéma (alias `@xxx`), mémoïsé par schéma source — cf. utils/validators.ts. */
|
|
220
233
|
private _cleanSchemaLeftoverAlias;
|
|
221
234
|
/**
|
|
222
235
|
* Safely calls an asynchronous function and handles any errors that occur.
|
|
@@ -458,7 +471,6 @@ export default class ApiClient extends EventEmitter {
|
|
|
458
471
|
* @returns La donnée normalisée.
|
|
459
472
|
*/
|
|
460
473
|
private _normalizeRecursively;
|
|
461
|
-
private _startBeforeEndValidate;
|
|
462
474
|
/**
|
|
463
475
|
* Récupère le schéma de requête pour un endpoint donné.
|
|
464
476
|
* @param constant - Le nom de l'endpoint.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Comment as CommentEntity } from "./Comment.js";
|
|
1
2
|
import type { UpdateSettingsData, UpdateBlockDescriptionData, UpdateBlockInfoData, UpdateBlockSocialData, UpdateBlockLocalityData, GetNewsData, GetGalleryData, GlobalAutocompleteCostumData, CostumEventRequestActorsData, CostumEventRequestSubeventsData, CostumEventRequestDatesData, CostumEventRequestElementEventData, CostumEventRequestCategoriesData, CostumEventRequestEventData, CostumEventRequestLinkTlToEventData, CostumEventRequestLoadContextTagData, GetOrganizationsAdminData, GetOrganizationsNoAdminData, GetProjectsAdminData, GetProjectsNoAdminData, GetPoisAdminData, GetPoisNoAdminData, GetSubscribersData, GetBadgesData, CoformAnswersSearchData, SearchMemberAutocompleteData, GetEventsData, SearchEventsCostumData, CostumFilterCoformData, CostumFilterCoformByPathData, GetCountriesData, SearchZonesData, ZoneGetShapeData, ZoneGetZonirisData, CoformAnswersByFormsData, FundingEnvelopeData, CoremuOperationData, UpdatePathValueData } from "./EndpointApi.types.js";
|
|
2
3
|
import type { CostumRuntimeContext } from "../costum/runtime.js";
|
|
3
4
|
import type { TransformsMap } from "../types/entities.js";
|
|
@@ -1347,6 +1348,33 @@ export declare class BaseEntity<TServerData = any> {
|
|
|
1347
1348
|
* @private
|
|
1348
1349
|
*/
|
|
1349
1350
|
_entityInstanceData<T extends keyof EntityTypeMap>(entityType: T, entityData: object, config?: BaseEntityConfig): EntityTypeMap[T];
|
|
1351
|
+
/**
|
|
1352
|
+
* Créer un commentaire sur cette entité — ou une RÉPONSE, quand `this` est un commentaire
|
|
1353
|
+
* (`Comment._add` remonte alors à l'entité racine pour `contextId`/`contextType`).
|
|
1354
|
+
* Le brouillon est renvoyé non enregistré : `save()` l'envoie (ADD_COMMENTS).
|
|
1355
|
+
*
|
|
1356
|
+
* @param commentData - Champs du message : `text`, `path` (le fil d'une question), `mentions`,
|
|
1357
|
+
* `mediaImg` (§5.1), `markdownActive` (§5.3)…
|
|
1358
|
+
* @returns Instance de Comment (brouillon).
|
|
1359
|
+
* @throws {ApiError} 401 si non connecté.
|
|
1360
|
+
*/
|
|
1361
|
+
comment(commentData?: Record<string, any>): Promise<CommentEntity>;
|
|
1362
|
+
/**
|
|
1363
|
+
* Récupérer les commentaires de cette entité : tous ses fils mêlés (GET_COMMENTS), ou UN fil
|
|
1364
|
+
* désigné par son `path` (GET_COMMENTS_BY_PATH — le `path` passe dans l'URL : posté dans le corps,
|
|
1365
|
+
* le legacy l'ignore). Le `type` vient de `getEntityType()`.
|
|
1366
|
+
*
|
|
1367
|
+
* @param options.path - Le fil d'une question d'un formulaire (segments `[A-Za-z0-9_-]` séparés
|
|
1368
|
+
* par des points, 256 caractères au plus) ; absent ou `null` → tous les fils de l'élément.
|
|
1369
|
+
* @returns Liste de Comment (proxy filtrant les supprimés).
|
|
1370
|
+
* @throws {ApiError} 400 sur un commentaire ou un badge (pas de fil propre) ; 404 si l'entité
|
|
1371
|
+
* n'a pas d'id.
|
|
1372
|
+
* @throws {ApiValidationError} avant tout appel : `type` hors des dix, `path` hors de la règle.
|
|
1373
|
+
* @throws {ApiResponseError} si la réponse n'est pas une liste.
|
|
1374
|
+
*/
|
|
1375
|
+
getComments(options?: {
|
|
1376
|
+
path?: string | null;
|
|
1377
|
+
}): Promise<CommentEntity[]>;
|
|
1350
1378
|
/**
|
|
1351
1379
|
* Crée une instance d'entité, et déclenche get() si certaines propriétés sont présentes.
|
|
1352
1380
|
* @template keyof EntityTypeMap T
|
package/types/api/Comment.d.ts
CHANGED
|
@@ -19,6 +19,55 @@ export declare class Comment extends BaseEntity<CommentItemNormalized> {
|
|
|
19
19
|
get(): Promise<never>;
|
|
20
20
|
save(): Promise<Record<string, any>>;
|
|
21
21
|
_add: (payload: Record<string, any>) => Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Identifiant 24 hex — la forme que le contrat exige partout (`^[a-f0-9]{24}$`).
|
|
24
|
+
*/
|
|
25
|
+
private static _isObjectId;
|
|
26
|
+
/**
|
|
27
|
+
* Mentions, normalisées pour UPDATE_COMMENTS (spec « module comment » §5.2).
|
|
28
|
+
*
|
|
29
|
+
* Une mention RELUE porte plus que le contrat (`avatar`), un `count` en chaîne (`"1"`) que le schéma
|
|
30
|
+
* refuse, et une liste PHP à trous se relit en objet (`{ "0": …, "2": … }`). Une mention dont l'`id`
|
|
31
|
+
* n'est pas un identifiant, ou sans `slug`, est ÉCARTÉE (mentions legacy écrites de travers) : une
|
|
32
|
+
* seule mention de travers ne fait plus refuser toute l'édition. Chacune est ramenée aux six champs
|
|
33
|
+
* du contrat, tous requis.
|
|
34
|
+
*
|
|
35
|
+
* @returns la liste normalisée — vide, rien n'est envoyé et le serveur retire les mentions.
|
|
36
|
+
*/
|
|
37
|
+
static _mentionsForWrite(raw: unknown): Array<{
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
slug: string;
|
|
41
|
+
type: string;
|
|
42
|
+
value: string;
|
|
43
|
+
count: number;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* `mediaImg` ramené à sa forme d'ÉCRITURE (spec §5.1 / §5.2).
|
|
47
|
+
*
|
|
48
|
+
* Le brouillon d'un message relu porte la forme HYDRATÉE (des documents `{ id, imagePath, … }`) :
|
|
49
|
+
* renvoyée telle quelle, elle écrirait ces documents dans le commentaire à la place des identifiants.
|
|
50
|
+
* Chaque entrée — chaîne ou document (`id`, sinon `_id.$id`, `_id._str` ou `_id`) — donne un
|
|
51
|
+
* identifiant ; seuls les `^[a-f0-9]{24}$` restent.
|
|
52
|
+
*
|
|
53
|
+
* @returns `{ countImages, images }`, ou `null` s'il ne reste aucun identifiant — le champ est alors
|
|
54
|
+
* OMIS et le serveur retire `mediaImg` ($unset), ce qui est voulu pour un message sans image.
|
|
55
|
+
*/
|
|
56
|
+
static _mediaImgForWrite(raw: unknown): {
|
|
57
|
+
countImages: number;
|
|
58
|
+
images: string[];
|
|
59
|
+
} | null;
|
|
60
|
+
/**
|
|
61
|
+
* Corriger un message — charge construite en LISTE BLANCHE, exactement celle du schéma
|
|
62
|
+
* `UPDATE_COMMENTS` (`{ id, params }`, fermé) : spec « module comment » §5.2.
|
|
63
|
+
*
|
|
64
|
+
* Le brouillon d'un message relu porte tous les champs de la lecture (`path`, `contextId`,
|
|
65
|
+
* `mentions` hydratées…) ; laissés à la racine, ils faisaient lever `ApiValidationError`. Et les
|
|
66
|
+
* retirer ne suffit pas : le serveur fait `$unset mentions` dès que `params.mentions` manque,
|
|
67
|
+
* `$unset mediaImg` dès que `params.mediaImg` manque, et remet `markdownActive` à faux dès qu'il
|
|
68
|
+
* manque. D'où : mentions normalisées, images réduites à des identifiants, `markdownActive` repris
|
|
69
|
+
* en booléen strict (une chaîne posée au brouillon n'est pas reprise — le schéma la refuserait).
|
|
70
|
+
*/
|
|
22
71
|
_update: (payload: Record<string, any>) => Promise<boolean>;
|
|
23
72
|
addComments(data?: Partial<AddCommentsData>): Promise<unknown>;
|
|
24
73
|
updateComments(data?: Partial<UpdateCommentsData>): Promise<unknown>;
|
|
@@ -27,12 +76,6 @@ export declare class Comment extends BaseEntity<CommentItemNormalized> {
|
|
|
27
76
|
* Constant : DELETE_COMMENT
|
|
28
77
|
*/
|
|
29
78
|
delete(): Promise<void>;
|
|
30
|
-
/**
|
|
31
|
-
* Créer une réponse à ce commentaire (commentaire sur commentaire).
|
|
32
|
-
* @param commentData - Données du commentaire.
|
|
33
|
-
* @returns Instance de Comment.
|
|
34
|
-
*/
|
|
35
|
-
comment(commentData?: Record<string, any>): Promise<Comment>;
|
|
36
79
|
/**
|
|
37
80
|
* Ajoute un vote sur ce commentaire
|
|
38
81
|
*
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type EndpointApi from "./EndpointApi.js";
|
|
2
|
+
import type { CreateDiscussionData, GetDiscussionSpaceData, GetDiscussionsData, MarkCommentsSeenData } from "./EndpointApi.types.js";
|
|
3
|
+
/** Mode d'une liste de discussions : déduit par le serveur du périmètre reçu, jamais élargi. */
|
|
4
|
+
export type DiscussionDepth = "rail" | "fils" | "fil" | "all";
|
|
5
|
+
/** Audience d'une discussion supplémentaire sur un commun. */
|
|
6
|
+
export type DiscussionAudience = "authorAll" | "authorAdmin" | "private";
|
|
7
|
+
/** Lien de la personne connectée avec un porteur : un espace où lancer une discussion, ou un espace croisé. */
|
|
8
|
+
export type DiscussionMembership = "self" | "admin" | "member" | null;
|
|
9
|
+
/** Référence au porteur d'un fil (`null` : fil sans porteur). */
|
|
10
|
+
export interface DiscussionCarrierRef {
|
|
11
|
+
type: string;
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
/** La fiche d'un porteur, sans compteurs (mode `fil`). Le porteur NUL a `id` et `type` à `null`. */
|
|
15
|
+
export interface DiscussionCarrierCard {
|
|
16
|
+
id: string | null;
|
|
17
|
+
type: string | null;
|
|
18
|
+
name: string | null;
|
|
19
|
+
slug: string | null;
|
|
20
|
+
image: string | null;
|
|
21
|
+
}
|
|
22
|
+
/** Un porteur du rail : sa fiche et ses compteurs, calculés pour la session. */
|
|
23
|
+
export interface DiscussionCarrier extends DiscussionCarrierCard {
|
|
24
|
+
/** Nombre de fils sous ce porteur. */
|
|
25
|
+
threads: number;
|
|
26
|
+
/** Messages en tout. */
|
|
27
|
+
total: number;
|
|
28
|
+
/** Messages non lus par la personne connectée. */
|
|
29
|
+
unread: number;
|
|
30
|
+
/** Date du dernier message, en SECONDES ; `null` si aucun. */
|
|
31
|
+
last: number | null;
|
|
32
|
+
/** La personne connectée a écrit dans l'un des fils. */
|
|
33
|
+
mine: boolean;
|
|
34
|
+
membership: DiscussionMembership;
|
|
35
|
+
}
|
|
36
|
+
/** Un fil : le triplet (contextType, contextId, path), ses compteurs, son porteur. */
|
|
37
|
+
export interface DiscussionThread {
|
|
38
|
+
/** `type:id` ou `type:id:path`. */
|
|
39
|
+
key: string;
|
|
40
|
+
contextType: string;
|
|
41
|
+
contextId: string;
|
|
42
|
+
/** Une question d'un formulaire ; `null` partout ailleurs (fil racine). */
|
|
43
|
+
path: string | null;
|
|
44
|
+
/** Texte nu, 120 caractères au plus ; `null` quand l'écran doit nommer. */
|
|
45
|
+
title: string | null;
|
|
46
|
+
carrier: DiscussionCarrierRef | null;
|
|
47
|
+
total: number;
|
|
48
|
+
unread: number;
|
|
49
|
+
/** Secondes ; `null` si aucun message. */
|
|
50
|
+
last: number | null;
|
|
51
|
+
mine: boolean;
|
|
52
|
+
/** Un fil À LANCER, fabriqué à zéro message. */
|
|
53
|
+
virtual: boolean;
|
|
54
|
+
}
|
|
55
|
+
/** Un fil de l'espace d'un commun : les champs d'un fil du panneau, `carrier` toujours `null`, et sa place dans l'appel. */
|
|
56
|
+
export interface DiscussionSpaceThread extends DiscussionThread {
|
|
57
|
+
carrier: null;
|
|
58
|
+
kind: "general" | "discussion" | "question" | "expense";
|
|
59
|
+
/** Nom de l'étape, pour une question ou une ligne de dépense. */
|
|
60
|
+
group: string | null;
|
|
61
|
+
/** Pour une discussion supplémentaire. */
|
|
62
|
+
audience: DiscussionAudience | null;
|
|
63
|
+
/** Clé de la ligne dans la liste des dépenses du commun. */
|
|
64
|
+
line: string | null;
|
|
65
|
+
/** Clé de l'étape où vit la question. */
|
|
66
|
+
step: string | null;
|
|
67
|
+
}
|
|
68
|
+
/** Réponse de `list()` en `rail`, `fils` ou `all` : les porteurs, et leurs fils sauf en `rail`. */
|
|
69
|
+
export interface DiscussionsListResponse {
|
|
70
|
+
result: true;
|
|
71
|
+
depth: "rail" | "fils" | "all";
|
|
72
|
+
limit: number;
|
|
73
|
+
/** La liste a été coupée à `limit`. */
|
|
74
|
+
truncated: boolean;
|
|
75
|
+
/** Des fils manquent pour cet utilisateur : budget de lecture du serveur dépassé. */
|
|
76
|
+
scanTruncated: boolean;
|
|
77
|
+
/** Plus de porteurs vierges qu'il n'en est rendu (500). */
|
|
78
|
+
carriersTruncated: boolean;
|
|
79
|
+
/** Servi par l'index des porteurs (`true`) ou par le balayage du parc : la réponse est la même. */
|
|
80
|
+
indexed: boolean;
|
|
81
|
+
carriers: DiscussionCarrier[];
|
|
82
|
+
/** Absent en `rail`. */
|
|
83
|
+
threads?: DiscussionThread[];
|
|
84
|
+
}
|
|
85
|
+
/** Réponse de `list()` en `fil` : ce seul fil, la fiche de son porteur, le jugement du serveur sur l'écriture. */
|
|
86
|
+
export interface DiscussionThreadResponse {
|
|
87
|
+
result: true;
|
|
88
|
+
depth: "fil";
|
|
89
|
+
thread: DiscussionThread;
|
|
90
|
+
carrier: DiscussionCarrierCard | null;
|
|
91
|
+
canComment: boolean;
|
|
92
|
+
}
|
|
93
|
+
/** Réponse de `list()` : discriminée par `depth`. */
|
|
94
|
+
export type DiscussionsResponse = DiscussionsListResponse | DiscussionThreadResponse;
|
|
95
|
+
/** Réponse de `markSeen()` : combien de messages viennent de passer en « lu » (0 n'est pas une erreur). */
|
|
96
|
+
export interface MarkSeenResponse {
|
|
97
|
+
result: true;
|
|
98
|
+
marked: number;
|
|
99
|
+
}
|
|
100
|
+
/** Réponse de `space()` : tous les fils d'un commun, dans l'ordre du serveur. La liste fait autorité. */
|
|
101
|
+
export interface DiscussionSpaceResponse {
|
|
102
|
+
result: true;
|
|
103
|
+
space: {
|
|
104
|
+
type: "answers";
|
|
105
|
+
id: string;
|
|
106
|
+
title: string | null;
|
|
107
|
+
formId: string;
|
|
108
|
+
};
|
|
109
|
+
/** Seulement : y a-t-il une session. */
|
|
110
|
+
canComment: boolean;
|
|
111
|
+
/** Les audiences que ce lecteur peut donner à une discussion qu'il crée ; vide, il n'en crée pas. */
|
|
112
|
+
creatableAudiences: DiscussionAudience[];
|
|
113
|
+
truncated: boolean;
|
|
114
|
+
threads: DiscussionSpaceThread[];
|
|
115
|
+
}
|
|
116
|
+
/** Réponse de `create()` : le fil créé, vide et `virtual`, avec le `path` à passer à `form.getComments({ path })`. */
|
|
117
|
+
export interface CreateDiscussionResponse {
|
|
118
|
+
result: true;
|
|
119
|
+
thread: DiscussionSpaceThread;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* `api.discussions` — le panneau « Discussions » et l'espace d'un commun.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* const rail = await api.discussions.list(); // les porteurs et leurs compteurs
|
|
126
|
+
* const fil = await api.discussions.list({ contextType: "news", contextId });
|
|
127
|
+
* if (fil.depth === "fil") console.log(fil.thread.unread, fil.canComment);
|
|
128
|
+
* await api.discussions.markSeen({ contextType: "news", contextId, ids });
|
|
129
|
+
* const espace = await api.discussions.space({ contextType: "answers", contextId: commun });
|
|
130
|
+
* const { thread } = await api.discussions.create({ contextType: "answers", contextId: commun, name, audience: "authorAll" });
|
|
131
|
+
*/
|
|
132
|
+
export declare class Discussions {
|
|
133
|
+
private readonly _endpointApi;
|
|
134
|
+
constructor(endpointApi: EndpointApi);
|
|
135
|
+
/**
|
|
136
|
+
* Le panneau « Discussions » de la personne connectée (`GET_DISCUSSIONS`, auth bearer).
|
|
137
|
+
*
|
|
138
|
+
* Le mode se déduit du périmètre : rien → `rail` (porteurs et compteurs, aucun titre de fil) ;
|
|
139
|
+
* `carrier` → `fils` (les fils d'UN porteur) ; `contextType` + `contextId` (+ `path`) → `fil`.
|
|
140
|
+
* `depth: "all"` seul demande tout (jamais implicite) : ne jamais le passer « pour être explicite ».
|
|
141
|
+
* Sans `path`, c'est le fil RACINE qui est rendu, jamais le premier venu.
|
|
142
|
+
*
|
|
143
|
+
* @param options - Corps POST, tous facultatifs, AUCUN défaut injecté.
|
|
144
|
+
* @throws {ApiAuthenticationError} sans jeton, avant tout appel.
|
|
145
|
+
* @throws {ApiValidationError} requête hors schéma (clé inconnue, `includeEmpty` non chaîne…), avant tout appel.
|
|
146
|
+
* @throws {ApiResponseError} refus du serveur — `error.responseData.code` ∈ `bad-request`, `hidden` (neutre : fil introuvable ou réservé).
|
|
147
|
+
*/
|
|
148
|
+
list(options?: GetDiscussionsData): Promise<DiscussionsResponse>;
|
|
149
|
+
/**
|
|
150
|
+
* Marquer un fil comme LU pour la personne connectée (`MARK_COMMENTS_SEEN`, auth bearer).
|
|
151
|
+
*
|
|
152
|
+
* L'utilisateur vient de la session, jamais d'un paramètre. Le `path` absent vise le fil des
|
|
153
|
+
* messages SANS chemin (pas « tous les fils du contexte »). `ids` restreint aux messages AFFICHÉS
|
|
154
|
+
* (500 au plus) : un message arrivé depuis le chargement n'est pas marqué. Rouvrir un fil déjà lu
|
|
155
|
+
* n'écrit rien : `marked` vaut 0.
|
|
156
|
+
*
|
|
157
|
+
* @throws {ApiAuthenticationError} sans jeton, avant tout appel.
|
|
158
|
+
* @throws {ApiValidationError} `ids` vide, > 500 ou mal formé ; contexte hors schéma.
|
|
159
|
+
* @throws {ApiResponseError} refus du serveur — `code` = `bad-request`.
|
|
160
|
+
*/
|
|
161
|
+
markSeen(options: MarkCommentsSeenData): Promise<MarkSeenResponse>;
|
|
162
|
+
/**
|
|
163
|
+
* L'espace de discussion d'un commun (`GET_DISCUSSION_SPACE`, auth none = session FACULTATIVE :
|
|
164
|
+
* le jeton est joint quand il existe, et ne manque à personne).
|
|
165
|
+
*
|
|
166
|
+
* Tous les fils d'une réponse à un appel : général, questions, lignes de dépense, discussions
|
|
167
|
+
* supplémentaires. Un fil rendu est lisible par ce lecteur. Sans session : `canComment: false`,
|
|
168
|
+
* `creatableAudiences: []`.
|
|
169
|
+
*
|
|
170
|
+
* @throws {ApiValidationError} `contextType` ≠ `answers`, `includeEmpty` hors `"0"`/`"1"`, id en majuscules.
|
|
171
|
+
* @throws {ApiResponseError} refus — `code` ∈ `bad-request`, `hidden` (commun ou appel introuvable).
|
|
172
|
+
*/
|
|
173
|
+
space(options: GetDiscussionSpaceData): Promise<DiscussionSpaceResponse>;
|
|
174
|
+
/**
|
|
175
|
+
* Créer une discussion supplémentaire sur un commun (`CREATE_DISCUSSION`, auth bearer) — le
|
|
176
|
+
* bouton « + » de l'espace. La requête ne porte aucun chemin : clé, étape et `path` sont fabriqués
|
|
177
|
+
* par le serveur. Qui peut créer, et avec quelle audience : `creatableAudiences` de l'espace.
|
|
178
|
+
*
|
|
179
|
+
* @throws {ApiAuthenticationError} sans jeton, avant tout appel.
|
|
180
|
+
* @throws {ApiValidationError} audience hors liste, `name` vide ou > 120, clé de trop.
|
|
181
|
+
* @throws {ApiResponseError} refus — `code` ∈ `bad-request`, `hidden`, `forbidden`, `bad-name`, `too-many`, `failed`.
|
|
182
|
+
*/
|
|
183
|
+
create(options: CreateDiscussionData): Promise<CreateDiscussionResponse>;
|
|
184
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type ApiClient from "../ApiClient.js";
|
|
2
|
-
import type { DocumentListData, PersonRegisterData, AuthenticateUrlData, RefreshTokenUrlData, PasswordRecoveryData, PasswordResetData, ServerExchangeTokenData, ChangePasswordData, DeleteAccountData, UpdateSettingsData, UpdateBlockDescriptionData, UpdateBlockInfoData, UpdateBlockSocialData, UpdateBlockLocalityData, UpdateBlockSlugData, CheckData, ProfilImageData, ProfilBannerData, GetElementsAboutData, MulticonnectData, RelaunchInvitationData, ContactSendData, GetNewsData, GetNewsByIdData, AddNewsData, AddImageNewsData, AddFileNewsData, DeleteNewsData, UpdateNewsData, ShareNewsData, GetCommentsData, AddCommentsData, DeleteCommentsData, UpdateCommentsData, SearchTagsData, ShowVoteData, GlobalAutocompleteData, CityAutocompleteData, CityAutocompleteByCountryData, SuggestionInputData, GetProjectsNoAdminData, GetProjectsAdminData, GetPoisNoAdminData, GetPoisAdminData, GlobalAutocompleteAdminCostumData, GetOrganizationsNoAdminData, GetOrganizationsAdminData, GetUserEligiblePlacesData, GetMembersNoAdminData, GetMembersAdminData, GetFriendsAdminData, GetSubscriptionsData, GetSubscriptionsAdminData, GetSubscribersData, GetSubscribersAdminData, GetContributorsNoAdminData, GetContributorsAdminData, GetBadgesData, GetBadgesFiltersData, ConnectData, LinkSetRolesData, CreateInvitationLinkData, ConnectByRefData, DisconnectData, GetElementsKeyData, GetFavorisData, DeleteFavorisData, AddFavorisData, AddOrganizationData, SaveCitoyenData, AddProjectData, AddPoiData, AddEventData, DeleteElementData, AddImageElementData, LinkValidateData, SearchMemberAutocompleteData, GetNotificationsData, GetNotificationsCountData, NotificationUpdateData, MarkNotificationAsReadData, ActivitypubSearchData, ActivitypubLinkData, ActivitypubGetCommunityData, GetBadgeData, AddBadgesData, AssignBadgesData, GetEventsData, SearchEventsCostumData, ShareEventsData, InviteMembersData, FollowData, GetCostumJsonData, GlobalAutocompleteCostumData, NavigatorGettlData, NavigatorGetRessourceTlData, CostumEventRequestActorsData, CostumEventRequestSubeventsData, CostumEventRequestElementEventData, CostumEventRequestCategoriesData, CostumEventRequestDatesData, CostumEventRequestEventData, CostumEventRequestLinkTlToEventData, CostumEventRequestLoadContextTagData, AgendaGetPdfData, GetGalleryData, GetAttendeesNoAdminData, GetAttendeesAdminData, CoformAnswersSearchData, CoformAnswersByIdData, GetCoformByIdData, CoformUploadAnswerFileData, DeleteCoformAnswerFileData, CoformGetAnswerFilesData, GetCoformCatalogsData, SaveCoformAnswerData, GetCoformAnswerHistoryData, GetCoformMultievalDataData, GetCoformCommontableContributorsData, AddVoteData, AddReportAbuseData, UpdatePathValueData, DeleteDocumentByContextData, DeleteDocumentByIdData, DemoteAdminData, CostumFilterCoformData, CostumFilterCoformByPathData, GetCountriesData, SearchZonesData, CoformAnswersByFormsData, CostumToolsCatalogData, CostumToolUsersData, CostumCommunInfoData, CostumSaveToolEnrichmentData, CostumCommunListData, GenerateAnswerFromFormData, GenerateProjectFromAnswerData, GenerateMilestoneFromDepenseData, FundingEnvelopeData, CoremuOperationData, CoremuAddFinancerData, CoremuPayFinancerData, CoremuValidateFinancerPaymentData, CoremuDeleteFinancerData, CostumProjectActionRequestNewData, CostumProjectActionRequestSetStatusData, CostumProjectActionRequestSetDateData, CostumProjectActionRequestSetContributorsData, CostumProjectActionRequestCancelData, CostumProjectActionRequestArchiveData, LinkDiscourseAccountData, UnlinkDiscourseAccountData, DiscourseProfileData, DiscourseCheckEmailData, DiscourseDismissLinkData, LinkMediawikiAccountData, UnlinkMediawikiAccountData, GetMediawikiContributionsData, AddClassifiedData, PersonActivateData, PersonValidateInvitationData, ValidateInvitationByMailData, ImportPreviewData, ExportElementsData, ImportElementsData, GeocodageData, ValidateGroupData, SetSourceData, TransferSourceCheckData, TransferSourceApplyData, TransferSourceRollbackData, TransferSourceHistoryData, ModerateData, NewsModerateData, CommentModerateData, UploadDocumentData, ZoneGetShapeData, ZoneGetZonirisData, CostumListValuesData, CostumResolvedData, DirectoryProposalData, DirectoryProposalCountData, DirectoryProposalNewCounterData, CostumCreateAmpliData, CostumRemoveAmpliData } from "./EndpointApi.types.js";
|
|
2
|
+
import type { DocumentListData, PersonRegisterData, AuthenticateUrlData, RefreshTokenUrlData, PasswordRecoveryData, PasswordResetData, ServerExchangeTokenData, ChangePasswordData, DeleteAccountData, UpdateSettingsData, UpdateBlockDescriptionData, UpdateBlockInfoData, UpdateBlockSocialData, UpdateBlockLocalityData, UpdateBlockSlugData, CheckData, ProfilImageData, ProfilBannerData, GetElementsAboutData, MulticonnectData, RelaunchInvitationData, ContactSendData, GetNewsData, GetNewsByIdData, AddNewsData, AddImageNewsData, AddFileNewsData, DeleteNewsData, UpdateNewsData, ShareNewsData, GetCommentsData, GetCommentsByPathData, AddCommentsData, DeleteCommentsData, UpdateCommentsData, GetDiscussionsData, MarkCommentsSeenData, GetDiscussionSpaceData, CreateDiscussionData, SearchTagsData, ShowVoteData, GlobalAutocompleteData, CityAutocompleteData, CityAutocompleteByCountryData, SuggestionInputData, GetProjectsNoAdminData, GetProjectsAdminData, GetPoisNoAdminData, GetPoisAdminData, GlobalAutocompleteAdminCostumData, GetOrganizationsNoAdminData, GetOrganizationsAdminData, GetUserEligiblePlacesData, GetMembersNoAdminData, GetMembersAdminData, GetFriendsAdminData, GetSubscriptionsData, GetSubscriptionsAdminData, GetSubscribersData, GetSubscribersAdminData, GetContributorsNoAdminData, GetContributorsAdminData, GetBadgesData, GetBadgesFiltersData, ConnectData, LinkSetRolesData, CreateInvitationLinkData, ConnectByRefData, DisconnectData, GetElementsKeyData, GetFavorisData, DeleteFavorisData, AddFavorisData, AddOrganizationData, SaveCitoyenData, AddProjectData, AddPoiData, AddEventData, DeleteElementData, AddImageElementData, LinkValidateData, SearchMemberAutocompleteData, GetNotificationsData, GetNotificationsCountData, NotificationUpdateData, MarkNotificationAsReadData, ActivitypubSearchData, ActivitypubLinkData, ActivitypubGetCommunityData, GetBadgeData, AddBadgesData, AssignBadgesData, GetEventsData, SearchEventsCostumData, ShareEventsData, InviteMembersData, FollowData, GetCostumJsonData, GlobalAutocompleteCostumData, NavigatorGettlData, NavigatorGetRessourceTlData, CostumEventRequestActorsData, CostumEventRequestSubeventsData, CostumEventRequestElementEventData, CostumEventRequestCategoriesData, CostumEventRequestDatesData, CostumEventRequestEventData, CostumEventRequestLinkTlToEventData, CostumEventRequestLoadContextTagData, AgendaGetPdfData, GetGalleryData, GetAttendeesNoAdminData, GetAttendeesAdminData, CoformAnswersSearchData, CoformAnswersByIdData, GetCoformByIdData, CoformUploadAnswerFileData, DeleteCoformAnswerFileData, CoformGetAnswerFilesData, GetCoformCatalogsData, SaveCoformAnswerData, GetCoformAnswerHistoryData, GetCoformMultievalDataData, GetCoformCommontableContributorsData, AddVoteData, AddReportAbuseData, UpdatePathValueData, DeleteDocumentByContextData, DeleteDocumentByIdData, DemoteAdminData, CostumFilterCoformData, CostumFilterCoformByPathData, GetCountriesData, SearchZonesData, CoformAnswersByFormsData, CostumToolsCatalogData, CostumToolUsersData, CostumCommunInfoData, CostumSaveToolEnrichmentData, CostumCommunListData, GenerateAnswerFromFormData, GenerateProjectFromAnswerData, GenerateMilestoneFromDepenseData, FundingEnvelopeData, CoremuOperationData, CoremuAddFinancerData, CoremuPayFinancerData, CoremuValidateFinancerPaymentData, CoremuDeleteFinancerData, CostumProjectActionRequestNewData, CostumProjectActionRequestSetStatusData, CostumProjectActionRequestSetDateData, CostumProjectActionRequestSetContributorsData, CostumProjectActionRequestCancelData, CostumProjectActionRequestArchiveData, LinkDiscourseAccountData, UnlinkDiscourseAccountData, DiscourseProfileData, DiscourseCheckEmailData, DiscourseDismissLinkData, LinkMediawikiAccountData, UnlinkMediawikiAccountData, GetMediawikiContributionsData, AddClassifiedData, PersonActivateData, PersonValidateInvitationData, ValidateInvitationByMailData, ImportPreviewData, ExportElementsData, ImportElementsData, GeocodageData, ValidateGroupData, SetSourceData, TransferSourceCheckData, TransferSourceApplyData, TransferSourceRollbackData, TransferSourceHistoryData, ModerateData, NewsModerateData, CommentModerateData, UploadDocumentData, ZoneGetShapeData, ZoneGetZonirisData, CostumListValuesData, CostumResolvedData, DirectoryProposalData, DirectoryProposalCountData, DirectoryProposalNewCounterData, CostumCreateAmpliData, CostumRemoveAmpliData } from "./EndpointApi.types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Classe EndpointApi générée automatiquement depuis endpoints-copie.json
|
|
5
5
|
*/
|
|
@@ -356,7 +356,16 @@ export declare class EndpointApi {
|
|
|
356
356
|
*/
|
|
357
357
|
getComments(data: GetCommentsData): Promise<any>;
|
|
358
358
|
/**
|
|
359
|
-
*
|
|
359
|
+
* Récupérer les commentaires d'un fil désigné par son path : Récupère les messages d'UN fil d'un élément : ceux dont le `path` est celui demandé (une question d'un formulaire). Sans path (GET_COMMENTS), tous les fils de l'élément sont rendus mêlés. Le path passe dans l'URL : posté dans le corps, il est ignoré (liaison Yii des paramètres d'action).
|
|
360
|
+
* Constant : GET_COMMENTS_BY_PATH
|
|
361
|
+
* @param data - Données envoyées à l'API
|
|
362
|
+
* @returns Les données de réponse.
|
|
363
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
364
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
365
|
+
*/
|
|
366
|
+
getCommentsByPath(data: GetCommentsByPathData): Promise<any>;
|
|
367
|
+
/**
|
|
368
|
+
* Ajouter un commentaire : Ajoute un commentaire à l'un des dix types commentables (actualité, organisation, projet, événement, POI, réponse, formulaire, annonce, action, personne).
|
|
360
369
|
* Constant : ADD_COMMENTS
|
|
361
370
|
* @param data - Données envoyées à l'API
|
|
362
371
|
* @returns Les données de réponse.
|
|
@@ -385,6 +394,45 @@ export declare class EndpointApi {
|
|
|
385
394
|
* @throws {Error} - En cas d'erreur inattendue.
|
|
386
395
|
*/
|
|
387
396
|
updateComments(data: UpdateCommentsData): Promise<any>;
|
|
397
|
+
/**
|
|
398
|
+
* Panneau Discussions : Le panneau « Discussions » de la personne connectée : les porteurs (rail) et leurs fils, ou un seul fil. Le MODE se déduit du périmètre reçu (rien → rail ; carrier → fils ; contextType+contextId → fil) et ne l'élargit jamais ; `depth:"all"` seul demande tout. Aucun texte de message ne transite : titres, compteurs, dates. Les compteurs unread/mine sont calculés pour la session, jamais pour un utilisateur passé en paramètre. Façade : Api.discussions.list().
|
|
399
|
+
* Constant : GET_DISCUSSIONS
|
|
400
|
+
* @param data - Données envoyées à l'API
|
|
401
|
+
* @returns Les données de réponse.
|
|
402
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
403
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
404
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
405
|
+
*/
|
|
406
|
+
getDiscussions(data: GetDiscussionsData): Promise<any>;
|
|
407
|
+
/**
|
|
408
|
+
* Marquer un fil comme lu : Marque comme LUS, pour la personne connectée, les messages d'un fil (views.<userId>.date). L'utilisateur vient de la session. Rouvrir un fil déjà lu n'écrit rien (marked = 0, pas une erreur). Le path absent vise le fil des messages SANS chemin, pas tous les fils du contexte. `ids` RESTREINT aux messages affichés (le contexte et le chemin restent exigés) ; absent, tout le fil. Un fil illisible pour le lecteur rend {result:true, marked:0}. Façade : Api.discussions.markSeen().
|
|
409
|
+
* Constant : MARK_COMMENTS_SEEN
|
|
410
|
+
* @param data - Données envoyées à l'API
|
|
411
|
+
* @returns Les données de réponse.
|
|
412
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
413
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
414
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
415
|
+
*/
|
|
416
|
+
markCommentsSeen(data: MarkCommentsSeenData): Promise<any>;
|
|
417
|
+
/**
|
|
418
|
+
* Espace de discussion d'un commun : Tous les fils d'un commun (une réponse `answers` à un appel) : fil général (answers:<commun>), questions, lignes de dépense et discussions supplémentaires (forms:<appel> avec un path dont le 3e segment est le commun). Session FACULTATIVE (auth none : le jeton est joint quand il existe) ; compteurs et audiences calculés pour la session. La liste fait autorité : un fil rendu est lisible par ce lecteur. Aucun texte de message. Façade : Api.discussions.space().
|
|
419
|
+
* Constant : GET_DISCUSSION_SPACE
|
|
420
|
+
* @param data - Données envoyées à l'API
|
|
421
|
+
* @returns Les données de réponse.
|
|
422
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
423
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
424
|
+
*/
|
|
425
|
+
getDiscussionSpace(data: GetDiscussionSpaceData): Promise<any>;
|
|
426
|
+
/**
|
|
427
|
+
* Créer une discussion supplémentaire sur un commun : Le bouton « + » de l'espace : une discussion de plus sur un commun, nommée, réservée à une audience. La requête ne porte AUCUN chemin : clé, étape et path sont fabriqués par le serveur. Qui crée : admin de l'appel (les trois audiences), déposant du commun ou référent (authorAll, authorAdmin) — la même règle que `creatableAudiences` de l'espace. Le nom est ramené à du texte nu (1 à 120 caractères visibles, sinon refusé, jamais tronqué) ; 50 discussions au plus par commun ; aucune notification. Façade : Api.discussions.create().
|
|
428
|
+
* Constant : CREATE_DISCUSSION
|
|
429
|
+
* @param data - Données envoyées à l'API
|
|
430
|
+
* @returns Les données de réponse.
|
|
431
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
432
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
433
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
434
|
+
*/
|
|
435
|
+
createDiscussion(data: CreateDiscussionData): Promise<any>;
|
|
388
436
|
/**
|
|
389
437
|
* Rechercher des tags : Recherche des tags correspondant à un mot-clé.
|
|
390
438
|
* Constant : SEARCH_TAGS
|