@communecter/cocolight-api-client 1.0.51 → 1.0.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/401.cocolight-api-client.browser.js +1 -0
- package/dist/401.cocolight-api-client.cjs +1 -0
- package/dist/401.cocolight-api-client.mjs.js +1 -0
- package/dist/588.cocolight-api-client.browser.js +1 -0
- package/dist/588.cocolight-api-client.cjs +1 -0
- package/dist/588.cocolight-api-client.mjs.js +1 -0
- package/dist/593.cocolight-api-client.browser.js +1 -0
- package/dist/593.cocolight-api-client.cjs +1 -0
- package/dist/593.cocolight-api-client.mjs.js +1 -0
- package/dist/839.cocolight-api-client.browser.js +1 -0
- package/dist/839.cocolight-api-client.cjs +1 -0
- package/dist/839.cocolight-api-client.mjs.js +1 -0
- package/dist/cocolight-api-client.browser.js +3 -3
- package/dist/cocolight-api-client.cjs +1 -1
- package/dist/cocolight-api-client.mjs.js +1 -1
- package/dist/cocolight-api-client.vite.mjs.js +1 -1
- package/dist/cocolight-api-client.vite.mjs.js.map +1 -1
- package/package.json +28 -10
- package/src/{Api.js → Api.ts} +99 -91
- package/src/{ApiClient.js → ApiClient.ts} +444 -240
- package/src/EJSONType.ts +103 -0
- package/src/api/{Badge.js → Badge.ts} +56 -45
- package/src/api/BaseEntity.ts +3897 -0
- package/src/api/Comment.ts +200 -0
- package/src/api/{EndpointApi.js → EndpointApi.ts} +365 -299
- package/src/api/{EndpointApi.types.d.ts → EndpointApi.types.ts} +166 -9
- package/src/api/EntityRegistry.ts +208 -0
- package/src/api/Event.ts +332 -0
- package/src/api/News.ts +331 -0
- package/src/api/{Organization.js → Organization.ts} +155 -119
- package/src/api/{Poi.js → Poi.ts} +68 -60
- package/src/api/{Project.js → Project.ts} +150 -127
- package/src/api/{User.js → User.ts} +321 -256
- package/src/api/UserApi.ts +148 -0
- package/src/api/serverDataType/Comment.ts +88 -0
- package/src/api/serverDataType/Event.ts +80 -0
- package/src/api/serverDataType/News.ts +138 -0
- package/src/api/serverDataType/Organization.ts +80 -0
- package/src/api/serverDataType/Project.ts +71 -0
- package/src/api/serverDataType/User.ts +103 -0
- package/src/api/serverDataType/common.ts +80 -0
- package/src/endpoints.module.ts +2621 -0
- package/src/error.ts +86 -0
- package/src/index.ts +86 -0
- package/src/mixin/UserMixin.ts +4 -0
- package/src/types/api-responses.ts +217 -0
- package/src/types/entities.ts +22 -0
- package/src/types/error-guards.ts +230 -0
- package/src/types/index.ts +39 -0
- package/src/types/payloads.ts +21 -0
- package/src/types/transforms.ts +110 -0
- package/src/utils/{FileOfflineStorageStrategy.node.js → FileOfflineStorageStrategy.node.ts} +15 -12
- package/src/utils/{FileStorageStrategy.node.js → FileStorageStrategy.node.ts} +17 -14
- package/src/utils/MultiServerFileStorageStrategy.node.ts +67 -0
- package/src/utils/MultiServerTokenStorageStrategy.ts +139 -0
- package/src/utils/{OfflineClientManager.js → OfflineClientManager.ts} +82 -86
- package/src/utils/OfflineQueueStorageStrategy.ts +47 -0
- package/src/utils/TokenStorage.ts +77 -0
- package/src/utils/compat.ts +12 -0
- package/src/utils/createDefaultMultiServerTokenStorageStrategy.ts +35 -0
- package/src/utils/{createDefaultOfflineStrategy.js → createDefaultOfflineStrategy.ts} +8 -3
- package/src/utils/createDefaultTokenStorageStrategy.ts +33 -0
- package/src/utils/{reactive.js → reactive.ts} +49 -40
- package/src/utils/stream-utils.node.ts +12 -0
- package/types/Api.d.ts +87 -0
- package/types/Api.d.ts.map +1 -0
- package/types/ApiClient.d.ts +437 -0
- package/types/ApiClient.d.ts.map +1 -0
- package/types/EJSONType.d.ts +53 -0
- package/types/EJSONType.d.ts.map +1 -0
- package/types/api/Badge.d.ts +24 -0
- package/types/api/Badge.d.ts.map +1 -0
- package/types/api/BaseEntity.d.ts +1322 -0
- package/types/api/BaseEntity.d.ts.map +1 -0
- package/types/api/Comment.d.ts +36 -0
- package/types/api/EndpointApi.d.ts +985 -0
- package/types/api/EndpointApi.d.ts.map +1 -0
- package/types/api/EndpointApi.types.d.ts +4233 -0
- package/types/api/EntityRegistry.d.ts +24 -0
- package/types/api/EntityRegistry.d.ts.map +1 -0
- package/types/api/Event.d.ts +122 -0
- package/types/api/Event.d.ts.map +1 -0
- package/types/api/News.d.ts +77 -0
- package/types/api/News.d.ts.map +1 -0
- package/types/api/Organization.d.ts +203 -0
- package/types/api/Organization.d.ts.map +1 -0
- package/types/api/Poi.d.ts +54 -0
- package/types/api/Poi.d.ts.map +1 -0
- package/types/api/Project.d.ts +180 -0
- package/types/api/Project.d.ts.map +1 -0
- package/types/api/User.d.ts +332 -0
- package/types/api/User.d.ts.map +1 -0
- package/types/api/UserApi.d.ts +64 -0
- package/types/api/UserApi.d.ts.map +1 -0
- package/types/api/serverDataType/Comment.d.ts +83 -0
- package/types/api/serverDataType/Event.d.ts +67 -0
- package/types/api/serverDataType/News.d.ts +130 -0
- package/types/api/serverDataType/Organization.d.ts +65 -0
- package/types/api/serverDataType/Organization.d.ts.map +1 -0
- package/types/api/serverDataType/Project.d.ts +58 -0
- package/types/api/serverDataType/Project.d.ts.map +1 -0
- package/types/api/serverDataType/User.d.ts +86 -0
- package/types/api/serverDataType/User.d.ts.map +1 -0
- package/types/api/serverDataType/common.d.ts +71 -0
- package/types/api/serverDataType/common.d.ts.map +1 -0
- package/types/endpoints.module.d.ts +20559 -0
- package/types/endpoints.module.d.ts.map +1 -0
- package/types/error.d.ts +54 -0
- package/types/error.d.ts.map +1 -0
- package/types/index.d.ts +59 -0
- package/types/index.d.ts.map +1 -0
- package/types/mixin/UserMixin.d.ts +1 -0
- package/types/mixin/UserMixin.d.ts.map +1 -0
- package/types/types/api-responses.d.ts +190 -0
- package/types/types/api-responses.d.ts.map +1 -0
- package/types/types/entities.d.ts +17 -0
- package/types/types/entities.d.ts.map +1 -0
- package/types/types/error-guards.d.ts +99 -0
- package/types/types/error-guards.d.ts.map +1 -0
- package/types/types/index.d.ts +7 -0
- package/types/types/payloads.d.ts +17 -0
- package/types/types/payloads.d.ts.map +1 -0
- package/types/types/transforms.d.ts +79 -0
- package/types/types/transforms.d.ts.map +1 -0
- package/types/utils/FileOfflineStorageStrategy.node.d.ts +11 -0
- package/types/utils/FileOfflineStorageStrategy.node.d.ts.map +1 -0
- package/types/utils/FileStorageStrategy.node.d.ts +14 -0
- package/types/utils/FileStorageStrategy.node.d.ts.map +1 -0
- package/types/utils/MultiServerFileStorageStrategy.node.d.ts +17 -0
- package/types/utils/MultiServerFileStorageStrategy.node.d.ts.map +1 -0
- package/types/utils/MultiServerTokenStorageStrategy.d.ts +44 -0
- package/types/utils/MultiServerTokenStorageStrategy.d.ts.map +1 -0
- package/types/utils/OfflineClientManager.d.ts +58 -0
- package/types/utils/OfflineClientManager.d.ts.map +1 -0
- package/types/utils/OfflineQueueStorageStrategy.d.ts +16 -0
- package/types/utils/OfflineQueueStorageStrategy.d.ts.map +1 -0
- package/types/utils/TokenStorage.d.ts +26 -0
- package/types/utils/TokenStorage.d.ts.map +1 -0
- package/types/utils/compat.d.ts +4 -0
- package/types/utils/compat.d.ts.map +1 -0
- package/types/utils/createDefaultMultiServerTokenStorageStrategy.d.ts +2 -0
- package/types/utils/createDefaultMultiServerTokenStorageStrategy.d.ts.map +1 -0
- package/types/utils/createDefaultOfflineStrategy.d.ts +2 -0
- package/types/utils/createDefaultOfflineStrategy.d.ts.map +1 -0
- package/types/utils/createDefaultTokenStorageStrategy.d.ts +2 -0
- package/types/utils/createDefaultTokenStorageStrategy.d.ts.map +1 -0
- package/types/utils/reactive.d.ts +54 -0
- package/types/utils/reactive.d.ts.map +1 -0
- package/types/utils/stream-utils.node.d.ts +3 -0
- package/types/utils/stream-utils.node.d.ts.map +1 -0
- package/dist/123.cocolight-api-client.browser.js +0 -1
- package/dist/123.cocolight-api-client.cjs +0 -1
- package/dist/22.cocolight-api-client.mjs.js +0 -1
- package/dist/339.cocolight-api-client.mjs.js +0 -1
- package/dist/394.cocolight-api-client.browser.js +0 -1
- package/dist/394.cocolight-api-client.cjs +0 -1
- package/dist/405.cocolight-api-client.browser.js +0 -1
- package/dist/405.cocolight-api-client.cjs +0 -1
- package/dist/774.cocolight-api-client.mjs.js +0 -1
- package/dist/790.cocolight-api-client.mjs.js +0 -1
- package/dist/931.cocolight-api-client.browser.js +0 -1
- package/dist/931.cocolight-api-client.cjs +0 -1
- package/src/EJSONType.js +0 -53
- package/src/api/BaseEntity.js +0 -2828
- package/src/api/EntityRegistry.js +0 -152
- package/src/api/Event.js +0 -226
- package/src/api/News.js +0 -244
- package/src/api/UserApi.js +0 -81
- package/src/endpoints.module.js +0 -5
- package/src/error.js +0 -68
- package/src/index.js +0 -34
- package/src/mixin/UserMixin.js +0 -8
- package/src/utils/MultiServerFileStorageStrategy.node.js +0 -65
- package/src/utils/MultiServerTokenStorageStrategy.js +0 -131
- package/src/utils/OfflineQueueStorageStrategy.js +0 -51
- package/src/utils/TokenStorage.js +0 -93
- package/src/utils/createDefaultMultiServerTokenStorageStrategy.js +0 -45
- package/src/utils/createDefaultTokenStorageStrategy.js +0 -43
- package/src/utils/stream-utils.node.js +0 -10
|
@@ -0,0 +1,1322 @@
|
|
|
1
|
+
import type { UpdateSettingsData, UpdateBlockDescriptionData, UpdateBlockInfoData, UpdateBlockSocialData, UpdateBlockLocalityData, GetNewsData, GetGalleryData, GlobalAutocompleteCostumData, CostumEventRequestActorsData, CostumEventRequestSubeventsData, CostumEventRequestDatesData, CostumEventRequestElementEventData, CostumEventRequestCategoriesData, CostumEventRequestEventData, CostumEventRequestLinkTlToEventData, CostumEventRequestLoadContextTagData, GetOrganizationsAdminData, GetOrganizationsNoAdminData, GetProjectsAdminData, GetProjectsNoAdminData, GetPoisAdminData, GetPoisNoAdminData, GetSubscribersData, GetBadgesData } from "./EndpointApi.types.js";
|
|
2
|
+
import type { TransformsMap } from "../types/entities.js";
|
|
3
|
+
/**
|
|
4
|
+
* Types pour les méthodes d'entité (organization, project, poi, event, badge, news)
|
|
5
|
+
* Permettent soit de récupérer une entité existante (GET), soit de créer une nouvelle instance (CREATE)
|
|
6
|
+
*/
|
|
7
|
+
type OrganizationInput = {
|
|
8
|
+
id: string;
|
|
9
|
+
} | {
|
|
10
|
+
slug: string;
|
|
11
|
+
} | Record<string, any>;
|
|
12
|
+
type ProjectInput = {
|
|
13
|
+
id: string;
|
|
14
|
+
} | {
|
|
15
|
+
slug: string;
|
|
16
|
+
} | Record<string, any>;
|
|
17
|
+
type PoiInput = {
|
|
18
|
+
id: string;
|
|
19
|
+
} | {
|
|
20
|
+
slug: string;
|
|
21
|
+
} | Record<string, any>;
|
|
22
|
+
type EventInput = {
|
|
23
|
+
id: string;
|
|
24
|
+
} | {
|
|
25
|
+
slug: string;
|
|
26
|
+
} | Record<string, any>;
|
|
27
|
+
type BadgeInput = {
|
|
28
|
+
id: string;
|
|
29
|
+
} | Record<string, any>;
|
|
30
|
+
type NewsInput = {
|
|
31
|
+
id: string;
|
|
32
|
+
} | Record<string, any>;
|
|
33
|
+
type ApiClient = import("../ApiClient.js").default;
|
|
34
|
+
type EndpointApi = import("./EndpointApi.js").default;
|
|
35
|
+
type User = import("./User.js").User;
|
|
36
|
+
type Organization = import("./Organization.js").Organization;
|
|
37
|
+
type Project = import("./Project.js").Project;
|
|
38
|
+
type EventEntity = import("./Event.js").Event;
|
|
39
|
+
type Poi = import("./Poi.js").Poi;
|
|
40
|
+
type News = import("./News.js").News;
|
|
41
|
+
type Badge = import("./Badge.js").Badge;
|
|
42
|
+
type Comment = import("./Comment.js").Comment;
|
|
43
|
+
type AnyEntity = User | Organization | Project | Poi | EventEntity | Badge | News | Comment;
|
|
44
|
+
type ParentLike = BaseEntity<any> & {
|
|
45
|
+
apiClient: ApiClient;
|
|
46
|
+
userContext?: User | null;
|
|
47
|
+
};
|
|
48
|
+
type EndpointApiCtor = {
|
|
49
|
+
new (apiClient: ApiClient): EndpointApi;
|
|
50
|
+
};
|
|
51
|
+
type EndpointApiDep = EndpointApi | EndpointApiCtor;
|
|
52
|
+
interface Deps {
|
|
53
|
+
EndpointApi: EndpointApiDep;
|
|
54
|
+
User?: any;
|
|
55
|
+
Organization?: any;
|
|
56
|
+
Project?: any;
|
|
57
|
+
Poi?: any;
|
|
58
|
+
Event?: any;
|
|
59
|
+
Badge?: any;
|
|
60
|
+
News?: any;
|
|
61
|
+
Comment?: any;
|
|
62
|
+
}
|
|
63
|
+
interface BaseEntityConfig {
|
|
64
|
+
entityTag?: string;
|
|
65
|
+
}
|
|
66
|
+
interface EntityTypeMap {
|
|
67
|
+
citoyens: User;
|
|
68
|
+
organizations: Organization;
|
|
69
|
+
projects: Project;
|
|
70
|
+
events: EventEntity;
|
|
71
|
+
poi: Poi;
|
|
72
|
+
news: News;
|
|
73
|
+
badges: Badge;
|
|
74
|
+
comments: Comment;
|
|
75
|
+
}
|
|
76
|
+
type ReadableWithMeta = import("stream").Readable & {
|
|
77
|
+
path?: string;
|
|
78
|
+
mimeType?: string;
|
|
79
|
+
};
|
|
80
|
+
type UploadInput = File | Blob | Buffer | import("stream").Readable;
|
|
81
|
+
type ValidatedUpload = File | Buffer | ReadableWithMeta;
|
|
82
|
+
export interface PaginatorPage<T> {
|
|
83
|
+
count: {
|
|
84
|
+
total: number;
|
|
85
|
+
};
|
|
86
|
+
results: T[];
|
|
87
|
+
pageIndex: number;
|
|
88
|
+
pageNumber: number;
|
|
89
|
+
hasNext: boolean;
|
|
90
|
+
hasPrev: boolean;
|
|
91
|
+
next?: () => Promise<PaginatorPage<T>>;
|
|
92
|
+
prev?: () => Promise<PaginatorPage<T>>;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Type helper pour extraire les noms de méthodes depuis un Map as const
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* static UPDATE_BLOCKS = new Map([
|
|
99
|
+
* ["UPDATE_BLOCK_DESCRIPTION", "updateDescription"],
|
|
100
|
+
* ["UPDATE_BLOCK_INFO", "updateInfo"]
|
|
101
|
+
* ] as const);
|
|
102
|
+
*
|
|
103
|
+
* type MethodNames = ExtractMethodNames<typeof MyClass.UPDATE_BLOCKS>;
|
|
104
|
+
* // Result: "updateDescription" | "updateInfo"
|
|
105
|
+
*/
|
|
106
|
+
export type ExtractMethodNames<T> = T extends Map<any, infer V> ? V extends readonly (readonly [any, infer M])[] ? M : never : never;
|
|
107
|
+
interface LinkMeta {
|
|
108
|
+
linkType: "memberOf" | "projects" | "events" | "friends";
|
|
109
|
+
connectTypeConnect: "member" | "contributor" | "attendee" | "friend";
|
|
110
|
+
connectTypeDisconnect: "members" | "contributors" | "attendees" | "friends";
|
|
111
|
+
}
|
|
112
|
+
type BaseEntityCtor = typeof BaseEntity & {
|
|
113
|
+
entityTag: string;
|
|
114
|
+
entityType: "citoyens" | "organizations" | "projects" | "events" | "poi" | "badges" | "news" | "comments";
|
|
115
|
+
SCHEMA_CONSTANTS: string | string[];
|
|
116
|
+
};
|
|
117
|
+
interface FilterValueExistsOnly {
|
|
118
|
+
$exists: boolean;
|
|
119
|
+
}
|
|
120
|
+
interface FilterValueInOnly {
|
|
121
|
+
$in: string[];
|
|
122
|
+
}
|
|
123
|
+
interface FilterValueCombined {
|
|
124
|
+
$in: string[];
|
|
125
|
+
$exists: boolean;
|
|
126
|
+
}
|
|
127
|
+
type FilterValue = FilterValueExistsOnly | FilterValueInOnly | FilterValueCombined;
|
|
128
|
+
type LinkFilters = Record<string, FilterValue>;
|
|
129
|
+
interface MinimalUserLink {
|
|
130
|
+
toBeValidated?: boolean;
|
|
131
|
+
isInviting?: boolean;
|
|
132
|
+
}
|
|
133
|
+
type EntityFilterValue = string | boolean | RegExp | ((value: any) => boolean);
|
|
134
|
+
type EntityFilters = Record<string, EntityFilterValue>;
|
|
135
|
+
interface LinkEntitiesOptions {
|
|
136
|
+
key?: string;
|
|
137
|
+
mapFn?: (entity: any) => any;
|
|
138
|
+
}
|
|
139
|
+
type Deletable = {
|
|
140
|
+
_isDeleted?: boolean;
|
|
141
|
+
};
|
|
142
|
+
type ReactiveData = Record<string, any> & {
|
|
143
|
+
__isReactive?: boolean;
|
|
144
|
+
__raw?: any;
|
|
145
|
+
};
|
|
146
|
+
interface FinalizerResult<TOut> {
|
|
147
|
+
results: TOut[];
|
|
148
|
+
count: {
|
|
149
|
+
total: number;
|
|
150
|
+
} & Record<string, any>;
|
|
151
|
+
}
|
|
152
|
+
type EntityType = "citoyens" | "organizations" | "projects" | "events" | "poi" | "badges" | "news";
|
|
153
|
+
/**
|
|
154
|
+
* Classe de base pour toutes les entités métiers : utilisateurs, projets, organisations, etc.
|
|
155
|
+
* Fournit un système de brouillon (draft), transformation, appel API sécurisé,
|
|
156
|
+
* et gestion de données côté client avec support du mode offline.
|
|
157
|
+
* @template object TServerData
|
|
158
|
+
* @abstract
|
|
159
|
+
*/
|
|
160
|
+
export declare class BaseEntity<TServerData = any> {
|
|
161
|
+
__entityTag: string;
|
|
162
|
+
deps: Partial<Deps>;
|
|
163
|
+
apiClient: ApiClient;
|
|
164
|
+
parent: ParentLike | null;
|
|
165
|
+
userContext: User | null;
|
|
166
|
+
endpointApi: EndpointApi;
|
|
167
|
+
data: any;
|
|
168
|
+
meta?: any;
|
|
169
|
+
_draftData: ReactiveData;
|
|
170
|
+
_initialDraftData: Record<string, any>;
|
|
171
|
+
_serverData: TServerData & ReactiveData;
|
|
172
|
+
_calledFromSave: boolean;
|
|
173
|
+
_syncReactiveDraft: boolean;
|
|
174
|
+
_isDeleted: boolean;
|
|
175
|
+
_add?: ((payload: any) => Promise<void | unknown>) | undefined;
|
|
176
|
+
_update?: ((payload: any) => Promise<boolean>) | undefined;
|
|
177
|
+
_allowedFieldsCache?: string[];
|
|
178
|
+
_allowedFieldsMetadata?: {
|
|
179
|
+
combinedSchema: any;
|
|
180
|
+
transforms: TransformsMap;
|
|
181
|
+
removeFields: string[];
|
|
182
|
+
};
|
|
183
|
+
static entityTag: string;
|
|
184
|
+
static entityType?: string;
|
|
185
|
+
static SCHEMA_CONSTANTS?: string | string[];
|
|
186
|
+
/**
|
|
187
|
+
* Vérifie que l'objet n'a pas été supprimé.
|
|
188
|
+
* @throws {ApiError} - Si l'objet a été supprimé.
|
|
189
|
+
*/
|
|
190
|
+
protected _checkNotDeleted(): void;
|
|
191
|
+
/**
|
|
192
|
+
* Constructeur de l'entité.
|
|
193
|
+
*
|
|
194
|
+
* `parent` peut être :
|
|
195
|
+
* - une instance d'ApiClient
|
|
196
|
+
* - une instance d'entité (User, Organization, Project, Poi, Event, Badge, News)
|
|
197
|
+
*
|
|
198
|
+
* @param parent
|
|
199
|
+
* @param data - Données initiales.
|
|
200
|
+
* @param deps - Dépendances injectées (EndpointApi, autres entités).
|
|
201
|
+
* @param config - Configuration optionnelle (ex. `entityTag`).
|
|
202
|
+
* @throws {ApiError} Si `parent` est invalide ou si `deps.EndpointApi` n'est ni une instance ni un constructeur.
|
|
203
|
+
*/
|
|
204
|
+
constructor(parent: ApiClient | ParentLike, data?: object, deps?: Partial<Deps>, config?: BaseEntityConfig);
|
|
205
|
+
/**
|
|
206
|
+
* Permet de récupérer le constructeur typé correctement.
|
|
207
|
+
*/
|
|
208
|
+
protected _getCtor(): BaseEntityCtor;
|
|
209
|
+
getEntityTag: (__entityTag: string | undefined) => string | undefined;
|
|
210
|
+
/** @returns Identifiant de l'entité */
|
|
211
|
+
get id(): string | null;
|
|
212
|
+
/** @returns Slug de l'entité */
|
|
213
|
+
get slug(): string | null;
|
|
214
|
+
/**
|
|
215
|
+
* Définit un ID (utilisé en interne)
|
|
216
|
+
* @param newId - Nouvel ID à définir.
|
|
217
|
+
*/
|
|
218
|
+
_id(newId: string): void;
|
|
219
|
+
/** @returns Indique si l'utilisateur est connecté */
|
|
220
|
+
get isConnected(): boolean;
|
|
221
|
+
/** @returns Identifiant utilisateur associé */
|
|
222
|
+
get userId(): string | null;
|
|
223
|
+
/** @returns Données de brouillon courantes (réactif) */
|
|
224
|
+
get draftData(): ReactiveData;
|
|
225
|
+
/** @returns Données de brouillon initiales (non-réactif) */
|
|
226
|
+
get initialDraftData(): Record<string, any>;
|
|
227
|
+
/** @returns Données brutes du serveur */
|
|
228
|
+
get serverData(): TServerData;
|
|
229
|
+
/** @returns Indique si cette entité représente l'utilisateur connecté */
|
|
230
|
+
get isMe(): boolean;
|
|
231
|
+
/** @returns Type de l'entité (ex: 'citoyens') */
|
|
232
|
+
getEntityType(): "citoyens" | "organizations" | "projects" | "events" | "poi" | "badges" | "news" | "comments";
|
|
233
|
+
/**
|
|
234
|
+
* Indique si le draft contient des modifications par rapport aux données initiales.
|
|
235
|
+
* @returns {boolean}
|
|
236
|
+
*/
|
|
237
|
+
hasChanges(): boolean;
|
|
238
|
+
/**
|
|
239
|
+
* Rafraîchit l'entité en rechargeant ses données depuis le serveur.
|
|
240
|
+
* @returns Données mises à jour
|
|
241
|
+
*/
|
|
242
|
+
refresh(): Promise<Record<string, any>>;
|
|
243
|
+
/**
|
|
244
|
+
* Sauvegarde les modifications locales vers le serveur (add ou update).
|
|
245
|
+
* @returns Données serveur mises à jour (après éventuel `refresh()`)
|
|
246
|
+
*/
|
|
247
|
+
save(): Promise<Record<string, any>>;
|
|
248
|
+
/**
|
|
249
|
+
* Crée une nouvelle instance d'entité à partir des données du serveur.
|
|
250
|
+
*
|
|
251
|
+
* @param data - Données du serveur.
|
|
252
|
+
* @param parent - Instance parente (ApiClient ou BaseEntity).
|
|
253
|
+
* @param deps - Dépendances injectées (classes d'entités disponibles).
|
|
254
|
+
* @returns Nouvelle instance d'entité.
|
|
255
|
+
*/
|
|
256
|
+
static fromServerData(data: object, parent: ApiClient | ParentLike, deps: object): BaseEntity<any>;
|
|
257
|
+
/**
|
|
258
|
+
* Hook pour transformer les données du serveur avant qu'elles ne soient appliquées.
|
|
259
|
+
* Peut être overridé dans les classes filles pour transformer des champs imbriqués en instances d'entités.
|
|
260
|
+
*
|
|
261
|
+
* @param data - Les données brutes du serveur.
|
|
262
|
+
* @returns Les données transformées.
|
|
263
|
+
* @protected
|
|
264
|
+
*/
|
|
265
|
+
protected _transformServerData(data: TServerData): TServerData;
|
|
266
|
+
/**
|
|
267
|
+
* Met à jour les données de l'entité avec de nouvelles données.
|
|
268
|
+
*
|
|
269
|
+
* @param newData - Les nouvelles données à appliquer.
|
|
270
|
+
* @param {{ forceInitialDraftReset?: boolean }} [options]
|
|
271
|
+
* @protected
|
|
272
|
+
*/
|
|
273
|
+
protected _setData(newData: TServerData, { forceInitialDraftReset }?: {
|
|
274
|
+
forceInitialDraftReset?: boolean;
|
|
275
|
+
}): void;
|
|
276
|
+
_updateDraftPreservingUserChanges(draft: Record<string, any>): void;
|
|
277
|
+
_resetInitialDraftData(): void;
|
|
278
|
+
_toRawDeep(obj: any): any;
|
|
279
|
+
/**
|
|
280
|
+
* Champs à ajouter automatiquement à chaque draft (ex: `typeElement`).
|
|
281
|
+
* Souvent utilisés dans les conditions `if/then` du JSON Schema.
|
|
282
|
+
*/
|
|
283
|
+
defaultFields: {
|
|
284
|
+
[key: string]: any;
|
|
285
|
+
};
|
|
286
|
+
/**
|
|
287
|
+
* Champs à exclure explicitement du draft et des payloads.
|
|
288
|
+
*/
|
|
289
|
+
removeFields: string[];
|
|
290
|
+
/**
|
|
291
|
+
* Transformations à appliquer à certains champs lors de la lecture depuis le draft.
|
|
292
|
+
* Clé = champ, valeur = fonction (val, full) => valeur transformée.
|
|
293
|
+
*/
|
|
294
|
+
transforms: TransformsMap;
|
|
295
|
+
/**
|
|
296
|
+
* ───────────────────────────────
|
|
297
|
+
* JSON
|
|
298
|
+
* ───────────────────────────────
|
|
299
|
+
*/
|
|
300
|
+
/**
|
|
301
|
+
* Convertit l'instance en JSON pour l'envoi au serveur.
|
|
302
|
+
*
|
|
303
|
+
* @returns Représentation JSON de l'instance.
|
|
304
|
+
*/
|
|
305
|
+
toJSON(): {
|
|
306
|
+
__entityTag: string;
|
|
307
|
+
__isSerializedEntity: boolean;
|
|
308
|
+
serverData: any;
|
|
309
|
+
parent: {
|
|
310
|
+
id?: string;
|
|
311
|
+
type?: string;
|
|
312
|
+
__entityTag?: string;
|
|
313
|
+
slug?: string;
|
|
314
|
+
} | null;
|
|
315
|
+
};
|
|
316
|
+
_serialize(obj: any): any;
|
|
317
|
+
/**
|
|
318
|
+
* Supprime les propriétés non sérialisables d'un objet.
|
|
319
|
+
*
|
|
320
|
+
* @param obj - L'objet à nettoyer.
|
|
321
|
+
* @param seen - Ensemble pour éviter les références circulaires.
|
|
322
|
+
* @returns L'objet nettoyé.
|
|
323
|
+
* @private
|
|
324
|
+
*/
|
|
325
|
+
private _removeUnserializables;
|
|
326
|
+
/**
|
|
327
|
+
* Restaure les données sérialisées en un objet d'origine.
|
|
328
|
+
*
|
|
329
|
+
* @param obj - L'objet à restaurer.
|
|
330
|
+
* @returns L'objet restauré.
|
|
331
|
+
*/
|
|
332
|
+
static _revive(obj: object): any;
|
|
333
|
+
/**
|
|
334
|
+
* Crée une instance d'entité à partir de données JSON.
|
|
335
|
+
*
|
|
336
|
+
* @param json - Données JSON à utiliser.
|
|
337
|
+
* @param parent - Instance parente.
|
|
338
|
+
* @param deps - Dépendances injectées.
|
|
339
|
+
* @returns Nouvelle instance d'entité.
|
|
340
|
+
*/
|
|
341
|
+
static fromJSON(json: unknown, parent?: ApiClient | BaseEntity<any> | null, deps?: object): BaseEntity<any>;
|
|
342
|
+
/**
|
|
343
|
+
* ───────────────────────────────
|
|
344
|
+
* UtilMixin
|
|
345
|
+
* ───────────────────────────────
|
|
346
|
+
*/
|
|
347
|
+
/**
|
|
348
|
+
* Appelle une méthode de l'API.
|
|
349
|
+
*
|
|
350
|
+
* @param constant - Le nom de la méthode à appeler.
|
|
351
|
+
* @param data - Les données à passer à la méthode.
|
|
352
|
+
* @returns - `response.data` transformé ; peut être `null` si la requête est **mise en file** (offline/breaker).
|
|
353
|
+
* @throws {ApiValidationError} - Si une erreur se produit lors de l'appel de l'API.
|
|
354
|
+
* @throws {ApiResponseError} - Si une erreur se produit lors de l'appel de l'API.
|
|
355
|
+
* @throws {ApiClientError} - Si l'utilisateur n'est pas authentifié.
|
|
356
|
+
*/
|
|
357
|
+
call(constant: string, data?: object): Promise<unknown>;
|
|
358
|
+
/**
|
|
359
|
+
* Appelle une méthode de l'API si l'utilisateur n'est pas connecté.
|
|
360
|
+
*
|
|
361
|
+
* @param constant - Le nom de la méthode à appeler.
|
|
362
|
+
* @param data - Les données à passer à la méthode.
|
|
363
|
+
* @returns - `response.data` ou `null` si enqueue offline/breaker.
|
|
364
|
+
* @throws {ApiAuthenticationError} - Si l'utilisateur est connecté.
|
|
365
|
+
* @throws {ApiValidationError} - Si une erreur se produit lors de l'appel de l'API.
|
|
366
|
+
* @throws {ApiResponseError} - Si une erreur se produit lors de l'appel de l'API.
|
|
367
|
+
* @throws {ApiClientError} - Si une erreur se produit lors de l'appel de l'API.
|
|
368
|
+
*/
|
|
369
|
+
callNoConnected(constant: string, data?: object): Promise<unknown>;
|
|
370
|
+
/**
|
|
371
|
+
* Appelle une méthode de l'API si l'utilisateur est connecté.
|
|
372
|
+
*
|
|
373
|
+
* @param param - Le nom de la méthode à appeler ou une fonction de rappel.
|
|
374
|
+
* @param data - Les données à passer à la méthode.
|
|
375
|
+
* @returns - `response.data` ou `null` si enqueue offline/breaker.
|
|
376
|
+
* @throws {ApiAuthenticationError} - Si l'utilisateur n'est pas connecté.
|
|
377
|
+
* @throws {ApiValidationError} - Si une erreur se produit lors de l'appel de l'API.
|
|
378
|
+
* @throws {ApiResponseError} - Si une erreur se produit lors de l'appel de l'API.
|
|
379
|
+
* @throws {ApiClientError} - Si une erreur se produit lors de l'appel de l'API.
|
|
380
|
+
*/
|
|
381
|
+
callIsConnected(param: string | (() => Promise<any>), data?: object): Promise<unknown>;
|
|
382
|
+
/**
|
|
383
|
+
* Appelle une méthode de l'API si l'utilisateur est lui-même.
|
|
384
|
+
*
|
|
385
|
+
* @param param - Le nom de la méthode à appeler ou une fonction de rappel.
|
|
386
|
+
* @param data - Les données à passer à la méthode.
|
|
387
|
+
* @returns - `response.data` ou `null` si enqueue offline/breaker.
|
|
388
|
+
* @throws {ApiAuthenticationError} - Si l'utilisateur n'est pas lui-même.
|
|
389
|
+
* @throws {ApiValidationError} - Si une erreur se produit lors de l'appel de l'API.
|
|
390
|
+
* @throws {ApiResponseError} - Si une erreur se produit lors de l'appel de l'API.
|
|
391
|
+
* @throws {ApiClientError} - Si une erreur se produit lors de l'appel de l'API.
|
|
392
|
+
*/
|
|
393
|
+
callIsMe(param: string | (() => Promise<any>), data?: object): Promise<unknown>;
|
|
394
|
+
/**
|
|
395
|
+
* Valide une image d'entrée.
|
|
396
|
+
*
|
|
397
|
+
* @param imageInput - L'image à valider.
|
|
398
|
+
* @returns - L'image validée.
|
|
399
|
+
* @private
|
|
400
|
+
*/
|
|
401
|
+
protected _validateImage(imageInput: UploadInput): Promise<ValidatedUpload>;
|
|
402
|
+
/**
|
|
403
|
+
* Valide un fichier d'entrée.
|
|
404
|
+
*
|
|
405
|
+
* @param fileInput - Le fichier à valider.
|
|
406
|
+
* @returns - Le fichier validé.
|
|
407
|
+
* @private
|
|
408
|
+
*/
|
|
409
|
+
protected _validateFile(fileInput: UploadInput): Promise<ValidatedUpload>;
|
|
410
|
+
/**
|
|
411
|
+
* Valide les entrées d'upload de fichiers.
|
|
412
|
+
*
|
|
413
|
+
* @param input - Le fichier à valider.
|
|
414
|
+
* @param {{ allowedMimeTypes?: string[], expectedType?: "image"|"file"|"any" }} options - Options de validation.
|
|
415
|
+
* @returns - Le fichier validé.
|
|
416
|
+
* @throws {ApiValidationError} - Si le type de fichier est invalide.
|
|
417
|
+
* @throws {Error} - Si le type de fichier est inconnu.
|
|
418
|
+
* @private
|
|
419
|
+
*/
|
|
420
|
+
private _validateUploadInput;
|
|
421
|
+
/**
|
|
422
|
+
* Transforme un Buffer en ReadableStream équivalent à fs.createReadStream
|
|
423
|
+
* @param buffer - Le buffer contenant les données binaires
|
|
424
|
+
* @param [filename="file.bin"] - Nom de fichier (utilisé dans FormData)
|
|
425
|
+
* @param [mimeType="application/octet-stream"] - Type MIME (utilisé dans FormData)
|
|
426
|
+
* @returns - Readable doté de `path` et `mimeType`
|
|
427
|
+
* @private
|
|
428
|
+
*/
|
|
429
|
+
private _createReadStreamFromBuffer;
|
|
430
|
+
/**
|
|
431
|
+
* Transforme un Buffer en ReadableStream.
|
|
432
|
+
*
|
|
433
|
+
* @param buffer - Le buffer à transformer.
|
|
434
|
+
* @returns - Un ReadableStream.
|
|
435
|
+
* @throws {Error} - Si appelé dans le navigateur.
|
|
436
|
+
* @private
|
|
437
|
+
*/
|
|
438
|
+
private _bufferToReadable;
|
|
439
|
+
/**
|
|
440
|
+
* Crée un PassThrough stream pour le traitement des fichiers.
|
|
441
|
+
*
|
|
442
|
+
* @returns - Un PassThrough stream.
|
|
443
|
+
* @throws {Error} - Si appelé dans le navigateur.
|
|
444
|
+
* @private
|
|
445
|
+
*/
|
|
446
|
+
private _passThrough;
|
|
447
|
+
/**
|
|
448
|
+
* Supprime les propriétés d'un objet en fonction d'une liste de clés.
|
|
449
|
+
*
|
|
450
|
+
* @param obj - L'objet source.
|
|
451
|
+
* @param propsToRemove - Liste des clés à supprimer
|
|
452
|
+
* @returns - Un nouvel objet sans les propriétés supprimées.
|
|
453
|
+
* @private
|
|
454
|
+
*/
|
|
455
|
+
private _omitProps;
|
|
456
|
+
/**
|
|
457
|
+
* Extrait les propriétés d'un objet en fonction d'une liste de clés.
|
|
458
|
+
*
|
|
459
|
+
* @param obj - L'objet source.
|
|
460
|
+
* @param keys - Liste des clés à extraire.
|
|
461
|
+
* @param [transforms={}] - Transformations à appliquer aux valeurs.
|
|
462
|
+
* @returns - Un nouvel objet contenant les propriétés extraites.
|
|
463
|
+
* @private
|
|
464
|
+
*/
|
|
465
|
+
private _pickProps;
|
|
466
|
+
/**
|
|
467
|
+
* Vérifie si au moins une clé est présente dans l'objet et n'est pas nulle.
|
|
468
|
+
*
|
|
469
|
+
* @param obj - L'objet à vérifier.
|
|
470
|
+
* @param keys - Liste des clés à vérifier.
|
|
471
|
+
* @returns - true si au moins une clé est présente et non nulle, sinon false.
|
|
472
|
+
* @private
|
|
473
|
+
*/
|
|
474
|
+
private _hasAtLeastOne;
|
|
475
|
+
/**
|
|
476
|
+
* Crée un proxy filtré pour une liste d'entités.
|
|
477
|
+
* @private
|
|
478
|
+
*/
|
|
479
|
+
_createFilteredProxy<T extends Deletable>(list: T[]): T[];
|
|
480
|
+
/**
|
|
481
|
+
* Génère un nouvel identifiant unique.
|
|
482
|
+
* @returns Un identifiant unique.
|
|
483
|
+
* @protected
|
|
484
|
+
*/
|
|
485
|
+
protected _newId(): string;
|
|
486
|
+
/**
|
|
487
|
+
* ───────────────────────────────
|
|
488
|
+
* DraftStateMixin
|
|
489
|
+
* ───────────────────────────────
|
|
490
|
+
*/
|
|
491
|
+
/**
|
|
492
|
+
* Recalcule les champs autorisés en fonction de l'état actuel du draft.
|
|
493
|
+
* Utilisé pour validation dynamique dans le proxy this.data.
|
|
494
|
+
* @returns Liste des champs autorisés
|
|
495
|
+
* @private
|
|
496
|
+
*/
|
|
497
|
+
private _getAllowedFieldsForCurrentState;
|
|
498
|
+
/**
|
|
499
|
+
* Crée un proxy combinant draft + serveur, avec transformations facultatives.
|
|
500
|
+
* @param apiClient
|
|
501
|
+
* @param [server={}]
|
|
502
|
+
* @param [draft={}]
|
|
503
|
+
* @param _allowedFields - champs autorisés dans le draft (fallback si pas de metadata)
|
|
504
|
+
* @param [transforms={}] - transformateurs de lecture
|
|
505
|
+
* @param {{ throwOnError?: boolean }} [options={}] - options
|
|
506
|
+
* @param [entity=this] - référence à l'entité pour recalcul dynamique
|
|
507
|
+
* @returns {object}
|
|
508
|
+
* @private
|
|
509
|
+
*/
|
|
510
|
+
private _createDraftProxy;
|
|
511
|
+
/**
|
|
512
|
+
* Extrait les champs modifiables d'un schéma JSON.
|
|
513
|
+
*
|
|
514
|
+
* @param schema - Le schéma JSON à analyser.
|
|
515
|
+
* @param data - Les données à comparer.
|
|
516
|
+
* @param ctx - Contexte d'extraction (pour la récursion).
|
|
517
|
+
* @param ctx.defs - Définitions de schéma.
|
|
518
|
+
* @param ctx.visited - Ensemble des schémas déjà visités.
|
|
519
|
+
* @returns Liste des champs modifiables (propriétés `writeable` implicites).
|
|
520
|
+
* @private
|
|
521
|
+
*/
|
|
522
|
+
private _extractWritableFields;
|
|
523
|
+
/**
|
|
524
|
+
* Construit un brouillon et un proxy à partir des données et du schéma.
|
|
525
|
+
*
|
|
526
|
+
* @param options - Options de construction.
|
|
527
|
+
* @param options.data - Données à utiliser pour le brouillon.
|
|
528
|
+
* @param options.serverData - Données du serveur.
|
|
529
|
+
* @param options.previousDraft - Brouillon précédent pour la réactivité.
|
|
530
|
+
* @param options.constant - Nom de la constante ou tableau de constantes.
|
|
531
|
+
* @param options.apiClient - Instance de l'API.
|
|
532
|
+
* @param options.transforms - Transformations à appliquer.
|
|
533
|
+
* @param options.throwOnError - Si vrai, lève une erreur en cas de problème.
|
|
534
|
+
* @param options.removeFields - Liste des champs à ignorer.
|
|
535
|
+
* @returns Draft réactif, proxy combiné, snapshot initial.
|
|
536
|
+
* @private
|
|
537
|
+
*/
|
|
538
|
+
private _buildDraftAndProxy;
|
|
539
|
+
/**
|
|
540
|
+
* Invoque une méthode de bloc de manière type-safe.
|
|
541
|
+
* Élimine le besoin de casts `as any` dans les classes dérivées.
|
|
542
|
+
*
|
|
543
|
+
* @param blocks - Le Map contenant les noms de méthodes (doit être `as const`)
|
|
544
|
+
* @param methodName - Le nom de la méthode à invoquer
|
|
545
|
+
* @param blockData - Les données à passer à la méthode
|
|
546
|
+
* @returns La valeur retournée par la méthode
|
|
547
|
+
* @protected
|
|
548
|
+
*
|
|
549
|
+
* @example
|
|
550
|
+
* // Dans une classe dérivée :
|
|
551
|
+
* await this._invokeBlockMethod(User.UPDATE_BLOCKS, methodName, blockData);
|
|
552
|
+
*/
|
|
553
|
+
protected _invokeBlockMethod<T extends Map<string, any>>(blocks: T, methodName: string, blockData: any): Promise<any>;
|
|
554
|
+
/**
|
|
555
|
+
* Extrait les champs modifiés du schéma.
|
|
556
|
+
*
|
|
557
|
+
* @param apiClient - Instance de l'API.
|
|
558
|
+
* @param constant - Nom de la constante.
|
|
559
|
+
* @param data - Données à comparer.
|
|
560
|
+
* @param getInitialDraft - Fonction pour obtenir le brouillon initial.
|
|
561
|
+
* @param removeFields - Liste des champs à ignorer.
|
|
562
|
+
* @returns - Champs modifiés ou `null` si aucun changement.
|
|
563
|
+
* @protected
|
|
564
|
+
*/
|
|
565
|
+
/**
|
|
566
|
+
* Détecte si une valeur est un type d'upload (Buffer, File, Blob, Stream)
|
|
567
|
+
* @param obj - La valeur à tester
|
|
568
|
+
* @returns true si c'est un type d'upload
|
|
569
|
+
* @private
|
|
570
|
+
*/
|
|
571
|
+
private _isUploadType;
|
|
572
|
+
/**
|
|
573
|
+
* Compare deux valeurs de manière intelligente :
|
|
574
|
+
* - Types d'upload (Buffer, File, etc.) : comparaison par référence
|
|
575
|
+
* - Autres types : comparaison JSON
|
|
576
|
+
* @param current - Valeur actuelle
|
|
577
|
+
* @param initial - Valeur initiale
|
|
578
|
+
* @returns true si les valeurs sont différentes
|
|
579
|
+
* @private
|
|
580
|
+
*/
|
|
581
|
+
private _compareValues;
|
|
582
|
+
_extractChangedFieldsFromSchema(apiClient: ApiClient, constant: string, data: Record<string, any> | undefined, getInitialDraft: () => Record<string, any> | void, removeFields?: string[]): Record<string, any> | null;
|
|
583
|
+
/**
|
|
584
|
+
* Extrait tous les champs valides selon le schéma, et retourne uniquement ceux qui ont changé par rapport au draft initial.
|
|
585
|
+
* Contrairement à `_extractChangedFieldsFromSchema`, cette méthode retourne l'ensemble des champs valides (`updated`)
|
|
586
|
+
* uniquement s'il y a au moins un champ modifié (`changed`).
|
|
587
|
+
*
|
|
588
|
+
* ⚠️ Les champs sont filtrés en fonction :
|
|
589
|
+
* - des champs définis comme modifiables dans le schéma (`writeable`)
|
|
590
|
+
* - des champs non exclus dans `removeFields`
|
|
591
|
+
* - des champs définis dans `data` (les `undefined` sont ignorés)
|
|
592
|
+
*
|
|
593
|
+
* @param apiClient - L'instance de client API contenant les schémas.
|
|
594
|
+
* @param constant - Le nom de la constante de schéma (ex: "ADD_EVENT").
|
|
595
|
+
* @param data - Les nouvelles données à comparer avec le draft initial.
|
|
596
|
+
* @param getInitialDraft - Fonction qui retourne le draft initial (souvent `this.initialDraftData`).
|
|
597
|
+
* @param removeFields - Champs à ignorer même s'ils sont valides.
|
|
598
|
+
* @returns - Un objet `updated` avec les champs valides si au moins un champ a changé, sinon `null`.
|
|
599
|
+
* @private
|
|
600
|
+
*/
|
|
601
|
+
_extractAllValidFieldsFromSchema(apiClient: ApiClient, constant: string, data: Record<string, any> | undefined, getInitialDraft: () => Record<string, any>, removeFields?: string[]): Record<string, any> | null;
|
|
602
|
+
/**
|
|
603
|
+
* ───────────────────────────────
|
|
604
|
+
* MutualEntityMixin
|
|
605
|
+
* ───────────────────────────────
|
|
606
|
+
*/
|
|
607
|
+
/**
|
|
608
|
+
* Résout l'identifiant de l'entité si seul le slug est fourni.
|
|
609
|
+
* @param type - Le type d'entité (ex : "citoyens", "organizations", "projects").
|
|
610
|
+
* @returns L'identifiant résolu.
|
|
611
|
+
* @throws {ApiResponseError} - Si le slug ne correspond pas à l'entité attendue.
|
|
612
|
+
* @throws {ApiError} - Si l'identifiant ne peut pas être résolu.
|
|
613
|
+
* @throws {ApiResponseError} - Si une erreur se produit lors de la récupération
|
|
614
|
+
* @private
|
|
615
|
+
*/
|
|
616
|
+
private _resolveId;
|
|
617
|
+
/**
|
|
618
|
+
* Récupère le profil public de l'entité.
|
|
619
|
+
*
|
|
620
|
+
* @returns - Les données du profil public.
|
|
621
|
+
* @protected
|
|
622
|
+
*/
|
|
623
|
+
protected _getPublicProfile(): Promise<Record<string, any>>;
|
|
624
|
+
/**
|
|
625
|
+
* Récupère la classe d'entité et ses dépendances à partir du type d'entité.
|
|
626
|
+
*
|
|
627
|
+
* @private
|
|
628
|
+
*/
|
|
629
|
+
private _getEntityMeta;
|
|
630
|
+
/**
|
|
631
|
+
* Lier des données d'entité à une instance d'entité.
|
|
632
|
+
*
|
|
633
|
+
* @param entityType - Le type d'entité (ex : "citoyens", "organisations", "projets").
|
|
634
|
+
* @param entityData - Les données de l'entité à lier.
|
|
635
|
+
* @return L'entité liée ou les données brutes si la metadata n'existe pas.
|
|
636
|
+
* @private
|
|
637
|
+
*/
|
|
638
|
+
_linkEntity(entityType: string, entityData: object): AnyEntity | object;
|
|
639
|
+
/**
|
|
640
|
+
* Transforme un objet imbriqué avec {id, type} en instance d'entité.
|
|
641
|
+
* Utilisé pour transformer des champs comme author, target, etc.
|
|
642
|
+
*
|
|
643
|
+
* @param obj - L'objet à transformer (doit avoir au minimum {id, type}).
|
|
644
|
+
* @returns L'instance d'entité ou l'objet original si la transformation échoue.
|
|
645
|
+
* @protected
|
|
646
|
+
*/
|
|
647
|
+
protected _linkNestedEntity<T = any>(obj: any): T | any;
|
|
648
|
+
/**
|
|
649
|
+
* Récupère et lie une entité à partir de son ID.
|
|
650
|
+
*
|
|
651
|
+
* @param entityType - Le type d'entité.
|
|
652
|
+
* @param entityId - L'identifiant de l'entité.
|
|
653
|
+
* @param options - Options supplémentaires :
|
|
654
|
+
* @param options.skipGet - Si true, ne pas appeler `get()` sur l'entité.
|
|
655
|
+
* @return L'entité liée ou null.
|
|
656
|
+
* @private
|
|
657
|
+
*/
|
|
658
|
+
_linkEntityById(entityType: string, entityId: string, options?: {
|
|
659
|
+
skipGet?: boolean;
|
|
660
|
+
}): Promise<AnyEntity | null>;
|
|
661
|
+
/**
|
|
662
|
+
* Lie une liste d'entités à partir de leurs données.
|
|
663
|
+
*
|
|
664
|
+
* @param results - Liste de données d'entités.
|
|
665
|
+
* @return Liste d'entités liées.
|
|
666
|
+
* @private
|
|
667
|
+
*/
|
|
668
|
+
protected _linkEntities(results: any[]): any[];
|
|
669
|
+
/**
|
|
670
|
+
* Lie des entités présentes dans `this.serverData` à partir de leurs IDs,
|
|
671
|
+
* en les filtrant dynamiquement et en optionnellement les transformant.
|
|
672
|
+
*
|
|
673
|
+
* @param entityType - Le type d'entité (ex : "badges", "citoyens", etc.).
|
|
674
|
+
* @param filters - Clés/valeurs de filtres dynamiques. Les valeurs peuvent être :
|
|
675
|
+
* - un littéral (comparaison stricte ou intelligente selon le type),
|
|
676
|
+
* - une chaîne (utilise `includes` insensible à la casse),
|
|
677
|
+
* - une RegExp (appliquée si la valeur est une chaîne),
|
|
678
|
+
* - une fonction `(value) => boolean`.
|
|
679
|
+
* @param options - Options supplémentaires :
|
|
680
|
+
* @param options.key - Le champ de `this.serverData` à utiliser (par défaut = entityType).
|
|
681
|
+
* @param options.mapFn - Fonction de transformation `(entity) => any` appliquée au résultat.
|
|
682
|
+
*
|
|
683
|
+
* @return Liste des entités liées, filtrées et éventuellement transformées.
|
|
684
|
+
*
|
|
685
|
+
* @example
|
|
686
|
+
* // Tous les badges avec `name` contenant "codev"
|
|
687
|
+
* const badges = await this.linkEntitiesFromServerData("badges", { name: "codev" });
|
|
688
|
+
*
|
|
689
|
+
* @example
|
|
690
|
+
* // Badges non expirés et visibles
|
|
691
|
+
* const badges = await this.linkEntitiesFromServerData("badges", {
|
|
692
|
+
* expiredOn: false,
|
|
693
|
+
* show: "true"
|
|
694
|
+
* });
|
|
695
|
+
*
|
|
696
|
+
* @example
|
|
697
|
+
* // Badges émis après 2023
|
|
698
|
+
* const badges = await this.linkEntitiesFromServerData("badges", {
|
|
699
|
+
* issuedOn: (v) => new Date(v) >= new Date("2023-01-01")
|
|
700
|
+
* });
|
|
701
|
+
*
|
|
702
|
+
* @example
|
|
703
|
+
* // Extraire uniquement les noms des badges
|
|
704
|
+
* const namesOnly = await this.linkEntitiesFromServerData("badges", {}, {
|
|
705
|
+
* mapFn: (badge) => badge.meta.name
|
|
706
|
+
* });
|
|
707
|
+
*/
|
|
708
|
+
linkEntitiesFromServerData(entityType: string, filters?: EntityFilters, options?: LinkEntitiesOptions): Promise<any[]>;
|
|
709
|
+
/**
|
|
710
|
+
* Crée une instance d'entité à partir des données fournies.
|
|
711
|
+
* @template keyof EntityTypeMap T
|
|
712
|
+
* @param entityType
|
|
713
|
+
* @param entityData
|
|
714
|
+
* @return {EntityTypeMap[T]}
|
|
715
|
+
* @private
|
|
716
|
+
*/
|
|
717
|
+
_entityInstanceData<T extends keyof EntityTypeMap>(entityType: T, entityData: object): EntityTypeMap[T];
|
|
718
|
+
/**
|
|
719
|
+
* Crée une instance d'entité, et déclenche get() si certaines propriétés sont présentes.
|
|
720
|
+
* @template keyof EntityTypeMap T
|
|
721
|
+
* @param entityType
|
|
722
|
+
* @param [entityData={}]
|
|
723
|
+
* @return {Promise<EntityTypeMap[T]>}
|
|
724
|
+
*/
|
|
725
|
+
entity<T extends keyof EntityTypeMap>(entityType: T, entityData?: object): Promise<EntityTypeMap[T]>;
|
|
726
|
+
/**
|
|
727
|
+
* Récupère et lie une entité à partir de son slug.
|
|
728
|
+
* @param slug - Le slug de l'entité.
|
|
729
|
+
* @return L'entité liée.
|
|
730
|
+
* @throws {ApiError} Si le slug est vide.
|
|
731
|
+
* @throws {ApiResponseError} Si le slug n'existe pas ou est invalide.
|
|
732
|
+
*/
|
|
733
|
+
entityBySlug(slug: string): Promise<AnyEntity>;
|
|
734
|
+
/**
|
|
735
|
+
* Construit dynamiquement des filtres sur un lien entre entités
|
|
736
|
+
*
|
|
737
|
+
* @param id - L'ID de l'entité cible.
|
|
738
|
+
* @param options - Options de filtrage.
|
|
739
|
+
* @param options.linkType - Le type de lien (ex: "memberOf", "projects", etc.).
|
|
740
|
+
* @param options.isAdmin - Si défini, filtre selon l'existence de isAdmin.
|
|
741
|
+
* @param options.isAdminPending - Si défini, filtre selon l'existence de isAdminPending.
|
|
742
|
+
* @param options.isInviting - Si défini, filtre selon l'existence de isInviting.
|
|
743
|
+
* @param options.toBeValidated - Si défini, filtre selon l'existence de toBeValidated.
|
|
744
|
+
* @param options.roles - Rôles à filtrer.
|
|
745
|
+
* @returns - Un objet de filtres à passer à une requête.
|
|
746
|
+
* @throws {TypeError} - Si les types des paramètres ne sont pas valides.
|
|
747
|
+
* @protected
|
|
748
|
+
*/
|
|
749
|
+
_buildLinkFilters(id: string | null, { linkType, isAdmin, isAdminPending, isInviting, toBeValidated, roles }: {
|
|
750
|
+
linkType: "memberOf" | "projects" | "events";
|
|
751
|
+
isAdmin?: boolean;
|
|
752
|
+
isAdminPending?: boolean;
|
|
753
|
+
isInviting?: boolean;
|
|
754
|
+
toBeValidated?: boolean;
|
|
755
|
+
roles?: string[];
|
|
756
|
+
}): LinkFilters;
|
|
757
|
+
/**
|
|
758
|
+
* Retourne les métadonnées de lien pour une entité :
|
|
759
|
+
* - `linkType` : clé dans `serverData.links`
|
|
760
|
+
* - `connectTypeConnect` : valeur envoyée pour `connect()`
|
|
761
|
+
* - `connectTypeDisconnect` : valeur envoyée pour `disconnect()`
|
|
762
|
+
* @throws {ApiError} - Si le type d'entité est inconnu.
|
|
763
|
+
* @protected
|
|
764
|
+
*/
|
|
765
|
+
protected _getLinkMeta(): LinkMeta;
|
|
766
|
+
/**
|
|
767
|
+
* Vérifie si l'entité prend en charge les opérations de lien (`connect`, `disconnect`, etc.).
|
|
768
|
+
* Utilise `_getLinkMeta()` comme source unique de vérité.
|
|
769
|
+
*
|
|
770
|
+
* @throws {ApiError} - Si l'entité ne supporte pas les liens.
|
|
771
|
+
* @protected
|
|
772
|
+
*/
|
|
773
|
+
protected _checkLinkableEntity(): void;
|
|
774
|
+
/**
|
|
775
|
+
* Retourne le lien de l'utilisateur connecté avec l'entité cible (dans `parent.serverData.links`)
|
|
776
|
+
* @protected
|
|
777
|
+
*/
|
|
778
|
+
protected _getLinkFromConnectedUser(): import("./serverDataType/common.js").LinkProjectRef | import("./serverDataType/common.js").LinkEventsRef | import("./serverDataType/common.js").LinkfriendsRef | import("./serverDataType/common.js").LinkMemberOfUserRef | null;
|
|
779
|
+
/**
|
|
780
|
+
* Soumet une demande de connexion à une entité (ex : membre, contributeur),
|
|
781
|
+
* ou valide l'invitation si elle existe déjà.
|
|
782
|
+
*
|
|
783
|
+
* @returns - Résultat de l'API
|
|
784
|
+
* @throws {ApiError} - En cas d'erreur de connexion ou d'invitation.
|
|
785
|
+
* @private
|
|
786
|
+
*/
|
|
787
|
+
private _submitLinkRequest;
|
|
788
|
+
/**
|
|
789
|
+
* Soumet une demande pour devenir administrateur d'une entité.
|
|
790
|
+
*
|
|
791
|
+
* @returns {Promise<Object>}
|
|
792
|
+
* @throws {ApiError}
|
|
793
|
+
* @private
|
|
794
|
+
*/
|
|
795
|
+
private _submitLinkRequestAdmin;
|
|
796
|
+
/**
|
|
797
|
+
* Accepte une demande de lien (ex : invitation à rejoindre un groupe).
|
|
798
|
+
*
|
|
799
|
+
* @returns - Résultat de l'API
|
|
800
|
+
* @throws {ApiError} - En cas d'erreur de connexion ou d'invitation.
|
|
801
|
+
* @private
|
|
802
|
+
*/
|
|
803
|
+
private _acceptLinkRequest;
|
|
804
|
+
/**
|
|
805
|
+
* Annule une demande de lien ou se déconnecte d'une entité.
|
|
806
|
+
*
|
|
807
|
+
* @returns - Résultat de l'API
|
|
808
|
+
* @throws {ApiError} - En cas d'erreur de connexion ou d'invitation.
|
|
809
|
+
* @private
|
|
810
|
+
*/
|
|
811
|
+
private _leaveLinkRequest;
|
|
812
|
+
/**
|
|
813
|
+
* ───────────────────────────────
|
|
814
|
+
* EntityMixin
|
|
815
|
+
* ───────────────────────────────
|
|
816
|
+
*/
|
|
817
|
+
/**
|
|
818
|
+
* Récupérer le profil public de l'entité
|
|
819
|
+
*
|
|
820
|
+
* @returns - Les données de réponse.
|
|
821
|
+
*/
|
|
822
|
+
get(): Promise<Record<string, any>>;
|
|
823
|
+
/**
|
|
824
|
+
* Mettre à jour les paramètres d'un élément : Mise à jour des paramètres spécifiques d'un élément.
|
|
825
|
+
* Constant : UPDATE_SETTINGS
|
|
826
|
+
* @param data
|
|
827
|
+
* @returns - Les données de réponse.
|
|
828
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
829
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
830
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
831
|
+
*/
|
|
832
|
+
updateSettings(data: Omit<UpdateSettingsData, "idEntity" | "typeEntity">): Promise<unknown>;
|
|
833
|
+
/**
|
|
834
|
+
* Mettre à jour la description d'un élément : Permet de mettre à jour la description courte et complète d'un élément.
|
|
835
|
+
* Constant : UPDATE_BLOCK_DESCRIPTION
|
|
836
|
+
* @param data - Les données à envoyer.
|
|
837
|
+
* @returns - Les données de réponse.
|
|
838
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
839
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
840
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
841
|
+
*/
|
|
842
|
+
updateDescription(data: Omit<UpdateBlockDescriptionData, "id" | "typeElement" | "block">): Promise<unknown>;
|
|
843
|
+
/**
|
|
844
|
+
* Mettre à jour les informations d'un élément : Permet de mettre à jour les informations générales d'un élément (nom, contacts, etc.).
|
|
845
|
+
* Constant : UPDATE_BLOCK_INFO
|
|
846
|
+
* @param data - Les données à envoyer.
|
|
847
|
+
* @returns - Les données de réponse.
|
|
848
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
849
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
850
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
851
|
+
*/
|
|
852
|
+
updateInfo(data: Omit<UpdateBlockInfoData, "id" | "typeElement" | "block">): Promise<unknown>;
|
|
853
|
+
/**
|
|
854
|
+
* Mettre à jour les réseaux sociaux d'un élément : Permet de mettre à jour les liens vers les réseaux sociaux d'un élément.
|
|
855
|
+
* Constant : UPDATE_BLOCK_SOCIAL
|
|
856
|
+
* @param data - Les données à envoyer.
|
|
857
|
+
* @returns - Les données de réponse.
|
|
858
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
859
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
860
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
861
|
+
*/
|
|
862
|
+
updateSocial(data: Omit<UpdateBlockSocialData, "id" | "typeElement" | "block">): Promise<unknown>;
|
|
863
|
+
/**
|
|
864
|
+
* @private
|
|
865
|
+
*/
|
|
866
|
+
private _isPostalAddress;
|
|
867
|
+
/**
|
|
868
|
+
* @private
|
|
869
|
+
*/
|
|
870
|
+
private _isGeo;
|
|
871
|
+
/**
|
|
872
|
+
* @private
|
|
873
|
+
*/
|
|
874
|
+
private _isGeoPosition;
|
|
875
|
+
/**
|
|
876
|
+
* Mettre à jour les localités d'un élément : Permet de mettre à jour l'adresse et les informations géographiques d'un élément.
|
|
877
|
+
* Constant : UPDATE_BLOCK_LOCALITY
|
|
878
|
+
* @param data - Les données à envoyer.
|
|
879
|
+
* @returns - Les données de réponse.
|
|
880
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
881
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
882
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
883
|
+
*/
|
|
884
|
+
updateLocality(data: Omit<UpdateBlockLocalityData, "id" | "typeElement" | "block">): Promise<unknown>;
|
|
885
|
+
/**
|
|
886
|
+
* Mettre à jour le slug d'un élément : Permet de mettre à jour le slug pour une URL simplifiée.
|
|
887
|
+
* Constant : UPDATE_BLOCK_SLUG
|
|
888
|
+
* @param data - Les données à envoyer.
|
|
889
|
+
* @param data.slug - Le nouveau slug à appliquer.
|
|
890
|
+
* @returns - Les données de réponse.
|
|
891
|
+
*/
|
|
892
|
+
updateSlug({ slug }: {
|
|
893
|
+
slug: string;
|
|
894
|
+
}): Promise<unknown>;
|
|
895
|
+
/**
|
|
896
|
+
* Mettre à jour l'image de profil : Permet de mettre à jour l'image de profil d'un utilisateur ou d'une entité.
|
|
897
|
+
* Constant : PROFIL_IMAGE
|
|
898
|
+
* @param data - Les données à envoyer.
|
|
899
|
+
* @param data.profil_avatar - L'image de profil à mettre à jour.
|
|
900
|
+
* @returns - Les données de réponse.
|
|
901
|
+
*/
|
|
902
|
+
updateImageProfil({ profil_avatar: image }: {
|
|
903
|
+
profil_avatar: UploadInput;
|
|
904
|
+
}): Promise<unknown>;
|
|
905
|
+
/**
|
|
906
|
+
* Crée une instance d'organisation et récupère son profil si nécessaire.
|
|
907
|
+
*
|
|
908
|
+
* @param organizationData - Les données pour initialiser l'organisation.
|
|
909
|
+
* - Si { id } ou { slug } : récupère l'organisation existante (GET)
|
|
910
|
+
* - Sinon : crée une nouvelle instance (CREATE)
|
|
911
|
+
* @returns Une promesse qui résout l'objet Organisation créé.
|
|
912
|
+
* @throws {Error} Si une erreur se produit lors de la création de l'organisation.
|
|
913
|
+
*/
|
|
914
|
+
organization(organizationData?: OrganizationInput): Promise<Organization>;
|
|
915
|
+
/**
|
|
916
|
+
* Crée une instance de projet et récupère son profil si nécessaire.
|
|
917
|
+
*
|
|
918
|
+
* @param projectData - Les données pour initialiser le projet.
|
|
919
|
+
* - Si { id } ou { slug } : récupère le projet existant (GET)
|
|
920
|
+
* - Sinon : crée une nouvelle instance (CREATE)
|
|
921
|
+
* @returns Une promesse qui résout l'objet Projet créé.
|
|
922
|
+
* @throws {Error} Si une erreur se produit lors de la création du projet.
|
|
923
|
+
*/
|
|
924
|
+
project(projectData?: ProjectInput): Promise<Project>;
|
|
925
|
+
/**
|
|
926
|
+
* Crée une instance de POI et la récupère si nécessaire.
|
|
927
|
+
*
|
|
928
|
+
* @param poiData - Les données pour initialiser le POI.
|
|
929
|
+
* - Si { id } ou { slug } : récupère le POI existant (GET)
|
|
930
|
+
* - Sinon : crée une nouvelle instance (CREATE)
|
|
931
|
+
* @returns Une promesse qui résout l'objet POI créé.
|
|
932
|
+
* @throws {Error} Si une erreur se produit lors de la création du POI.
|
|
933
|
+
*/
|
|
934
|
+
poi(poiData?: PoiInput): Promise<Poi>;
|
|
935
|
+
/**
|
|
936
|
+
* Crée une instance d'événement et la récupère si nécessaire.
|
|
937
|
+
*
|
|
938
|
+
* @param eventData - Les données pour initialiser l'événement.
|
|
939
|
+
* - Si { id } ou { slug } : récupère l'événement existant (GET)
|
|
940
|
+
* - Sinon : crée une nouvelle instance (CREATE)
|
|
941
|
+
* @returns Une promesse qui résout l'objet Événement créé.
|
|
942
|
+
* @throws {Error} Si une erreur se produit lors de la création de l'événement.
|
|
943
|
+
*/
|
|
944
|
+
event(eventData?: EventInput): Promise<EventEntity>;
|
|
945
|
+
/**
|
|
946
|
+
* Crée une instance de badge et la récupère si nécessaire.
|
|
947
|
+
*
|
|
948
|
+
* @param badgeData - Les données pour initialiser le badge.
|
|
949
|
+
* - Si { id } : récupère le badge existant (GET)
|
|
950
|
+
* - Sinon : crée une nouvelle instance (CREATE)
|
|
951
|
+
* @returns Une promesse qui résout l'objet Badge créé.
|
|
952
|
+
* @throws {Error} Si une erreur se produit lors de la création du badge.
|
|
953
|
+
*/
|
|
954
|
+
badge(badgeData?: BadgeInput): Promise<Badge>;
|
|
955
|
+
/**
|
|
956
|
+
* Crée une instance de news et la récupère si nécessaire.
|
|
957
|
+
*
|
|
958
|
+
* @param newsData - Les données pour initialiser la news.
|
|
959
|
+
* - Si { id } : récupère la news existante (GET)
|
|
960
|
+
* - Sinon : crée une nouvelle instance (CREATE)
|
|
961
|
+
* @returns Une promesse qui résout l'objet News créé.
|
|
962
|
+
* @throws {Error} Si une erreur se produit lors de la création de la news.
|
|
963
|
+
*/
|
|
964
|
+
news(newsData?: NewsInput): Promise<News>;
|
|
965
|
+
/**
|
|
966
|
+
* Récupérer les organisations d'une entitée : la liste des organisations dont l'entité est membre ou admin valide.
|
|
967
|
+
* Constant : GET_ORGANIZATIONS_ADMIN | GET_ORGANIZATIONS_NO_ADMIN
|
|
968
|
+
* @param data - Paramètres (partiels) de recherche/pagination.
|
|
969
|
+
* @returns - Les données de réponse.
|
|
970
|
+
*/
|
|
971
|
+
getOrganizations(data?: Partial<GetOrganizationsAdminData | GetOrganizationsNoAdminData>): Promise<PaginatorPage<Organization>>;
|
|
972
|
+
/**
|
|
973
|
+
* Récupérer les projets d'une entitée : liste des projets de l'entité ou elle est "parent" ou "contributeur".
|
|
974
|
+
* Constant : GET_PROJECTS_ADMIN | GET_PROJECTS_NO_ADMIN
|
|
975
|
+
* @param data - Paramètres (partiels) de recherche/pagination.
|
|
976
|
+
* @returns - Les données de réponse.
|
|
977
|
+
*/
|
|
978
|
+
getProjects(data?: Partial<GetProjectsAdminData | GetProjectsNoAdminData>): Promise<PaginatorPage<Project>>;
|
|
979
|
+
/**
|
|
980
|
+
* Récupérer les POIs d'une entité : liste des POIs de l'entité ou elle est "parent".
|
|
981
|
+
* Constant : GET_POIS_NO_ADMIN / GET_POIS_ADMIN
|
|
982
|
+
* @param data - Paramètres (partiels) de recherche/pagination.
|
|
983
|
+
* @returns - Les données de réponse.
|
|
984
|
+
*/
|
|
985
|
+
getPois(data?: Partial<GetPoisAdminData | GetPoisNoAdminData>): Promise<PaginatorPage<Poi>>;
|
|
986
|
+
/**
|
|
987
|
+
* Récupérer les abonnés d'une entité
|
|
988
|
+
* Constant : GET_SUBSCRIBERS
|
|
989
|
+
* @param data - Paramètres (partiels) de recherche/pagination.
|
|
990
|
+
* @returns - Les données de réponse.
|
|
991
|
+
*/
|
|
992
|
+
getSubscribers(data?: Partial<GetSubscribersData>): Promise<PaginatorPage<User>>;
|
|
993
|
+
/**
|
|
994
|
+
* Liste des badges créés par l'entité
|
|
995
|
+
* Constant : GET_BADGES
|
|
996
|
+
* @param data - Paramètres (partiels) de recherche/pagination.
|
|
997
|
+
* @returns - Les données de réponse.
|
|
998
|
+
*/
|
|
999
|
+
getBadgesIssuer(data?: Partial<GetBadgesData>): Promise<PaginatorPage<Badge>>;
|
|
1000
|
+
/**
|
|
1001
|
+
* Récupérer les actualités : Récupère la liste d'actualités selon plusieurs critères.
|
|
1002
|
+
* Constant : GET_NEWS
|
|
1003
|
+
* @param data - Paramètres (partiels) de recherche/pagination.
|
|
1004
|
+
* @returns - Les données de réponse.
|
|
1005
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1006
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1007
|
+
*/
|
|
1008
|
+
getNews(data?: Partial<Omit<GetNewsData, "pathParams">>): Promise<News[]>;
|
|
1009
|
+
/**
|
|
1010
|
+
* Récupérer la galerie d'une entité.
|
|
1011
|
+
* Constant : GET_GALLERY
|
|
1012
|
+
* @param data - Paramètres (partiels) de recherche.
|
|
1013
|
+
* @returns - Les données de réponse.
|
|
1014
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1015
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1016
|
+
*/
|
|
1017
|
+
getGallery(data?: Partial<Omit<GetGalleryData, "pathParams">> & {
|
|
1018
|
+
pathParams?: {
|
|
1019
|
+
docType?: "image" | "file";
|
|
1020
|
+
};
|
|
1021
|
+
}): Promise<Record<string, any>>;
|
|
1022
|
+
/**
|
|
1023
|
+
* Soumet une demande pour rejoindre l'entité courante (ex. organisation, projet, événement...).
|
|
1024
|
+
* Si une invitation est en attente, elle est automatiquement acceptée.
|
|
1025
|
+
*
|
|
1026
|
+
* @returns - Résultat de la demande ou de la validation.
|
|
1027
|
+
* @throws {ApiError} - Si l'entité ne supporte pas l'action ou si une demande est déjà en cours.
|
|
1028
|
+
*/
|
|
1029
|
+
requestToJoin(): Promise<unknown>;
|
|
1030
|
+
/**
|
|
1031
|
+
* Soumet une demande pour devenir administrateur de l'entité courante.
|
|
1032
|
+
* Si une invitation est en attente, elle est automatiquement validée.
|
|
1033
|
+
*
|
|
1034
|
+
* @returns - Résultat de la demande ou de la validation.
|
|
1035
|
+
* @throws {ApiError} - Si l'entité ne supporte pas l'action ou si une demande est déjà en cours.
|
|
1036
|
+
*/
|
|
1037
|
+
requestToJoinAdmin(): Promise<unknown>;
|
|
1038
|
+
/**
|
|
1039
|
+
* Accepte une invitation à rejoindre l'entité courante.
|
|
1040
|
+
* Ne fonctionne que si un lien avec `isInviting` est détecté.
|
|
1041
|
+
*
|
|
1042
|
+
* @returns - Résultat de l'acceptation de l'invitation.
|
|
1043
|
+
* @throws {ApiError} - Si aucune invitation n'est en attente ou si l'entité ne supporte pas cette action.
|
|
1044
|
+
*/
|
|
1045
|
+
acceptInvitation(): Promise<unknown>;
|
|
1046
|
+
/**
|
|
1047
|
+
* Se désengage de l'entité courante : quitte un rôle (membre, contributeur, etc.).
|
|
1048
|
+
*
|
|
1049
|
+
* @returns - Résultat de la déconnexion.
|
|
1050
|
+
* @throws {ApiError} - Si l'entité ne supporte pas l'action ou si l'utilisateur n'est pas lié à cette entité.
|
|
1051
|
+
*/
|
|
1052
|
+
leave(): Promise<unknown>;
|
|
1053
|
+
/**
|
|
1054
|
+
* S'abonne à l'entité courante.
|
|
1055
|
+
*
|
|
1056
|
+
* @returns - Résultat de l'abonnement.
|
|
1057
|
+
* @throws {ApiError} - Si l'utilisateur n'est pas connecté ou si l'entité n'est pas enregistrée.
|
|
1058
|
+
*/
|
|
1059
|
+
follow(): Promise<unknown>;
|
|
1060
|
+
/**
|
|
1061
|
+
* Se désabonne de l'entité courante.
|
|
1062
|
+
*
|
|
1063
|
+
* @returns - Résultat de la désinscription.
|
|
1064
|
+
* @throws {ApiError} - Si l'utilisateur n'est pas connecté ou si l'entité n'est pas enregistrée.
|
|
1065
|
+
*/
|
|
1066
|
+
unfollow(): Promise<unknown>;
|
|
1067
|
+
/**
|
|
1068
|
+
* Vérifie si l'utilisateur est connecté et a accès à l'entité.
|
|
1069
|
+
*
|
|
1070
|
+
* @param action - Action à effectuer.
|
|
1071
|
+
* @throws {ApiError} - Si l'utilisateur n'est pas connecté ou si l'entité n'est pas enregistrée.
|
|
1072
|
+
* @private
|
|
1073
|
+
*/
|
|
1074
|
+
private _checkAccess;
|
|
1075
|
+
/**
|
|
1076
|
+
* Vérifie si l'utilisateur a un lien valide avec l'entité.
|
|
1077
|
+
*
|
|
1078
|
+
* @param userLink
|
|
1079
|
+
* @returns - `true` si le lien est valide, `false` sinon.
|
|
1080
|
+
* @protected
|
|
1081
|
+
*/
|
|
1082
|
+
protected _validateUserLink(userLink: MinimalUserLink | null | undefined): boolean;
|
|
1083
|
+
/**
|
|
1084
|
+
* Vérifie si l'entité est d'un type spécifique.
|
|
1085
|
+
*
|
|
1086
|
+
* @param types - Types d'entité attendus.
|
|
1087
|
+
* @throws {ApiError} - Si l'entité n'est pas du type attendu.
|
|
1088
|
+
* @protected
|
|
1089
|
+
*/
|
|
1090
|
+
protected _assertEntityType(...types: string[]): void;
|
|
1091
|
+
/**
|
|
1092
|
+
* Vérifie si l'entité est liée à un type de lien spécifique.
|
|
1093
|
+
*
|
|
1094
|
+
* @param linkType - Type de lien à vérifier.
|
|
1095
|
+
* @returns - `true` si l'entité est liée, `false` sinon.
|
|
1096
|
+
* @protected
|
|
1097
|
+
*/
|
|
1098
|
+
protected _isLinked(linkType: string): boolean;
|
|
1099
|
+
/**
|
|
1100
|
+
* Vérifie si l'utilisateur est l'auteur de l'entité.
|
|
1101
|
+
*
|
|
1102
|
+
* @returns - `true` si l'utilisateur est l'auteur, `false` sinon.
|
|
1103
|
+
* @throws {ApiError} - Si l'utilisateur n'est pas connecté ou si les données du serveur ne sont pas disponibles.
|
|
1104
|
+
*/
|
|
1105
|
+
isAuthor(): boolean;
|
|
1106
|
+
/**
|
|
1107
|
+
* Vérifie si l'utilisateur est administrateur de l'entité.
|
|
1108
|
+
*
|
|
1109
|
+
* @returns - `true` si l'utilisateur est administrateur, `false` sinon.
|
|
1110
|
+
* @throws {ApiError}
|
|
1111
|
+
*/
|
|
1112
|
+
isAdmin(): boolean;
|
|
1113
|
+
/**
|
|
1114
|
+
* Vérifie si l'utilisateur est soit l'auteur, soit administrateur de l'entité.
|
|
1115
|
+
*
|
|
1116
|
+
* @returns - `true` si l'utilisateur est l'auteur ou administrateur, `false` sinon.
|
|
1117
|
+
* @throws {ApiError}
|
|
1118
|
+
*/
|
|
1119
|
+
isAuthorOrAdmin(): boolean;
|
|
1120
|
+
/**
|
|
1121
|
+
* Vérifie si l'utilisateur est membre de l'entité.
|
|
1122
|
+
*
|
|
1123
|
+
* @returns - `true` si l'utilisateur est membre, `false` sinon.
|
|
1124
|
+
* @throws {ApiError}
|
|
1125
|
+
*/
|
|
1126
|
+
isMember(): boolean;
|
|
1127
|
+
/**
|
|
1128
|
+
* Vérifie si l'utilisateur est contributeur de l'entité.
|
|
1129
|
+
*
|
|
1130
|
+
* @returns - `true` si l'utilisateur est contributeur, `false` sinon.
|
|
1131
|
+
* @throws {ApiError}
|
|
1132
|
+
*/
|
|
1133
|
+
isContributor(): boolean;
|
|
1134
|
+
/**
|
|
1135
|
+
* Vérifie si l'utilisateur est participant de l'entité.
|
|
1136
|
+
*
|
|
1137
|
+
* @returns - `true` si l'utilisateur est participant, `false` sinon.
|
|
1138
|
+
* @throws {ApiError}
|
|
1139
|
+
*/
|
|
1140
|
+
isAttendee(): boolean;
|
|
1141
|
+
/**
|
|
1142
|
+
* Vérifie si l'utilisateur suit l'entité.
|
|
1143
|
+
*
|
|
1144
|
+
* @returns - `true` si l'utilisateur suit l'entité, `false` sinon.
|
|
1145
|
+
* @throws {ApiError}
|
|
1146
|
+
*/
|
|
1147
|
+
isFollower(): boolean;
|
|
1148
|
+
/**
|
|
1149
|
+
* Vérifie si l'utilisateur est abonné à l'entité.
|
|
1150
|
+
*
|
|
1151
|
+
* @returns - `true` si l'utilisateur est abonné, `false` sinon.
|
|
1152
|
+
* @throws {ApiError}
|
|
1153
|
+
*/
|
|
1154
|
+
isFollowing(): boolean;
|
|
1155
|
+
/**
|
|
1156
|
+
* Récupère le JSON personnalisé de l'entité
|
|
1157
|
+
*
|
|
1158
|
+
* @returns - Le JSON personnalisé de l'entité.
|
|
1159
|
+
* @throws {ApiError} - Si le slug de l'entité n'est pas défini.
|
|
1160
|
+
*/
|
|
1161
|
+
getCostumJson(): Promise<unknown>;
|
|
1162
|
+
/**
|
|
1163
|
+
* Génère des plages d'index pour la pagination.
|
|
1164
|
+
*
|
|
1165
|
+
* @param searchType - Types de recherche.
|
|
1166
|
+
* @param indexStep - Pas d'index.
|
|
1167
|
+
* @param previousRanges - Plages précédentes.
|
|
1168
|
+
* @returns - Plages d'index générées.
|
|
1169
|
+
* @private
|
|
1170
|
+
*/
|
|
1171
|
+
private _generateRanges;
|
|
1172
|
+
/**
|
|
1173
|
+
* Normalise le compte des résultats.
|
|
1174
|
+
*
|
|
1175
|
+
* @param count - Compte des résultats.
|
|
1176
|
+
* @returns - Compte normalisé.
|
|
1177
|
+
* @private
|
|
1178
|
+
*/
|
|
1179
|
+
private _normalizeCount;
|
|
1180
|
+
/**
|
|
1181
|
+
* Récupère une valeur par défaut depuis un endpoint donné.
|
|
1182
|
+
*
|
|
1183
|
+
* @param constant - Le nom unique de l'endpoint (ex: "GET_ORGANIZATIONS_NO_ADMIN")
|
|
1184
|
+
* @param path - Le chemin vers la propriété (ex: "searchType")
|
|
1185
|
+
* @returns La valeur par défaut, ou undefined si non trouvée
|
|
1186
|
+
*/
|
|
1187
|
+
_getDefaultFromEndpoint(constant: string, path: string): unknown;
|
|
1188
|
+
/**
|
|
1189
|
+
* Coeur de pagination stateless et réutilisable.
|
|
1190
|
+
*/
|
|
1191
|
+
_createPaginatorEngine<TData extends Record<string, any>, TOut>({ initialData, finalizer }: {
|
|
1192
|
+
initialData: Partial<TData>;
|
|
1193
|
+
finalizer: (data: TData) => Promise<FinalizerResult<TOut>>;
|
|
1194
|
+
}): {
|
|
1195
|
+
next: () => Promise<PaginatorPage<TOut>>;
|
|
1196
|
+
};
|
|
1197
|
+
/**
|
|
1198
|
+
* Injection de contexte Communecter dans une requête finalizer.
|
|
1199
|
+
*/
|
|
1200
|
+
_withCostumContext<TIn extends Record<string, unknown>, TOut>(baseFinalizer: (data: TIn & {
|
|
1201
|
+
costumSlug: string;
|
|
1202
|
+
contextId: string;
|
|
1203
|
+
contextType: EntityType;
|
|
1204
|
+
sourceKey: string[];
|
|
1205
|
+
}) => Promise<TOut>): (data: TIn) => Promise<TOut>;
|
|
1206
|
+
/**
|
|
1207
|
+
* ───────────────────────────────
|
|
1208
|
+
* custom
|
|
1209
|
+
* ───────────────────────────────
|
|
1210
|
+
*/
|
|
1211
|
+
/**
|
|
1212
|
+
* Recherche globale liée au *costum* (stateless).
|
|
1213
|
+
* Injecte automatiquement le contexte (slug/id/type) via `_withCostumContext`,
|
|
1214
|
+
* puis pagine via `_createPaginatorEngine`. Cette méthode renvoie **directement
|
|
1215
|
+
* la première page** (rétro-compatible) avec `.results`, `.count`, et des helpers
|
|
1216
|
+
* de pagination si disponibles.
|
|
1217
|
+
*
|
|
1218
|
+
* Remarque : les éléments de `results` peuvent être hétérogènes (multi-collections)
|
|
1219
|
+
* et éventuellement « liés » en entités par le moteur interne de pagination.
|
|
1220
|
+
*
|
|
1221
|
+
* @param data
|
|
1222
|
+
* Paramètres de recherche (partiels — les valeurs manquantes sont complétées
|
|
1223
|
+
* par le moteur de pagination et le contexte).
|
|
1224
|
+
* @returns
|
|
1225
|
+
* Première page paginée : `results` (T[]), `count.total`, `hasNext`, etc.
|
|
1226
|
+
* @throws {ApiResponseError}
|
|
1227
|
+
* @throws {Error}
|
|
1228
|
+
*
|
|
1229
|
+
* @example
|
|
1230
|
+
* // Recherche simple (première page)
|
|
1231
|
+
* const page = await entity.searchCostum({ name: "marseille", searchType: ["projects"], indexStep: 12, indexMin: 0 });
|
|
1232
|
+
* console.log(page.results, page.count.total);
|
|
1233
|
+
*
|
|
1234
|
+
* @example
|
|
1235
|
+
* // Paginer
|
|
1236
|
+
* if (page.hasNext) {
|
|
1237
|
+
* const nextPage = await page.next();
|
|
1238
|
+
* console.log(nextPage.pageNumber, nextPage.results.length);
|
|
1239
|
+
* }
|
|
1240
|
+
*/
|
|
1241
|
+
searchCostum(data?: Partial<GlobalAutocompleteCostumData>): Promise<PaginatorPage<any>>;
|
|
1242
|
+
/**
|
|
1243
|
+
* @param data
|
|
1244
|
+
* Paramètres de recherche (partiels — les valeurs manquantes sont complétées
|
|
1245
|
+
* par le moteur de pagination et le contexte).
|
|
1246
|
+
* @returns
|
|
1247
|
+
* Première page paginée : `results` (T[]), `count.total`, `hasNext`, etc.
|
|
1248
|
+
* @throws {ApiResponseError}
|
|
1249
|
+
* @throws {Error}
|
|
1250
|
+
*/
|
|
1251
|
+
costumEventRequestActors(data?: Partial<Omit<CostumEventRequestActorsData, "pathParams">>): Promise<unknown>;
|
|
1252
|
+
/**
|
|
1253
|
+
* @param data
|
|
1254
|
+
* Paramètres de recherche (partiels — les valeurs manquantes sont complétées
|
|
1255
|
+
* par le moteur de pagination et le contexte).
|
|
1256
|
+
* Première page paginée : `results` (T[]), `count.total`, `hasNext`, etc.
|
|
1257
|
+
* @throws {ApiResponseError}
|
|
1258
|
+
* @throws {Error}
|
|
1259
|
+
*/
|
|
1260
|
+
costumEventRequestSubevents(data?: Partial<Omit<CostumEventRequestSubeventsData, "pathParams">>): Promise<unknown>;
|
|
1261
|
+
/**
|
|
1262
|
+
* @param data
|
|
1263
|
+
* Paramètres de recherche (partiels — les valeurs manquantes sont complétées
|
|
1264
|
+
* par le moteur de pagination et le contexte).
|
|
1265
|
+
* @returns
|
|
1266
|
+
* Première page paginée : `results` (T[]), `count.total`, `hasNext`, etc.
|
|
1267
|
+
* @throws {ApiResponseError}
|
|
1268
|
+
* @throws {Error}
|
|
1269
|
+
*/
|
|
1270
|
+
costumEventRequestDates(data?: Partial<Omit<CostumEventRequestDatesData, "pathParams">>): Promise<unknown>;
|
|
1271
|
+
/**
|
|
1272
|
+
* @param data
|
|
1273
|
+
* Paramètres de recherche (partiels — les valeurs manquantes sont complétées
|
|
1274
|
+
* par le moteur de pagination et le contexte).
|
|
1275
|
+
* @returns
|
|
1276
|
+
* Première page paginée : `results` (T[]), `count.total`, `hasNext`, etc.
|
|
1277
|
+
* @throws {ApiResponseError}
|
|
1278
|
+
* @throws {Error}
|
|
1279
|
+
*/
|
|
1280
|
+
costumEventRequestElementEvent(data?: Partial<Omit<CostumEventRequestElementEventData, "pathParams">>): Promise<unknown>;
|
|
1281
|
+
/**
|
|
1282
|
+
* @param data
|
|
1283
|
+
* Paramètres de recherche (partiels — les valeurs manquantes sont complétées
|
|
1284
|
+
* par le moteur de pagination et le contexte).
|
|
1285
|
+
* @returns
|
|
1286
|
+
* Première page paginée : `results` (T[]), `count.total`, `hasNext`, etc.
|
|
1287
|
+
* @throws {ApiResponseError}
|
|
1288
|
+
* @throws {Error}
|
|
1289
|
+
*/
|
|
1290
|
+
costumEventRequestCategories(data?: Partial<Omit<CostumEventRequestCategoriesData, "pathParams">>): Promise<unknown>;
|
|
1291
|
+
/**
|
|
1292
|
+
* @param data
|
|
1293
|
+
* Paramètres de recherche (partiels — les valeurs manquantes sont complétées
|
|
1294
|
+
* par le moteur de pagination et le contexte).
|
|
1295
|
+
* @returns
|
|
1296
|
+
* Première page paginée : `results` (T[]), `count.total`, `hasNext`, etc.
|
|
1297
|
+
* @throws {ApiResponseError}
|
|
1298
|
+
* @throws {Error}
|
|
1299
|
+
*/
|
|
1300
|
+
costumEventRequestEvent(data?: Partial<Omit<CostumEventRequestEventData, "pathParams">>): Promise<unknown>;
|
|
1301
|
+
/**
|
|
1302
|
+
* @param data
|
|
1303
|
+
* Paramètres de recherche (partiels — les valeurs manquantes sont complétées
|
|
1304
|
+
* par le moteur de pagination et le contexte).
|
|
1305
|
+
* @returns
|
|
1306
|
+
* Première page paginée : `results` (T[]), `count.total`, `hasNext`, etc.
|
|
1307
|
+
* @throws {ApiResponseError}
|
|
1308
|
+
* @throws {Error}
|
|
1309
|
+
*/
|
|
1310
|
+
costumEventRequestLinkTlToEvent(data: Pick<CostumEventRequestLinkTlToEventData, "tl" | "event"> & Partial<Omit<CostumEventRequestLinkTlToEventData, "tl" | "event" | "pathParams">>): Promise<unknown>;
|
|
1311
|
+
/**
|
|
1312
|
+
* @param data
|
|
1313
|
+
* Paramètres de recherche (partiels — les valeurs manquantes sont complétées
|
|
1314
|
+
* par le moteur de pagination et le contexte).
|
|
1315
|
+
* @returns
|
|
1316
|
+
* Première page paginée : `results` (T[]), `count.total`, `hasNext`, etc.
|
|
1317
|
+
* @throws {ApiResponseError}
|
|
1318
|
+
* @throws {Error}
|
|
1319
|
+
*/
|
|
1320
|
+
costumEventRequestLoadContextTag(data?: Partial<Omit<CostumEventRequestLoadContextTagData, "pathParams">>): Promise<unknown>;
|
|
1321
|
+
}
|
|
1322
|
+
export default BaseEntity;
|