@communecter/cocolight-api-client 1.0.173 → 1.0.180

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.173",
3
+ "version": "1.0.180",
4
4
  "description": "Client Axios simplifié pour l'API cocolight",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1999,12 +1999,20 @@ export declare class BaseEntity<TServerData = any> {
1999
1999
  result: boolean;
2000
2000
  msg?: string;
2001
2001
  }>;
2002
- /** Retire l'élément (type,id) de `reference.costum` du costum de cette entité + nettoie les liens. */
2002
+ /**
2003
+ * Retire l'élément (type,id) de `reference.costum` du costum de cette entité.
2004
+ * ⚠ PAS de `costumId`/`costumType` : aucun caller legacy n'envoie ces clés (institutBleu/meir/
2005
+ * essConnect admin.js postent `{id, type, origin, sourceKey}`), et leur présence déclenche la
2006
+ * branche « Clean links » de `Admin::removeSourceFromElement` — fatale (500) pour les types
2007
+ * absents de `Link::$linksTypes[parent]` (poi…), et destructrice pour les autres (elle
2008
+ * déconnecterait de VRAIS liens membres entre le porteur et l'élément dé-référencé).
2009
+ */
2003
2010
  removeReference(type: string, id: string): Promise<{
2004
2011
  result: boolean;
2005
2012
  msg?: string;
2006
2013
  }>;
2007
- /** Détache l'élément (type,id) de `source.keys` du costum de cette entité (dé-rattachement) + nettoie les liens. */
2014
+ /** Détache l'élément (type,id) de `source.keys` du costum de cette entité (dé-rattachement). Même
2015
+ * parité de payload que `removeReference` : jamais `costumId`/`costumType`. */
2008
2016
  removeFromSource(type: string, id: string): Promise<{
2009
2017
  result: boolean;
2010
2018
  msg?: string;
@@ -2289,6 +2297,43 @@ export declare class BaseEntity<TServerData = any> {
2289
2297
  }): {
2290
2298
  next: () => Promise<PaginatorPage<TOut>>;
2291
2299
  };
2300
+ /**
2301
+ * PÉRIMÈTRE d'une lecture de RELATION (« mes organisations », « les événements de cette orga »…).
2302
+ *
2303
+ * Ces lectures étaient réseau-wide par construction : le contrat imposait `notSourceKey: true`
2304
+ * (`const` + `default`), le client ne pouvait donc rien demander d'autre. Le contrat a été ouvert ;
2305
+ * ce helper porte désormais la règle, pour les neuf méthodes concernées.
2306
+ *
2307
+ * TROIS CAS, et un seul est neuf :
2308
+ * • l'appelant a tranché lui-même (`notSourceKey` présent dans ses données) → on ne touche à rien ;
2309
+ * • il demande un périmètre costum (`sourceKey` non vide) → la clé reste ABSENTE du corps ;
2310
+ * • il ne demande rien → on repose `notSourceKey: true`, le défaut historique, à l'octet près.
2311
+ *
2312
+ * POURQUOI L'ABSENCE, et pas `notSourceKey: false`. La garde serveur est un `empty()`
2313
+ * (`SearchNew.php:999-1002`, et son portage `shared/search.ts:389-391`) :
2314
+ * `if (!empty(sourceKey) && empty(notSourceKey)) buildSourceKey(...)`. Or ces endpoints sont en
2315
+ * `x-www-form-urlencoded` : un `false` part sur le fil en chaîne `"false"`, et `empty("false")` vaut
2316
+ * FAUX. Envoyer `false` désactiverait donc le périmètre exactement comme `true` — la clé est active
2317
+ * dès qu'elle est PRÉSENTE. C'est aussi pourquoi le `default` a dû quitter le contrat : l'AJV du
2318
+ * client tourne en `useDefaults` et l'aurait réinjectée après le finalizer.
2319
+ */
2320
+ protected _applyRelationScope<T extends Record<string, unknown>>(finalData: T): T;
2321
+ /**
2322
+ * Fusionne la clause de RELATION (appartenance, contribution, parenté…) avec les `filters` de
2323
+ * l'appelant, au lieu de l'écraser — et ne pose RIEN quand l'appelant n'envoie pas de `filters`, pour
2324
+ * que le défaut du contrat (résolu par AJV) reste la source et que le corps émis ne bouge pas.
2325
+ *
2326
+ * L'écrasement était la règle jusqu'ici (`getProjects`, `getEvents`, branches non-`isMe`), et il rend
2327
+ * le périmètre costum inutilisable : le `filters` métier de l'appelant emportait la clause. Le miroir
2328
+ * inverse existait aussi — `User.getOrganizations` en `isMe` laissait le `filters` de l'appelant
2329
+ * REMPLACER le défaut d'appartenance, et la liste devenait « toutes les entités » au lieu de
2330
+ * « les miennes ». `getEligiblePlaces` était seul à fusionner ; c'est ce comportement qu'on généralise.
2331
+ */
2332
+ protected _mergeRelationFilters<T extends {
2333
+ filters?: unknown;
2334
+ }>(finalData: T, clause: Record<string, unknown>, options?: {
2335
+ always?: boolean;
2336
+ }): T;
2292
2337
  /**
2293
2338
  * Injection de contexte Communecter dans une requête finalizer.
2294
2339
  */
