@communecter/cocolight-api-client 1.0.191 → 1.0.193

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.191",
3
+ "version": "1.0.193",
4
4
  "description": "Client Axios simplifié pour l'API cocolight",
5
5
  "repository": {
6
6
  "type": "git",
@@ -42,6 +42,23 @@ export interface ApiClientOptions {
42
42
  * un artefact périmé masque indéfiniment les champs réels. Contrepartie : plus de démarrage à froid.
43
43
  */
44
44
  costumForceLive?: boolean;
45
+ /**
46
+ * Identité costum du SITE APPELANT (l'entité qui porte le costum servi par ce front).
47
+ * C'est le pendant client de `Costum::init` côté legacy : posée UNE fois, elle est injectée
48
+ * automatiquement dans le payload de tout endpoint dont le contrat déclare `costumSlug`
49
+ * (cf. `setSiteCostum`). À ne pas confondre avec le scope d'une ENTITÉ (`BaseEntity.setCostumScope`),
50
+ * qui décrit la provenance/l'autorité d'un élément — ici on décrit QUI APPELLE, pas QUI EST VISÉ.
51
+ */
52
+ siteCostum?: SiteCostumContext | null;
53
+ }
54
+ /**
55
+ * Identité costum du site appelant. `slug` = slug de l'ENTITÉ PORTEUSE (ex. `navigatorDesTierslieux`),
56
+ * jamais celui du moteur (`costumize`) : c'est ce slug qui est la clé de cache costum du legacy.
57
+ */
58
+ export interface SiteCostumContext {
59
+ slug: string;
60
+ costumId?: string;
61
+ costumType?: string;
45
62
  }
46
63
  /**
47
64
  * Structure des données pour les appels d'endpoint
@@ -102,7 +119,51 @@ export default class ApiClient extends EventEmitter {
102
119
  private _refreshToken;
103
120
  private _setUserId;
104
121
  private _mode;
105
- constructor({ baseURL, accessToken, refreshToken, refreshUrl, endpoints, timeout, debug, maxRetries, circuitBreakerThreshold, circuitBreakerResetTime, fromJSONValue, mode, tokenStorageStrategy, costumForceLive }: ApiClientOptions);
122
+ /** Contexte costum du SITE appelant, injecté sur les endpoints qui le déclarent (cf. setSiteCostum). */
123
+ private _siteCostum;
124
+ constructor({ baseURL, accessToken, refreshToken, refreshUrl, endpoints, timeout, debug, maxRetries, circuitBreakerThreshold, circuitBreakerResetTime, fromJSONValue, mode, tokenStorageStrategy, costumForceLive, siteCostum }: ApiClientOptions);
125
+ /**
126
+ * Déclare l'identité costum du SITE APPELANT — l'entité au nom de laquelle ce front agit.
127
+ *
128
+ * POURQUOI. Le legacy ne sait de quel costum vient une action que par `$_POST["costumSlug"]` :
129
+ * `CommunecterController::beforeAction` → `costumCacheParams()` réchauffe alors le cache costum
130
+ * AVANT l'action, et `Mail::getCustomMail`/`Mail::getAppName` y lisent le domaine (`costum.host`),
131
+ * le titre, le logo et l'expéditeur de l'e-mail, tandis que `Cron::save` y stampe `source.key`.
132
+ * Historiquement ce contexte venait du DOMAINE servi par le legacy lui-même ; dès lors que le
133
+ * domaine d'un costum pointe sur un front autonome, plus rien ne le porte — d'où cette déclaration.
134
+ *
135
+ * PORTÉE. Posée une fois (au démarrage du front), elle est injectée automatiquement dans le payload
136
+ * de **tout endpoint dont le contrat déclare `costumSlug`** — le contrat sert de liste blanche, donc
137
+ * aucun endpoint de recherche ou d'upload n'est pollué. Une valeur explicite passée par l'appelant,
138
+ * ou une enveloppe costum d'entité ({@link BaseEntity.setCostumScope}), restent prioritaires.
139
+ *
140
+ * NE PAS CONFONDRE avec le scope d'une ENTITÉ : celui-ci dit de quel costum PROVIENT un élément
141
+ * (son `source.key`, qui fait autorité pour l'ÉDITER) ; celui-là dit qui APPELLE. Pour brander un
142
+ * e-mail c'est l'appelant qui compte — une organisation créée sous le costum « meir » et invitée
143
+ * depuis le site « institutBleu » doit produire un e-mail « institutBleu ».
144
+ *
145
+ * @param slug slug de l'ENTITÉ PORTEUSE du costum (ex. `navigatorDesTierslieux`), jamais celui du
146
+ * moteur (`costumize`) : c'est la clé de cache costum du legacy.
147
+ * @param opts `costumId`/`costumType` = `contextId`/`contextType` de l'entité porteuse (facultatifs).
148
+ */
149
+ setSiteCostum(slug: string | null, opts?: {
150
+ costumId?: string;
151
+ costumType?: string;
152
+ }): void;
153
+ /** Identité costum du site appelant, ou `null` si ce client n'agit au nom d'aucun costum. */
154
+ getSiteCostum(): {
155
+ costumSlug: string;
156
+ costumId?: string;
157
+ costumType?: string;
158
+ } | null;
159
+ /**
160
+ * L'endpoint porte-t-il le marqueur `costumContext: "request"` du contrat — c.-à-d. reçoit-il
161
+ * automatiquement l'identité costum du site (cf. {@link setSiteCostum}) ?
162
+ * Exposé pour qu'un front qui construit lui-même un payload (`callEndpoint` brut) sache s'il doit y
163
+ * poser le trio à la main, SANS avoir à deviner depuis le schéma : 65 endpoints déclarent `costumSlug`
164
+ * avec un sens métier, seuls les endpoints marqués sont concernés.
165
+ */
166
+ hasCostumContext(constant: string): boolean;
106
167
  /**
107
168
  * Sets the access token for the API client and updates the authorization header.
108
169
  */
@@ -72,12 +72,15 @@ type ParentLike = BaseEntity<any> & {
72
72
  *
73
73
  * - `default` → `/co2/search/globalautocomplete`
74
74
  * - `navigator-tl` → `/costum/navigator/gettl`
75
+ * - `navigator-tl-ressource` → `/costum/navigator/getsressourcetl` (annuaire de ressources tiers-lieux :
76
+ * même payload que gettl, réponse = answers BRUTES + porteur résolu/address/geo + documents ;
77
+ * schéma 200 permissif — cf. NAVIGATOR_GET_RESSOURCE_TL)
75
78
  * - `admin` → `/co2/search/globalautocompleteadmin/type/{type}/id/{id}/canSee/true`
76
79
  * (SearchNew::searchAdmin — réservé aux admins de l'entité porteuse : `fields` = projection
77
80
  * EXACTE, `preferences` NON strippé → badge/filtre `toBeValidated`, tri serveur via `sort`.
78
81
  * pathParams {type,id} posés automatiquement depuis l'entité appelante — cf. searchCostum.)
79
82
  */
80
- export type SearchCostumVariant = "default" | "navigator-tl" | "admin";
83
+ export type SearchCostumVariant = "default" | "navigator-tl" | "navigator-tl-ressource" | "admin";
81
84
  /**
82
85
  * Types de coercion backend supportés par `UPDATE_PATH_VALUE.setType`.
83
86
  *
@@ -1893,6 +1896,54 @@ export declare class BaseEntity<TServerData = any> {
1893
1896
  * court-circuiter sur ce test.
1894
1897
  */
1895
1898
  hasCostumScope(): boolean;
1899
+ /**
1900
+ * Contexte costum de REQUÊTE de cette entité — `{costumSlug, costumId?, costumType?}` ou `undefined`.
1901
+ * Sert à BRANDER l'action côté serveur : le legacy lit `costumSlug` dans `$_POST`
1902
+ * (`CommunecterController::beforeAction` → `costumCacheParams()`), ce qui réchauffe le cache costum
1903
+ * AVANT l'action et donne son domaine/titre/logo/expéditeur à l'e-mail émis.
1904
+ *
1905
+ * ⚠ NE LIT QUE `_adminScope`, jamais `_costumCtx` — et c'est la question centrale du sujet.
1906
+ * Les deux ne disent pas la même chose : `_costumCtx` est la PROVENANCE de l'entité, re-dérivée de
1907
+ * `source.key` à chaque `_setData` (donc à chaque refresh), c'est-à-dire le costum qui a CRÉÉ
1908
+ * l'élément ; `_adminScope`, posé par `setCostumScope`, dit « j'agis délibérément au nom de CE
1909
+ * costum » et survit aux ré-hydratations. Pour brander un e-mail c'est l'APPELANT qui compte, pas
1910
+ * la provenance de la cible. Mesuré : 7 des 19 sites ont un porteur de provenance étrangère (l'org
1911
+ * hôte `institutBleu` porte `source.key:"meir"`) — lire `_costumCtx` ferait partir l'e-mail branché
1912
+ * « meir », et comme l'enveloppe l'emporte sur le défaut du client, ce serait PIRE que de ne rien
1913
+ * poser. Sans scope explicite on ne renvoie donc rien, et `ApiClient.setSiteCostum` — le costum du
1914
+ * SITE, la bonne réponse dans le cas nominal — s'applique.
1915
+ *
1916
+ * Ne lève JAMAIS et n'exige pas une identité complète (contrairement à `_requireCostumCtx`) : ses
1917
+ * appelants (invitation, connect, follow, commentaire, news…) doivent fonctionner hors costum.
1918
+ *
1919
+ * @internal Public par nécessité : `User` lit le contexte de SON PARENT (`this.parent`), ce qu'un
1920
+ * membre `protected` interdit (accès inter-instances).
1921
+ */
1922
+ _costumRequestContext(): {
1923
+ costumSlug: string;
1924
+ costumId?: string;
1925
+ costumType?: string;
1926
+ } | undefined;
1927
+ /**
1928
+ * Pose l'enveloppe costum (canal Symbol) sur un payload de requête, SI un contexte est disponible.
1929
+ *
1930
+ * POURQUOI, alors que `ApiClient.setSiteCostum` suffit au cas nominal (un front dédié à UN costum) :
1931
+ * l'enveloppe permet d'AGIR AU NOM d'un costum PRÉCIS, choisi par l'appelant (`setCostumScope`), et
1932
+ * elle est PRIORITAIRE sur le défaut du client — c'est ce qu'il faut pour un back-office multi-sites,
1933
+ * ou pour une action déclenchée sur un élément d'un autre costum que celui du front. Sans contexte :
1934
+ * on ne pose rien (comportement historique, non régressif — le défaut du client s'applique alors).
1935
+ *
1936
+ * `properties` reste vide : aucun champ DATA costum ici, seulement le CONTEXTE (cf. `symbol.ts`).
1937
+ *
1938
+ * @param payload Payload muté en place (le Symbol est invisible pour `Object.keys`/AJV/le wire).
1939
+ * @param ctx Contexte à poser ; par défaut celui de CETTE entité.
1940
+ * @protected
1941
+ */
1942
+ protected _stampCostumEnvelope<T extends object>(payload: T, ctx?: {
1943
+ costumSlug: string;
1944
+ costumId?: string;
1945
+ costumType?: string;
1946
+ } | undefined): T;
1896
1947
  /**
1897
1948
  * Pose EXPLICITEMENT le scope costum de l'entité — l'API OFFICIELLE pour rattacher une entité
1898
1949
  * HÔTE de costum (qui n'a pas de `source.key` : c'est elle la source, la lib ne lui auto-dérive
@@ -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, 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, 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
  */
@@ -967,6 +967,15 @@ export declare class EndpointApi {
967
967
  * @throws {Error} - En cas d'erreur inattendue.
968
968
  */
969
969
  navigatorGettl(data: NavigatorGettlData): Promise<any>;
970
+ /**
971
+ * Annuaire de ressources tiers-lieux (navigator/getsressourcetl) : Recherche globale via navigator/getsressourcetl — payload identique à NAVIGATOR_GETTL / GLOBAL_AUTOCOMPLETE_COSTUM (drop-in de SearchNew::globalAutoComplete), suivi du post-traitement serveur Navigator::getRessourceTL : tiers-lieu porteur résolu via l input `finder` (address/geo/geoPosition remontés à la racine, finder.<parentId>.img), garde `filters[address.level1]` sur ce porteur (retirée du payload avant la recherche ; sans porteur → exclu), `documents` (photos) par réponse. `answers` reste un blob BRUT keyé par étape (PAS re-keyé par formId comme gettl). `fields` doit contenir `answers` ET `form` : sans `answers` projeté aucun porteur n est résolu (et la garde address.level1 exclut alors TOUT) ; sans `form`, le serveur se rabat sur les 3 chemins finder et seul le 1er (salles) résout (BUG-L-265).
972
+ * Constant : NAVIGATOR_GET_RESSOURCE_TL
973
+ * @param data - Données envoyées à l'API
974
+ * @returns Les données de réponse.
975
+ * @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
976
+ * @throws {Error} - En cas d'erreur inattendue.
977
+ */
978
+ navigatorGetRessourceTl(data: NavigatorGetRessourceTlData): Promise<any>;
970
979
  /**
971
980
  * Récupérer les acteurs d'événement : Récupérer les acteurs (organizers, attendees, creators, animators) d'une entité événement.
972
981
  * Constant : COSTUM_EVENT_REQUEST_ACTORS