@communecter/cocolight-api-client 1.0.182 → 1.0.184

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@communecter/cocolight-api-client",
3
- "version": "1.0.182",
3
+ "version": "1.0.184",
4
4
  "description": "Client Axios simplifié pour l'API cocolight",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,6 +1,5 @@
1
1
  import { BaseEntity } from "./BaseEntity.js";
2
2
  import type { AnswerItemNormalized } from "./serverDataType/Answer.js";
3
- import type { CommunInfo } from "./serverDataType/CommunInfo.js";
4
3
  import type { FormItemNormalized } from "./serverDataType/Form.js";
5
4
  type UploadInput = File | Blob | Buffer | import("stream").Readable;
6
5
  /**
@@ -244,19 +243,6 @@ export declare class Answer extends BaseEntity<AnswerItemNormalized> {
244
243
  */
245
244
  private _autoFormIdFromParent;
246
245
  form(): Promise<never>;
247
- /**
248
- * Fiche du **commun** rattaché à un outil : cette Answer EST la réponse AAP du commun
249
- * (`communId = this.id`). `opts.formId` = **verrou de périmètre** (le serveur vérifie
250
- * `answer.form === formId`, endpoint `auth: none`) : sans lui, la requête n'a pas de sens (le
251
- * front ne l'émet pas). Fail-closed → **`null`** en HTTP 200 (jamais de 500) sur entrée invalide.
252
- *
253
- * @example
254
- * const answer = await api.answer({ id: communId });
255
- * const commun = await answer.getCommunInfo({ formId: communFormId }); // CommunInfo | null
256
- */
257
- getCommunInfo(opts?: {
258
- formId?: string;
259
- }): Promise<CommunInfo | null>;
260
246
  /**
261
247
  * Supprime cette Answer côté serveur via `DELETE_ELEMENT`
262
248
  * (`type=answers`, `id=this.id`).
@@ -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, 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, CreateInvitationLinkData, ConnectByRefData, DisconnectData, GetElementsKeyData, GetFavorisData, DeleteFavorisData, AddFavorisData, AddOrganizationData, 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, CostumEventRequestActorsData, CostumEventRequestSubeventsData, CostumEventRequestElementEventData, CostumEventRequestCategoriesData, CostumEventRequestDatesData, CostumEventRequestEventData, CostumEventRequestLinkTlToEventData, CostumEventRequestLoadContextTagData, 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, FundingEnvelopeData, CoremuOperationData, CostumProjectActionRequestNewData, CostumProjectActionRequestSetStatusData, CostumProjectActionRequestSetDateData, CostumProjectActionRequestSetContributorsData, CostumProjectActionRequestCancelData, CostumProjectActionRequestArchiveData, LinkDiscourseAccountData, UnlinkDiscourseAccountData, DiscourseProfileData, DiscourseCheckEmailData, DiscourseDismissLinkData, LinkMediawikiAccountData, UnlinkMediawikiAccountData, GetMediawikiContributionsData, AddClassifiedData, PersonActivateData, ImportPreviewData, ExportElementsData, ImportElementsData, GeocodageData, ValidateGroupData, SetSourceData, ModerateData, NewsModerateData, CommentModerateData, UploadDocumentData, ZoneGetShapeData, ZoneGetZonirisData, CostumListValuesData, DirectoryProposalData, DirectoryProposalCountData, DirectoryProposalNewCounterData } 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, 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, CreateInvitationLinkData, ConnectByRefData, DisconnectData, GetElementsKeyData, GetFavorisData, DeleteFavorisData, AddFavorisData, AddOrganizationData, 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, CostumEventRequestActorsData, CostumEventRequestSubeventsData, CostumEventRequestElementEventData, CostumEventRequestCategoriesData, CostumEventRequestDatesData, CostumEventRequestEventData, CostumEventRequestLinkTlToEventData, CostumEventRequestLoadContextTagData, 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, FundingEnvelopeData, CoremuOperationData, CostumProjectActionRequestNewData, CostumProjectActionRequestSetStatusData, CostumProjectActionRequestSetDateData, CostumProjectActionRequestSetContributorsData, CostumProjectActionRequestCancelData, CostumProjectActionRequestArchiveData, LinkDiscourseAccountData, UnlinkDiscourseAccountData, DiscourseProfileData, DiscourseCheckEmailData, DiscourseDismissLinkData, LinkMediawikiAccountData, UnlinkMediawikiAccountData, GetMediawikiContributionsData, AddClassifiedData, PersonActivateData, PersonValidateInvitationData, ValidateInvitationByMailData, ImportPreviewData, ExportElementsData, ImportElementsData, GeocodageData, ValidateGroupData, SetSourceData, ModerateData, NewsModerateData, CommentModerateData, UploadDocumentData, ZoneGetShapeData, ZoneGetZonirisData, CostumListValuesData, DirectoryProposalData, DirectoryProposalCountData, DirectoryProposalNewCounterData } from "./EndpointApi.types.js";
3
3
  /**
4
4
  * Classe EndpointApi générée automatiquement depuis endpoints-copie.json
5
5
  */