@@ -1,5 +1,5 @@
1
1
  import type ApiClient from "../ApiClient.js";
2
- import type { DocumentListData, PersonRegisterData, AuthenticateUrlData, RefreshTokenUrlData, PasswordRecoveryData, ServerExchangeTokenData, ChangePasswordData, DeleteAccountData, UpdateSettingsData, UpdateBlockDescriptionData, UpdateBlockInfoData, UpdateBlockSocialData, UpdateBlockLocalityData, UpdateBlockSlugData, CheckData, ProfilImageData, ProfilBannerData, GetElementsAboutData, MulticonnectData, 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, 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, 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 } 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, 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";
3
3
  /**
4
4
  * Classe EndpointApi générée automatiquement depuis endpoints-copie.json
5
5
  */
@@ -101,6 +101,15 @@ export declare class EndpointApi {
101
101
  * @throws {Error} - En cas d'erreur inattendue.
102
102
  */
103
103
  passwordRecovery(data: PasswordRecoveryData): Promise<any>;
104
+ /**
105
+ * Nouveau mot de passe via le lien de récupération : ÉTAPE 2 du flux « mot de passe oublié » : applique le nouveau mot de passe à partir du code reçu par email. L'ÉTAPE 1 est PASSWORD_RECOVERY (POST /co2/person/sendemail), qui pose le code et envoie le lien `/recover/<user>/<code>` — c'est ce lien qui amène ici. ⚠️ SANS ÉQUIVALENT LEGACY — divergence de mécanisme ASSUMÉE et plus sûre : le legacy PHP réinitialise le mot de passe AVANT toute preuve de possession de l'adresse et l'envoie EN CLAIR dans le mail (SendEmailAction.php:39-57), alors qu'ici seul le porteur du code reçu peut changer le mot de passe. Le code est à USAGE UNIQUE et expire (24 h) : la vérification et l'écriture se font dans une seule opération conditionnelle côté backend. Échecs (code faux / expiré / déjà consommé / mot de passe trop court) : HTTP 200 `{result:false, msg}` — le message ne distingue pas les cas (anti-énumération). Anti-brute-force : 10 essais / 10 min par compte visé, 30 / 10 min par IP.
106
+ * Constant : PASSWORD_RESET
107
+ * @param data - Données envoyées à l'API
108
+ * @returns Les données de réponse.
109
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
110
+ * @throws {Error} - En cas d'erreur inattendue.
111
+ */
112
+ passwordReset(data: PasswordResetData): Promise<any>;
104
113
  /**
105
114
  * Échange de token avec un autre serveur : Permet de se connecter à un autre serveur Communecter en échangeant un token.
106
115
  * Constant : SERVER_EXCHANGE_TOKEN
@@ -240,6 +249,16 @@ export declare class EndpointApi {
240
249
  * @throws {Error} - En cas d'erreur inattendue.
241
250
  */
242
251
  multiconnect(data: MulticonnectData): Promise<any>;
252
+ /**
253
+ * Relancer une invitation : Renvoie l'e-mail d'invitation à un compte encore en attente d'activation (roles.tobeactivated). Programme un mail 'relaunchInvitation' avec le lien d'activation. Garde : super-admin OU l'invitant du compte (invitedBy). ⚠ Le port NE reproduit PAS le legacy laxiste (qui répond toujours 200 text/html même en refus, sans garde d'accès réelle) : réponse JSON {result,msg}, garde réelle, anti-abus (3/10min par cible). Refus si le compte est déjà activé.
254
+ * Constant : RELAUNCH_INVITATION
255
+ * @param data - Données envoyées à l'API
256
+ * @returns Les données de réponse.
257
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
258
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
259
+ * @throws {Error} - En cas d'erreur inattendue.
260
+ */
261
+ relaunchInvitation(data: RelaunchInvitationData): Promise<any>;
243
262
  /**
244
263
  * Récupérer les actualités : Récupère la liste d’actualités selon plusieurs critères.
245
264
  * Constant : GET_NEWS
@@ -602,6 +621,26 @@ export declare class EndpointApi {
602
621
  * @throws {Error} - En cas d'erreur inattendue.
603
622
  */
604
623
  connect(data: ConnectData): Promise<any>;
624
+ /**
625
+ * Générer un lien d'invitation partageable : Génère une URL d'invitation partageable /co2/link/connect/ref/<ref> vers un élément (organizations/projects/events). Tout citoyen connecté qui suit le lien rejoint l'élément IMMÉDIATEMENT (member, ou admin si isAdmin). L'appelant doit être ADMIN de la cible (ou super-admin). ⚠ Durcissements vs legacy : whitelist stricte des champs (pas de mass-assignment du body), ref cryptographique (le legacy dérivait uniqid()). Deux appels (isAdmin=true / false) alimentent costum.invitationLink / costum.invitationLinkAsMember côté UI.
626
+ * Constant : CREATE_INVITATION_LINK
627
+ * @param data - Données envoyées à l'API
628
+ * @returns Les données de réponse.
629
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
630
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
631
+ * @throws {Error} - En cas d'erreur inattendue.
632
+ */
633
+ createInvitationLink(data: CreateInvitationLinkData): Promise<any>;
634
+ /**
635
+ * Rejoindre un élément par lien d'invitation : Consomme un lien d'invitation partageable (créé par CREATE_INVITATION_LINK). Le citoyen connecté est rattaché IMMÉDIATEMENT à l'élément cible (pas de toBeValidated), avec inviteByLink:true. Idempotent (déjà membre non-admin → no-op). Le legacy expose aussi un GET server-rendered pour les non-connectés (redirect + cookie) — non porté ; ici seule la branche connectée en JSON.
636
+ * Constant : CONNECT_BY_REF
637
+ * @param data - Données envoyées à l'API
638
+ * @returns Les données de réponse.
639
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
640
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
641
+ * @throws {Error} - En cas d'erreur inattendue.
642
+ */
643
+ connectByRef(data: ConnectByRefData): Promise<any>;
605
644
  /**
606
645
  * Se déconnecter d'un élément : Permet de supprimer le lien entre un utilisateur et un élément.
607
646
  * Constant : DISCONNECT
@@ -1530,5 +1569,41 @@ export declare class EndpointApi {
1530
1569
  * @throws {Error} - En cas d'erreur inattendue.
1531
1570
  */
1532
1571
  zoneGetZoniris(data: ZoneGetZonirisData): Promise<any>;
1572
+ /**
1573
+ * Valeurs d'une liste de costum : Résout UNE liste DYNAMIQUE déclarée d'un costum (costum.lists.<nom>) et renvoie ses VALEURS. Ne sert QUE les dynamiques — {collection,distinct,where} ou {type:badges,category} — car elles seules manquent au client : Costum::getAndConvertLists n'est appelée qu'au rendu des pages PHP et son résultat part dans le costum mis en cache, tandis que getcostumjson livre la déclaration BRUTE. Une liste STATIQUE (tableau, ou map valeur→libellé) porte au contraire ses valeurs dans sa déclaration : elle voyage déjà dans le costum que le client a en mémoire, la demander ici serait un aller-retour pour rien — elle est donc REFUSÉE, avec un message qui dit où la lire. La résolution est faite à la demande, hors cache : les valeurs sont FRAÎCHES, donc une valeur saisie librement apparaît aux suivants. Le client ne choisit ni la collection ni le champ — il demande une liste par son NOM, et c'est la déclaration en base qui porte collection/champ/filtre : la surface exposée est exactement celle que le costum a publiée. Une liste d'ENTITÉS ({collection,where,fields}) est refusée, ses clés étant des ObjectId et non des valeurs.
1574
+ * Constant : COSTUM_LIST_VALUES
1575
+ * @param data - Données envoyées à l'API
1576
+ * @returns Les données de réponse.
1577
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1578
+ * @throws {Error} - En cas d'erreur inattendue.
1579
+ */
1580
+ costumListValues(data: CostumListValuesData): Promise<any>;
1581
+ /**
1582
+ * Annuaire des communs (AAP) : Annuaire des communs AAP (port SDK de DirectoryProposalAction → Aap::globalAutocompleteProposal, citizenToolKit). Gates appliqués par le serveur : form.params.onlyAdminCanSeeList (restreint aux propres réponses + status='vote' sauf admin OU membre porteur de rôles dans les listes aapStep2.canEdit ET aapStep3.canEdit — bypass filters.formStandalone). MODE NORMAL (liste).
1583
+ * Constant : DIRECTORY_PROPOSAL
1584
+ * @param data - Données envoyées à l'API
1585
+ * @returns Les données de réponse.
1586
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1587
+ * @throws {Error} - En cas d'erreur inattendue.
1588
+ */
1589
+ directoryProposal(data: DirectoryProposalData): Promise<any>;
1590
+ /**
1591
+ * Annuaire des communs (AAP) — compte seul : Annuaire des communs AAP (port SDK de DirectoryProposalAction → Aap::globalAutocompleteProposal, citizenToolKit). Gates appliqués par le serveur : form.params.onlyAdminCanSeeList (restreint aux propres réponses + status='vote' sauf admin OU membre porteur de rôles dans les listes aapStep2.canEdit ET aapStep3.canEdit — bypass filters.formStandalone). MODE COUNTONLY (compte sans résultats).
1592
+ * Constant : DIRECTORY_PROPOSAL_COUNT
1593
+ * @param data - Données envoyées à l'API
1594
+ * @returns Les données de réponse.
1595
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1596
+ * @throws {Error} - En cas d'erreur inattendue.
1597
+ */
1598
+ directoryProposalCount(data: DirectoryProposalCountData): Promise<any>;
1599
+ /**
1600
+ * Annuaire des communs (AAP) — compteur de non-vus : Annuaire des communs AAP (port SDK de DirectoryProposalAction → Aap::globalAutocompleteProposal, citizenToolKit). Gates appliqués par le serveur : form.params.onlyAdminCanSeeList (restreint aux propres réponses + status='vote' sauf admin OU membre porteur de rôles dans les listes aapStep2.canEdit ET aapStep3.canEdit — bypass filters.formStandalone). MODE NEWCOUNTER (non-vus de l'utilisateur de session).
1601
+ * Constant : DIRECTORY_PROPOSAL_NEW_COUNTER
1602
+ * @param data - Données envoyées à l'API
1603
+ * @returns Les données de réponse.
1604
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1605
+ * @throws {Error} - En cas d'erreur inattendue.
1606
+ */
1607
+ directoryProposalNewCounter(data: DirectoryProposalNewCounterData): Promise<any>;
1533
1608
  }
1534
1609
  export default EndpointApi;