@communecter/cocolight-api-client 1.0.193 → 1.0.195

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.193",
3
+ "version": "1.0.195",
4
4
  "description": "Client Axios simplifié pour l'API cocolight",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,6 +12,14 @@ import type { ActionItemNormalized } from "./serverDataType/Action.js";
12
12
  * - `_add()` : COSTUM_PROJECT_ACTION_REQUEST_NEW (parentId/parentType injectés depuis le parent)
13
13
  * - `_update()` : UPDATE_PATH_VALUE field par field via CUSTOM_FIELD_HANDLERS
14
14
  * (pas d'endpoint dédié par bloc côté backend — on dispatche chaque champ modifié)
15
+ *
16
+ * Droits (gardes client) :
17
+ * - `_update()` : **auteur** (`serverData.creator`), **admin du projet parent** (via
18
+ * hiérarchie), ou **contributeur assigné** (`links.contributors[userId]`) ;
19
+ * - `delete()` : auteur ou admin seulement — supprimer est plus fort que corriger.
20
+ *
21
+ * Ces gardes restent indicatifs : l'autorité est le backend, qui pour l'édition accepte
22
+ * tout membre du projet parent (`Authorisation::canEditItem` → `canParticipate`).
15
23
  */
16
24
  export declare class Action extends BaseEntity<ActionItemNormalized> {
17
25
  static entityType: string;
@@ -263,8 +271,9 @@ export declare class Action extends BaseEntity<ActionItemNormalized> {
263
271
  * - Project : regarde `user.serverData.links.projects[projectId]` (sens user→project)
264
272
  * - Action : regarde `action.serverData.links.contributors[userId]` (sens inverse)
265
273
  *
266
- * Pour modifier des données de l'action, c'est `parent.isAdmin()` qui compte
267
- * (admin du projet parent) — pas cette méthode.
274
+ * Être contributeur assigné suffit à MODIFIER l'action (`_update` accepte auteur,
275
+ * admin du projet parent, ou contributeur), mais **pas à la supprimer** : `delete()`
276
+ * exige auteur ou admin.
268
277
  *
269
278
  * @param options.silent si `false`, throw en cas de précondition manquante. Par défaut `true`.
270
279
  */
@@ -43,6 +43,70 @@ export interface GenerateProjectResult {
43
43
  export interface GenerateMilestoneFromDepenseResult {
44
44
  milestoneId: string;
45
45
  }
46
+ /**
47
+ * Statut de paiement d'une ligne de financement, dans le vocabulaire du serveur.
48
+ *
49
+ * ⚠️ `payed` (sic) est la valeur réellement écrite par `Aap::recomputeFinancerPayment`
50
+ * (Aap.php:7179) — ce n'est pas `paid`. Traduire à l'affichage si besoin, mais ne
51
+ * jamais « corriger » la valeur stockée.
52
+ */
53
+ export type FinancerPaymentStatus = "unpaid" | "partial" | "payed";
54
+ /** Un versement journalisé dans `financer[i].payment.logs[]`. */
55
+ export interface FinancerPaymentLog {
56
+ invoiceId?: string;
57
+ financerId?: string;
58
+ financerName?: string;
59
+ finkey?: string;
60
+ amount?: number;
61
+ /** `"manual"` | `"stripe"` | `"helloasso"`. */
62
+ type?: string;
63
+ date?: unknown;
64
+ /** `"pending"` tant que le porteur n'a pas confirmé la réception des fonds. */
65
+ confirmation?: "pending" | "validated";
66
+ paidBy?: string;
67
+ validatedAt?: unknown;
68
+ validatedBy?: string;
69
+ /** Référence du prestataire de paiement, pour un encaissement en ligne. */
70
+ transactionId?: string;
71
+ }
72
+ /**
73
+ * Bloc `payment` d'une ligne de financement, recalculé par le serveur à chaque
74
+ * versement et à chaque validation.
75
+ *
76
+ * ⚠️ Seuls les logs `validated` alimentent `paidAmount` : un versement encaissé
77
+ * mais non confirmé figure en `pendingAmount`, et `status` reste `"unpaid"`.
78
+ */
79
+ export interface FinancerPaymentBlock {
80
+ logs?: FinancerPaymentLog[];
81
+ paidAmount?: number;
82
+ pendingAmount?: number;
83
+ status?: FinancerPaymentStatus;
84
+ }
85
+ /** Résultat de `Answer.addFinancer()`. `finkey` est la clé stable de la ligne créée. */
86
+ export interface AddFinancerResult {
87
+ depenseKey: string;
88
+ finkey: string;
89
+ finIndex?: number;
90
+ }
91
+ /** Résultat de `Answer.payFinancer()`. */
92
+ export interface PayFinancerResult {
93
+ /** Identifiant du versement — à conserver pour le valider ensuite. */
94
+ invoiceId: string;
95
+ /** `"validated"` seulement si celui qui enregistre administre le projet receveur. */
96
+ confirmation: "pending" | "validated";
97
+ /** Bloc `payment` tel que le serveur l'a recalculé après le versement. */
98
+ payment?: FinancerPaymentBlock;
99
+ }
100
+ /** Résultat de `Answer.validateFinancerPayment()`. */
101
+ export interface ValidateFinancerPaymentResult {
102
+ invoiceId: string;
103
+ confirmation: "validated";
104
+ }
105
+ /** Résultat de `Answer.deleteFinancer()`. `remaining` = financeurs restants sur la dépense. */
106
+ export interface DeleteFinancerResult {
107
+ depenseKey: string;
108
+ remaining: number;
109
+ }
46
110
  /** Un axe du radar multi-eval (= un input radioNew d'une step donnée). */
47
111
  export interface MultiEvalAxis {
48
112
  key: string;
@@ -272,27 +336,42 @@ export declare class Answer extends BaseEntity<AnswerItemNormalized> {
272
336
  * - `serverData` et `draftData` sont vidés (sans casser la réactivité)
273
337
  * - `_isDeleted = true` → toute mutation ultérieure (`save`, `get`, etc.) throw
274
338
  *
275
- * **Guard** : autorisation côté client si l'utilisateur courant est :
339
+ * **Guard** (déléguée à `_deleteViaElement`) : autorisation côté client si
340
+ * l'utilisateur courant est :
341
+ * - **super-admin**, ou **admin de costum** dont le droit a été pré-résolu par
342
+ * l'appelant via `setCostumAdminAuthorized()` — parité du backend
343
+ * `canDeleteElement` (`isUserSuperAdmin` puis `isCostumAdmin`) ; OU
276
344
  * - l'**auteur** de l'Answer (`serverData.user === userId`), OU
277
345
  * - **admin** d'un parent du Form (org/project) via la hiérarchie
278
- * (`form.serverData.parent[orgId]` × `userContext.links.memberOf[orgId].isAdmin`).
346
+ * (`form.serverData.parent[orgId]` × `userContext.links.memberOf[orgId].isAdmin`),
347
+ * résolue par l'override `Answer._isAdminViaHierarchy`.
279
348
  *
280
- * Le check utilise `isAuthorOrAdmin({checkHierarchy: true})` qui s'appuie sur
281
- * l'override `Answer._isAdminViaHierarchy` (remonte via parent instance Form).
282
- *
283
- * **Pré-requis** :
349
+ * **Pré-requis** pour la branche hiérarchie :
284
350
  * - `this.parent` doit être un Form (cas `form.answer({id})`)
285
351
  * - `userContext` (User connecté) doit avoir `serverData.links` chargés (cas `api.me()`)
286
- * Sans ces pré-requis, seul `isAuthor` peut autoriser.
352
+ * Sans ces pré-requis, seuls `isAuthor` et le droit élevé peuvent autoriser.
353
+ *
354
+ * ⚠️ `isAuthor()` lit `serverData.user`, que `findanswered` REMPLACE par
355
+ * l'entité d'affichage (l'organisation, sur une réponse portée par une orga) ;
356
+ * le déposant reste dans `serverData.userId`. Sur ces réponses-là, la branche
357
+ * auteur ne reconnaît donc pas le véritable auteur.
358
+ *
359
+ * Le serveur reste la source de vérité dans tous les cas.
287
360
  *
288
361
  * @param reason - Raison libre transmise au backend (audit). Défaut : `"delete coform answer"`.
289
362
  * @throws {ApiError} 400 si l'Answer n'a pas d'id (jamais sauvegardée).
290
- * @throws {ApiError} 403 si ni auteur ni admin du parent.
363
+ * @throws {ApiError} 403 si ni droit élevé, ni auteur, ni admin du parent.
291
364
  *
292
365
  * @example
293
366
  * const answer = await form.answer({ id: "..." });
294
367
  * await answer.delete(); // OK si auteur OU admin org/project parent du Form
295
368
  * answer._isDeleted; // true
369
+ *
370
+ * @example
371
+ * // Admin de costum : poser le droit AVANT l'appel, sinon la garde client refuse.
372
+ * const answer = await form.answer({ id: "..." });
373
+ * answer.setCostumAdminAuthorized();
374
+ * await answer.delete();
296
375
  */
297
376
  delete(reason?: string): Promise<void>;
298
377
  /**
@@ -440,6 +519,145 @@ export declare class Answer extends BaseEntity<AnswerItemNormalized> {
440
519
  * const { milestoneId } = await answer.generateMilestoneFromDepense("0");
441
520
  */
442
521
  generateMilestoneFromDepense(depenseKey: string): Promise<GenerateMilestoneFromDepenseResult>;
522
+ /**
523
+ * Traduit une réponse d'échec du dispatcher `coremuoperation` en `ApiError`.
524
+ *
525
+ * Le backend répond toujours HTTP 200 avec `{success: 0, msg}` (ou
526
+ * `{success: 0, content}` pour la validation du dispatcher) : sans cette
527
+ * traduction, un refus de droits passerait pour un succès. Le code HTTP est
528
+ * déduit du message, seule information que le serveur donne sur la nature du
529
+ * refus (`Aap.php:7285-7618`).
530
+ */
531
+ private static financerOperationError;
532
+ /**
533
+ * Ajoute une promesse de financement sur une dépense de cette Answer.
534
+ *
535
+ * L'entrée écrite dans `answers.aapStep1.depense.<depenseKey>.financer[]` est
536
+ * construite **par le serveur**, au format canonique : `finkey` (clé stable de
537
+ * la ligne), `line`, `status: "pending"` et `payment: {logs: []}`. Ne jamais
538
+ * fabriquer cette entrée côté client — `finkey` vient de `random_bytes` serveur,
539
+ * et les agrégats de `payment` sont recalculés à chaque versement.
540
+ *
541
+ * Préférer `milestoneId` à `depenseKey` : le serveur résout alors la clé
542
+ * lui-même, ce qui évite de confondre la **clé** du sous-document dépense
543
+ * (ex. `"3"`) avec sa **position** dans la liste densifiée — `depense` arrive
544
+ * parfois en objet à clés creuses.
545
+ *
546
+ * Constant : `COREMU_ADD_FINANCER` (POST `/co2/aap/coremuoperation/`, auth bearer —
547
+ * le backend lit `Yii::app()->session['userId']`, alimentée par le JWT).
548
+ *
549
+ * @param opts.financerId - Qui s'engage : soi-même, une organisation qu'on
550
+ * administre, ou un tiers si l'on est porteur du projet.
551
+ * @param opts.amount - Montant engagé, strictement positif.
552
+ * @param opts.milestoneId - Jalon visé (recommandé).
553
+ * @param opts.depenseKey - Clé de la dépense — requise seulement sans `milestoneId`.
554
+ * @returns `{ depenseKey, finkey, finIndex }` — conserver `finkey` : c'est par
555
+ * elle que se cible le versement.
556
+ * @throws {ApiError} 400 si Answer sans id, si ni `milestoneId` ni `depenseKey`
557
+ * n'est fourni, ou si la dépense est introuvable.
558
+ * @throws {ApiError} 403 si l'on ne peut pas s'engager pour ce financeur.
559
+ * @throws {ApiAuthenticationError} si non connecté.
560
+ *
561
+ * @example
562
+ * const { finkey, depenseKey } = await answer.addFinancer({
563
+ * milestoneId, financerId: me.id, amount: 1000,
564
+ * });
565
+ */
566
+ addFinancer(opts: {
567
+ financerId: string;
568
+ amount: number;
569
+ milestoneId?: string;
570
+ depenseKey?: string;
571
+ }): Promise<AddFinancerResult>;
572
+ /**
573
+ * Enregistre un versement sur une promesse de financement de cette Answer.
574
+ *
575
+ * ⚠️ Le montant n'est **comptabilisé** (`payment.paidAmount`) qu'une fois le
576
+ * versement validé par le porteur. Le log naît `confirmation: "validated"`
577
+ * seulement si celui qui enregistre administre le projet receveur ; sinon il
578
+ * naît `"pending"`. Un encaissement Stripe/HelloAsso par un tiers est donc
579
+ * réellement encaissé mais compté en `pendingAmount` jusqu'à confirmation —
580
+ * l'UI ne doit pas annoncer « non payé » à qui vient de régler par carte.
581
+ *
582
+ * Toujours passer `finkey` : le ciblage par position casse dès qu'une
583
+ * insertion concurrente décale `financer[]`.
584
+ *
585
+ * Constant : `COREMU_PAY_FINANCER` (POST `/co2/aap/coremuoperation/`, auth bearer).
586
+ *
587
+ * @param opts.amount - Montant versé. Un versement partiel est légitime.
588
+ * @param opts.paymentType - `"manual"` (défaut), `"stripe"` ou `"helloasso"`.
589
+ * @param opts.transactionId - Référence du prestataire de paiement, journalisée
590
+ * avec le versement.
591
+ * @returns `{ invoiceId, confirmation, payment }` — `invoiceId` sert à valider
592
+ * le versement ensuite.
593
+ * @throws {ApiError} 400 si Answer sans id ou arguments invalides ; 403 si l'on
594
+ * ne peut pas verser pour ce financeur ; 404 si la ligne est introuvable.
595
+ * @throws {ApiAuthenticationError} si non connecté.
596
+ *
597
+ * @example
598
+ * const { invoiceId, payment } = await answer.payFinancer({
599
+ * depenseKey, financerId, finkey, amount: 500, paymentType: "stripe",
600
+ * });
601
+ * payment.status; // "unpaid" tant que le porteur n'a pas validé
602
+ */
603
+ payFinancer(opts: {
604
+ depenseKey: string;
605
+ financerId: string;
606
+ amount: number;
607
+ finkey?: string;
608
+ finIndex?: number;
609
+ paymentType?: string;
610
+ transactionId?: string;
611
+ }): Promise<PayFinancerResult>;
612
+ /**
613
+ * Valide un versement reçu : le porteur confirme avoir touché les fonds.
614
+ *
615
+ * C'est ce passage à `validated` qui fait entrer le montant dans
616
+ * `payment.paidAmount` — avant lui, l'argent figure en `pendingAmount`.
617
+ * Réservé à l'admin du projet, à l'admin de l'organisation parente ou à un
618
+ * super-admin : le financeur ne valide pas son propre versement.
619
+ *
620
+ * Constant : `COREMU_VALIDATE_FINANCER_PAYMENT` (POST `/co2/aap/coremuoperation/`, auth bearer).
621
+ *
622
+ * @param opts.invoiceId - Identifiant du versement, rendu par `payFinancer`.
623
+ * @throws {ApiError} 400 si Answer sans id ou arguments manquants ; 403 si l'on
624
+ * n'administre pas le projet ; 404 si aucun log ne porte cet `invoiceId`.
625
+ * @throws {ApiAuthenticationError} si non connecté.
626
+ *
627
+ * @example
628
+ * await answer.validateFinancerPayment({ depenseKey, invoiceId });
629
+ */
630
+ validateFinancerPayment(opts: {
631
+ depenseKey: string;
632
+ invoiceId: string;
633
+ }): Promise<ValidateFinancerPaymentResult>;
634
+ /**
635
+ * Retire une promesse de financement de cette Answer.
636
+ *
637
+ * **Refusé (409) dès que la ligne porte un versement**, même non validé :
638
+ * supprimer la promesse effacerait la trace de l'argent.
639
+ *
640
+ * Droits plus étroits que pour l'ajout : seul le financeur, ou l'admin de
641
+ * l'organisation financeuse, peut retirer un engagement — administrer le projet
642
+ * receveur ne suffit pas.
643
+ *
644
+ * Constant : `COREMU_DELETE_FINANCER` (POST `/co2/aap/coremuoperation/`, auth bearer).
645
+ *
646
+ * @returns `{ depenseKey, remaining }` — `remaining` = financeurs restants sur la dépense.
647
+ * @throws {ApiError} 400 si Answer sans id ou arguments manquants ; 403 si l'on
648
+ * ne peut pas agir pour ce financeur ; 404 si la ligne est introuvable ;
649
+ * 409 si un versement y est déjà rattaché.
650
+ * @throws {ApiAuthenticationError} si non connecté.
651
+ *
652
+ * @example
653
+ * const { remaining } = await answer.deleteFinancer({ depenseKey, financerId, finkey });
654
+ */
655
+ deleteFinancer(opts: {
656
+ depenseKey: string;
657
+ financerId: string;
658
+ finkey?: string;
659
+ finIndex?: number;
660
+ }): Promise<DeleteFinancerResult>;
443
661
  /**
444
662
  * Récupère les datasets agrégés des évaluations multiples (radar) de cette
445
663
  * Answer. Pour une réponse partagée contenant des inputs `radioNew` avec
@@ -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, 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, NavigatorGetRessourceTlData, 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, GenerateProjectFromAnswerData, GenerateMilestoneFromDepenseData, 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, TransferSourceCheckData, TransferSourceApplyData, TransferSourceRollbackData, TransferSourceHistoryData, ModerateData, NewsModerateData, CommentModerateData, UploadDocumentData, ZoneGetShapeData, ZoneGetZonirisData, CostumListValuesData, CostumResolvedData, 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, 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, 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, NavigatorGetRessourceTlData, 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, 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 } from "./EndpointApi.types.js";
3
3
  /**
4
4
  * Classe EndpointApi générée automatiquement depuis endpoints-copie.json
5
5
  */
@@ -1380,6 +1380,46 @@ export declare class EndpointApi {
1380
1380
  * @throws {Error} - En cas d'erreur inattendue.
1381
1381
  */
1382
1382
  coremuOperation(data: CoremuOperationData): Promise<any>;
1383
+ /**
1384
+ * Ajouter une promesse de financement sur une dépense : Crée un engagement de financement dans answers.aapStep1.depense.<depenseKey>.financer[] au format canonique : {line:'', amount, user, date, name, id, type, status:'pending', finkey, payment:{logs:[]}}. La `finkey` (clé stable de la ligne) et le nom/type du financeur sont résolus SERVEUR — ne jamais les envoyer. Aap::addFinancerEngagement (Aap.php:7285-7362). Droits : financeur lui-même, admin de l'organisation financeuse, ou porteur du projet (Aap.php:7313). Dispatch : CoremuOperationAction.php:175-186 (switch sur $_POST['action']), route déclarée dans modules/co2/controllers/AapController.php:74. auth bearer : le backend lit Yii::app()->session['userId'], alimentée par le JWT via CommunecterController::beforeAction → Authorisation::isJwtconnected → Person::saveUserSessionData.
1385
+ * Constant : COREMU_ADD_FINANCER
1386
+ * @param data - Données envoyées à l'API
1387
+ * @returns Les données de réponse.
1388
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1389
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
1390
+ * @throws {Error} - En cas d'erreur inattendue.
1391
+ */
1392
+ coremuAddFinancer(data: CoremuAddFinancerData): Promise<any>;
1393
+ /**
1394
+ * Enregistrer un versement sur une promesse de financement : Pousse un log dans financer[i].payment.logs[] et recalcule paidAmount/pendingAmount/status. `invoiceId` est généré serveur ('FIN-'+YmdHis+'-'+5 premiers car. du financerId). Le log naît confirmation:'validated' si le payeur administre le projet receveur, sinon 'pending' — un encaissement Stripe/HelloAsso par un tiers reste donc en attente de confirmation du porteur, et n'entre PAS dans paidAmount tant qu'il n'est pas validé. Aap::payFinancerEngagement (Aap.php:7468-7562). Dispatch : CoremuOperationAction.php:175-186 (switch sur $_POST['action']), route déclarée dans modules/co2/controllers/AapController.php:74. auth bearer : le backend lit Yii::app()->session['userId'], alimentée par le JWT via CommunecterController::beforeAction → Authorisation::isJwtconnected → Person::saveUserSessionData.
1395
+ * Constant : COREMU_PAY_FINANCER
1396
+ * @param data - Données envoyées à l'API
1397
+ * @returns Les données de réponse.
1398
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1399
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
1400
+ * @throws {Error} - En cas d'erreur inattendue.
1401
+ */
1402
+ coremuPayFinancer(data: CoremuPayFinancerData): Promise<any>;
1403
+ /**
1404
+ * Valider un versement reçu sur une promesse de financement : Le porteur confirme avoir reçu les fonds : passe le log d'`invoiceId` à confirmation:'validated', pose validatedAt/validatedBy, puis recalcule le bloc payment — c'est ce passage qui fait entrer le montant dans paidAmount. Réservé à l'admin du projet, l'admin de l'organisation parente ou un super-admin (Aap.php:7577). Aap::validateFinancerPayment (Aap.php:7559-7618). Dispatch : CoremuOperationAction.php:175-186 (switch sur $_POST['action']), route déclarée dans modules/co2/controllers/AapController.php:74. auth bearer : le backend lit Yii::app()->session['userId'], alimentée par le JWT via CommunecterController::beforeAction → Authorisation::isJwtconnected → Person::saveUserSessionData.
1405
+ * Constant : COREMU_VALIDATE_FINANCER_PAYMENT
1406
+ * @param data - Données envoyées à l'API
1407
+ * @returns Les données de réponse.
1408
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1409
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
1410
+ * @throws {Error} - En cas d'erreur inattendue.
1411
+ */
1412
+ coremuValidateFinancerPayment(data: CoremuValidateFinancerPaymentData): Promise<any>;
1413
+ /**
1414
+ * Retirer une promesse de financement : Retire un engagement de financer[]. REFUSÉ si la ligne porte le moindre versement, même non validé : effacer la promesse effacerait la trace de l'argent (Aap.php:7408-7414). Droits plus étroits que pour l'ajout — seul le financeur ou l'admin de l'organisation financeuse peut retirer ; administrer le projet receveur ne suffit PAS (Aap.php:7404). Aap::deleteFinancerEngagement (Aap.php:7377-7430). Dispatch : CoremuOperationAction.php:175-186 (switch sur $_POST['action']), route déclarée dans modules/co2/controllers/AapController.php:74. auth bearer : le backend lit Yii::app()->session['userId'], alimentée par le JWT via CommunecterController::beforeAction → Authorisation::isJwtconnected → Person::saveUserSessionData.
1415
+ * Constant : COREMU_DELETE_FINANCER
1416
+ * @param data - Données envoyées à l'API
1417
+ * @returns Les données de réponse.
1418
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
1419
+ * @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
1420
+ * @throws {Error} - En cas d'erreur inattendue.
1421
+ */
1422
+ coremuDeleteFinancer(data: CoremuDeleteFinancerData): Promise<any>;
1383
1423
  /**
1384
1424
  * Ajouter nouvel action : Crée une nouvelle action rattachée à un projet.
1385
1425
  * Constant : COSTUM_PROJECT_ACTION_REQUEST_NEW
@@ -2102,6 +2102,10 @@ export interface GetMembersNoAdminData {
2102
2102
  * Flag pour ne pas filtrer sur une clé de source spécifique
2103
2103
  */
2104
2104
  notSourceKey: true;
2105
+ /**
2106
+ * Liste des champs à retourner
2107
+ */
2108
+ fields?: string[];
2105
2109
  filters: {
2106
2110
  [k: string]: unknown;
2107
2111
  };
@@ -2180,6 +2184,10 @@ export interface GetMembersAdminData {
2180
2184
  * Flag pour ne pas filtrer sur une clé de source spécifique
2181
2185
  */
2182
2186
  notSourceKey: true;
2187
+ /**
2188
+ * Liste des champs à retourner
2189
+ */
2190
+ fields?: string[];
2183
2191
  filters: {
2184
2192
  [k: string]: unknown;
2185
2193
  };
@@ -2624,6 +2632,10 @@ export interface GetContributorsNoAdminData {
2624
2632
  * Flag pour ne pas filtrer sur une clé de source spécifique
2625
2633
  */
2626
2634
  notSourceKey: true;
2635
+ /**
2636
+ * Liste des champs à retourner
2637
+ */
2638
+ fields?: string[];
2627
2639
  filters: {
2628
2640
  [k: string]: unknown;
2629
2641
  };
@@ -2702,6 +2714,10 @@ export interface GetContributorsAdminData {
2702
2714
  * Flag pour ne pas filtrer sur une clé de source spécifique
2703
2715
  */
2704
2716
  notSourceKey: true;
2717
+ /**
2718
+ * Liste des champs à retourner
2719
+ */
2720
+ fields?: string[];
2705
2721
  filters: {
2706
2722
  [k: string]: unknown;
2707
2723
  };
@@ -5691,6 +5707,10 @@ export interface GetAttendeesNoAdminData {
5691
5707
  * Flag pour ne pas filtrer sur une clé de source spécifique
5692
5708
  */
5693
5709
  notSourceKey: true;
5710
+ /**
5711
+ * Liste des champs à retourner
5712
+ */
5713
+ fields?: string[];
5694
5714
  filters: {
5695
5715
  [k: string]: unknown;
5696
5716
  };
@@ -5764,6 +5784,10 @@ export interface GetAttendeesAdminData {
5764
5784
  * Flag pour ne pas filtrer sur une clé de source spécifique
5765
5785
  */
5766
5786
  notSourceKey: true;
5787
+ /**
5788
+ * Liste des champs à retourner
5789
+ */
5790
+ fields?: string[];
5767
5791
  filters: {
5768
5792
  [k: string]: unknown;
5769
5793
  };
@@ -6741,6 +6765,109 @@ export interface CoremuOperationData {
6741
6765
  project: string;
6742
6766
  [k: string]: unknown;
6743
6767
  }
6768
+ export interface CoremuAddFinancerData {
6769
+ /**
6770
+ * Action du dispatcher.
6771
+ */
6772
+ action: "addFinancer";
6773
+ /**
6774
+ * ID de la réponse (collection answers) portant la dépense.
6775
+ */
6776
+ answer: string;
6777
+ /**
6778
+ * Jalon visé. PRÉFÉRER ce champ à `depenseKey` : le serveur résout la clé lui-même (findDepenseKeyForMilestone, Aap.php:7436-7456), ce qui évite le piège position/clé du tableau `depense`.
6779
+ */
6780
+ milestoneId?: string;
6781
+ /**
6782
+ * Clé du sous-document dépense — la CLÉ Mongo (ex. "3"), PAS la position dans la liste densifiée. Requis seulement si `milestoneId` est absent (dépense orpheline).
6783
+ */
6784
+ depenseKey?: string;
6785
+ /**
6786
+ * ID du financeur (citoyen, organisation ou projet).
6787
+ */
6788
+ financerId: string;
6789
+ /**
6790
+ * Montant engagé, strictement positif.
6791
+ */
6792
+ amount: number;
6793
+ [k: string]: unknown;
6794
+ }
6795
+ export interface CoremuPayFinancerData {
6796
+ action: "payFinancer";
6797
+ /**
6798
+ * ID de la réponse portant la dépense.
6799
+ */
6800
+ answer: string;
6801
+ /**
6802
+ * Clé du sous-document dépense (CLÉ Mongo, pas la position).
6803
+ */
6804
+ depenseKey: string;
6805
+ /**
6806
+ * ID du financeur dont on règle l'engagement.
6807
+ */
6808
+ financerId: string;
6809
+ /**
6810
+ * Clé stable de la ligne visée — TOUJOURS l'envoyer. Le ciblage par position (`finIndex`) casse dès qu'une insertion concurrente décale le tableau. Résolution : finIndex → finkey → premier id (Aap.php:7131-7152).
6811
+ */
6812
+ finkey?: string;
6813
+ /**
6814
+ * Position dans financer[] — repli pour les lignes antérieures à `finkey`.
6815
+ */
6816
+ finIndex?: number;
6817
+ /**
6818
+ * Montant versé, strictement positif.
6819
+ */
6820
+ amount: number;
6821
+ /**
6822
+ * Moyen du versement : 'manual' (défaut), 'stripe', 'helloasso'.
6823
+ */
6824
+ payment_type?: string;
6825
+ /**
6826
+ * Référence du prestataire de paiement, journalisée avec le versement. Optionnelle — sans objet pour un versement manuel.
6827
+ */
6828
+ transactionId?: string;
6829
+ [k: string]: unknown;
6830
+ }
6831
+ export interface CoremuValidateFinancerPaymentData {
6832
+ action: "validateFinancerPayment";
6833
+ /**
6834
+ * ID de la réponse portant la dépense.
6835
+ */
6836
+ answer: string;
6837
+ /**
6838
+ * Clé du sous-document dépense (CLÉ Mongo, pas la position).
6839
+ */
6840
+ depenseKey: string;
6841
+ /**
6842
+ * Identifiant du versement à valider, rendu par payFinancer.
6843
+ */
6844
+ invoiceId: string;
6845
+ [k: string]: unknown;
6846
+ }
6847
+ export interface CoremuDeleteFinancerData {
6848
+ action: "deleteFinancer";
6849
+ /**
6850
+ * ID de la réponse portant la dépense.
6851
+ */
6852
+ answer: string;
6853
+ /**
6854
+ * Clé du sous-document dépense (CLÉ Mongo, pas la position).
6855
+ */
6856
+ depenseKey: string;
6857
+ /**
6858
+ * ID du financeur dont on retire l'engagement.
6859
+ */
6860
+ financerId: string;
6861
+ /**
6862
+ * Clé stable de la ligne visée — à envoyer dès qu'elle existe.
6863
+ */
6864
+ finkey?: string;
6865
+ /**
6866
+ * Position — repli pour les lignes sans `finkey`.
6867
+ */
6868
+ finIndex?: number;
6869
+ [k: string]: unknown;
6870
+ }
6744
6871
  export interface CostumProjectActionRequestNewData {
6745
6872
  /**
6746
6873
  * Nom de l'action
@@ -51,7 +51,12 @@ export declare class Event extends BaseEntity<EventItemNormalized> {
51
51
  /**
52
52
  * Récupérer les participants d'un événement.
53
53
  * Constant : GET_ATTENDEES_NO_ADMIN
54
- * @param data - Paramètres (partiels) de recherche/pagination.
54
+ * @param data - Paramètres (partiels) de recherche/pagination (`name`, `indexStep`,
55
+ * `filters` complémentaires, `fields`…). Les `filters` fournis sont fusionnés avec le filtre
56
+ * de lien construit par le SDK, ce dernier restant prioritaire : l'appelant peut restreindre
57
+ * la liste (un champ de profil, par exemple) mais pas en changer la sémantique « participants ».
58
+ * `fields` AJOUTE des champs à la projection par défaut de la recherche (elle n'est pas remplacée) ;
59
+ * sans objet sur le chemin admin, où les documents reviennent complets (il y est retiré).
55
60
  * @param options - Options supplémentaires.
56
61
  * @param options.toBeValidated - Indique si les participants doivent être validés.
57
62
  * @param options.isAdmin - Indique si l'utilisateur est admin.
@@ -177,7 +177,13 @@ export declare class Organization extends BaseEntity<OrganizationItemNormalized>
177
177
  /**
178
178
  * Récupérer les membres de l'organisation.
179
179
  * Constant : GET_MEMBERS_ADMIN / GET_MEMBERS_NO_ADMIN
180
- * @param data - Paramètres (partiels) de recherche/pagination.
180
+ * @param data - Paramètres (partiels) de recherche/pagination (`name`, `indexStep`,
181
+ * `filters` complémentaires, `fields`…). Les `filters` fournis sont fusionnés avec le filtre
182
+ * membership construit par le SDK, ce dernier restant prioritaire : l'appelant peut
183
+ * restreindre la liste (un champ de profil, par exemple) mais pas en changer la sémantique.
184
+ * `fields` AJOUTE des champs à la projection par défaut de la recherche (elle n'est pas
185
+ * remplacée) : utile pour lire sur la liste un champ de profil qu'elle ne ramène pas. Sans objet
186
+ * sur le chemin admin, où les documents reviennent complets (il y est retiré).
181
187
  * @param options - Options supplémentaires.
182
188
  * @param options.toBeValidated - Indique si les membres doivent être validés.
183
189
  * @param options.isAdmin - Indique si l'utilisateur est admin.
@@ -217,6 +223,13 @@ export declare class Organization extends BaseEntity<OrganizationItemNormalized>
217
223
  *
218
224
  * // Restreindre la recherche : uniquement les organisations
219
225
  * const onlyOrgas = await organization.getMembers({}, { searchType: "organizations" });
226
+ *
227
+ * // Restreindre par un champ du profil des membres (filtre serveur, fusionné au membership)
228
+ * // et ramener ce champ + les contacts sur la liste (projection additive)
229
+ * const coordinateurs = await organization.getMembers(
230
+ * { filters: { territoires: "Arrageois" }, fields: ["territoires", "telephone"] },
231
+ * { roles: ["Coordonnateur(trice)"] }
232
+ * );
220
233
  */
221
234
  getMembers(data?: Partial<GetMembersAdminData | GetMembersNoAdminData>, options?: {
222
235
  toBeValidated?: boolean;
@@ -91,7 +91,12 @@ export declare class Project extends BaseEntity<ProjectItemNormalized> {
91
91
  /**
92
92
  * Récupérer les contributeurs d'un projet.
93
93
  * Constant : GET_CONTRIBUTORS_ADMIN / GET_CONTRIBUTORS_NO_ADMIN
94
- * @param data - Paramètres (partiels) de recherche/pagination.
94
+ * @param data - Paramètres (partiels) de recherche/pagination (`name`, `indexStep`,
95
+ * `filters` complémentaires, `fields`…). Les `filters` fournis sont fusionnés avec le filtre
96
+ * de lien construit par le SDK, ce dernier restant prioritaire : l'appelant peut restreindre
97
+ * la liste (un champ de profil, par exemple) mais pas en changer la sémantique « contributeurs ».
98
+ * `fields` AJOUTE des champs à la projection par défaut de la recherche (elle n'est pas remplacée) ;
99
+ * sans objet sur le chemin admin, où les documents reviennent complets (il y est retiré).
95
100
  * @param options - Options supplémentaires.
96
101
  * @param options.toBeValidated - Indique si les contributeurs doivent être validés.
97
102
  * @param options.isAdmin - Indique si l'utilisateur est admin.