@@ -1499,6 +1499,24 @@ export declare class EndpointApi {
1499
1499
  * @throws {Error} - En cas d'erreur inattendue.
1500
1500
  */
1501
1501
  personActivate(data: PersonActivateData): Promise<any>;
1502
+ /**
1503
+ * Valider une invitation (lien email) — passerelle vers l'inscription : Vérifie la clé d'invitation (sha256(user+email)) et renvoie de quoi ouvrir le bon panneau : REGISTER pré-rempli si l'invité est `pending` (il pose son mot de passe à l'inscription — ≠ activate qui valide un compte existant), LOGIN si le compte est déjà finalisé. PASSERELLE : n'écrit RIEN (port ValidateInvitationAction). Divergence T1 : le legacy répond 302 vers #panel.box-register|login avec les params en query, ici JSON.
1504
+ * Constant : PERSON_VALIDATE_INVITATION
1505
+ * @param data - Données envoyées à l'API
1506
+ * @returns Les données de réponse.
1507
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1508
+ * @throws {Error} - En cas d'erreur inattendue.
1509
+ */
1510
+ personValidateInvitation(data: PersonValidateInvitationData): Promise<any>;
1511
+ /**
1512
+ * Répondre à une invitation par e-mail (Accepter / Refuser) : Répond à une invitation depuis le lien Accepter/Refuser d'un e-mail (l'invité n'est PAS connecté). answer='true' → confirme l'adhésion (retire le flag isInviting des DEUX liens) ; answer='false' → déconnecte les deux liens. Renvoie {result,msg,next?} où next = la cible de redirection legacy : validateinvitation/.../invitation/1 si l'invité est encore tobeactivated (il pose son mot de passe à l'inscription), sinon le deep-link #page.type.<targetType>.id.<targetId>. Port ValidateInvitationByMailAction. Divergence T1 : le legacy répond 302, ici JSON. answer comparé en CHAÎNE. SÉCURITÉ : aucune validationKey sur ce lien (faiblesse legacy, versée au registre sécurité).
1513
+ * Constant : VALIDATE_INVITATION_BY_MAIL
1514
+ * @param data - Données envoyées à l'API
1515
+ * @returns Les données de réponse.
1516
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1517
+ * @throws {Error} - En cas d'erreur inattendue.
1518
+ */
1519
+ validateInvitationByMail(data: ValidateInvitationByMailData): Promise<any>;
1502
1520
  /**
1503
1521
  * Prévisualiser un import (table de contrôle) : Construit la table d'affichage [name, address, warnings, msgError] d'une liste d'éléments déjà vérifiés (Import::createArrayList), pour prévisualiser un import avant insertion.
1504
1522
  * Constant : IMPORT_PREVIEW
@@ -6001,6 +6001,10 @@ export interface CostumToolUsersData {
6001
6001
  * JSON string[] serialise (optionnel)
6002
6002
  */
6003
6003
  inputKeys?: string;
6004
+ /**
6005
+ * Nom normalise de l'outil (normalizeToolName, la meme fonction que ToolsCatalogListAction utilise pour grouper). Filtre INDISPENSABLE en pratique : un criteriaId identifie une ligne du catalogue de BESOINS partagee par toutes les reponses, pas la saisie d'un lieu. Sans lui, le serveur remonte aussi les lieux ayant repondu au meme besoin avec un TOUT AUTRE outil. Optionnel au contrat (absent => comportement inchange, retrocompatible) ; cle-absente != chaine-vide (chaine vide desactive le filtre).
6006
+ */
6007
+ normalizedName?: string;
6004
6008
  /**
6005
6009
  * Slug du costum
6006
6010
  */
@@ -6544,6 +6548,36 @@ export interface PersonActivateData {
6544
6548
  validationKey: string;
6545
6549
  [k: string]: unknown;
6546
6550
  }
6551
+ export interface PersonValidateInvitationData {
6552
+ /**
6553
+ * Identifiant (_id) de l'invité
6554
+ */
6555
+ user: string;
6556
+ /**
6557
+ * Clé = sha256(user + email)
6558
+ */
6559
+ validationKey: string;
6560
+ [k: string]: unknown;
6561
+ }
6562
+ export interface ValidateInvitationByMailData {
6563
+ /**
6564
+ * Identifiant (_id) de l'invité
6565
+ */
6566
+ userId: string;
6567
+ /**
6568
+ * Type de l'élément cible (organizations/projects/events)
6569
+ */
6570
+ targetType: string;
6571
+ /**
6572
+ * Identifiant (_id) de l'élément cible
6573
+ */
6574
+ targetId: string;
6575
+ /**
6576
+ * Réponse en CHAÎNE : 'true' (accepter) / 'false' (refuser)
6577
+ */
6578
+ answer: "true" | "false";
6579
+ [k: string]: unknown;
6580
+ }
6547
6581
  export interface ImportPreviewData {
6548
6582
  /**
6549
6583
  * Liste d'éléments vérifiés à prévisualiser.
@@ -2,6 +2,7 @@ import { BaseEntity } from "./BaseEntity.js";
2
2
  import type { Answer } from "./Answer.js";
3
3
  import type { PaginatorPage, PaginatorState } from "./BaseEntity.js";
4
4
  import type { CoformAnswersSearchData, DirectoryProposalCountData, DirectoryProposalData, DirectoryProposalNewCounterData } from "./EndpointApi.types.js";
5
+ import type { CommunInfo } from "./serverDataType/CommunInfo.js";
5
6
  import type { CoformCommonTableContributor, FormItemNormalized } from "./serverDataType/Form.js";
6
7
  import type { ToolsCatalogPage, ToolsCatalogParams, ToolUser, ToolUsersParams } from "./serverDataType/ToolsCatalog.js";
7
8
  /**
@@ -137,6 +138,24 @@ export declare class Form extends BaseEntity<FormItemNormalized> {
137
138
  * sont sérialisés en JSON (le fil attend une string `string[]` sérialisée).
138
139
  */
139
140
  getToolUsers(params: ToolUsersParams): Promise<ToolUser[]>;
141
+ /**
142
+ * Fiche du **commun** rattaché à un outil — `communinfo` (`auth: none`). `this.id` = le form AAP des
143
+ * communs (verrou de périmètre serveur : `answer.form === formId`) ; `communId` = l'`_id` de la
144
+ * réponse AAP du commun. Le serveur ne renvoie qu'une **projection minimale publique** (jamais le
145
+ * `financer[]` nominatif). Fail-closed → **`null`** en HTTP 200 sur entrée invalide (jamais de 500).
146
+ *
147
+ * Placée sur `Form` (et NON `Answer`) À DESSEIN : `api.answer({ id })` déclenche un `get()`
148
+ * (findanswered, auth none) qui télécharge le doc AAP COMPLET — `financer[]` nominatif inclus —
149
+ * dans le navigateur du visiteur, la fuite que `communinfo` est faite pour éviter. `api.form({ id })`
150
+ * ne charge que la définition (publique) du formulaire.
151
+ *
152
+ * @example
153
+ * const form = await api.form({ id: communFormId });
154
+ * const commun = await form.communInfo({ communId }); // CommunInfo | null
155
+ */
156
+ communInfo(params: {
157
+ communId: string;
158
+ }): Promise<CommunInfo | null>;
140
159
  /**
141
160
  * {@inheritDoc BaseEntity#answer}
142
161
  *
@@ -85,4 +85,48 @@ export declare class UserApi {
85
85
  user: string;
86
86
  validationKey: string;
87
87
  }): Promise<any>;
88
+ /**
89
+ * Valide un lien d'INVITATION reçu par e-mail — PASSERELLE vers l'inscription (ne modifie RIEN,
90
+ * ≠ {@link activateAccount} qui valide un compte existant).
91
+ *
92
+ * Endpoint public (`PERSON_VALIDATE_INVITATION`, aucune auth). Vérifie la clé `sha256(user+email)`
93
+ * puis indique le panneau à ouvrir : `panel:"register"` (invité `pending` — pré-rempli
94
+ * `email`/`name`/`pendingUserId`, il pose son mot de passe à l'inscription) ; `panel:"login"` +
95
+ * `error:"accountAlreadyExists"` (compte déjà finalisé) ; clé fausse → `panel:"register"`,
96
+ * `error:"somethingWrong"`. `error:"unknwonInvitor"` si l'invitant est introuvable.
97
+ *
98
+ * @param params.user - `_id` de l'invité.
99
+ * @param params.validationKey - `sha256(user + email)`.
100
+ * @returns `{ result, panel?, email?, name?, userValidated?, pendingUserId?, invitor?, error?, msg? }`.
101
+ * @throws {ApiResponseError} Si `result === false` (paramètres manquants).
102
+ */
103
+ validateInvitation({ user, validationKey }: {
104
+ user: string;
105
+ validationKey: string;
106
+ }): Promise<any>;
107
+ /**
108
+ * Répond à une invitation depuis le lien Accepter/Refuser d'un e-mail (l'invité n'est PAS connecté).
109
+ *
110
+ * Endpoint public (`VALIDATE_INVITATION_BY_MAIL`, aucune auth). `answer:"true"` confirme l'adhésion
111
+ * (retire le flag `isInviting` des deux liens), `answer:"false"` déconnecte. Renvoie
112
+ * `{ result, msg, next? }` où `next` = la cible de redirection legacy : le lien `validateinvitation`
113
+ * (→ {@link validateInvitation}) si l'invité est encore à activer (il pose alors son mot de passe),
114
+ * sinon le deep-link `#page.type.<targetType>.id.<targetId>`.
115
+ *
116
+ * ⚠️ Contrairement à {@link validateInvitation}, `result:false` n'est PAS levé en erreur : c'est un
117
+ * cas NORMAL (idempotence — un 2ᵉ « Accepter » ne retrouve plus le flag). L'appelant lit
118
+ * `{ result, msg, next }` uniformément et dégrade en « déjà répondu » sur `result:false`.
119
+ *
120
+ * @param params.userId - `_id` de l'invité.
121
+ * @param params.targetType - type de l'élément cible (organizations/projects/events).
122
+ * @param params.targetId - `_id` de l'élément cible.
123
+ * @param params.answer - `"true"` (accepter) / `"false"` (refuser), en CHAÎNE.
124
+ * @returns `{ result: boolean, msg: string, next?: string }`.
125
+ */
126
+ validateInvitationByMail({ userId, targetType, targetId, answer }: {
127
+ userId: string;
128
+ targetType: string;
129
+ targetId: string;
130
+ answer: "true" | "false";
131
+ }): Promise<any>;
88
132
  }
@@ -127,4 +127,11 @@ export interface ToolUsersParams {
127
127
  /** tableau brut ou déjà sérialisé — la méthode le sérialise en JSON si tableau */
128
128
  criteriaIds: string | string[];
129
129
  inputKeys?: string | string[];
130
+ /**
131
+ * Nom normalisé de l'outil (`ToolCatalogItem.normalizedName`) — à TOUJOURS transmettre en pratique :
132
+ * un `criteriaId` désigne une ligne du catalogue de BESOINS partagée par toutes les réponses, pas la
133
+ * saisie d'un lieu. Sans lui, le serveur remonte aussi les lieux ayant répondu au même besoin avec un
134
+ * TOUT AUTRE outil. Optionnel au contrat (rétrocompatible) ; clé-absente ≠ chaîne-vide.
135
+ */
136
+ normalizedName?: string;
130
137
  }