@communecter/cocolight-api-client 1.0.121 → 1.0.123
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/203.cocolight-api-client.cjs +1 -0
- package/dist/278.cocolight-api-client.browser.js +1 -0
- package/dist/278.cocolight-api-client.cjs +1 -0
- package/dist/278.cocolight-api-client.mjs.js +1 -0
- package/dist/401.cocolight-api-client.mjs.js +1 -1
- package/dist/407.cocolight-api-client.browser.js +1 -0
- package/dist/407.cocolight-api-client.mjs.js +1 -0
- package/dist/499.cocolight-api-client.browser.js +1 -0
- package/dist/499.cocolight-api-client.cjs +1 -0
- package/dist/499.cocolight-api-client.mjs.js +1 -0
- package/dist/556.cocolight-api-client.browser.js +1 -0
- package/dist/556.cocolight-api-client.cjs +1 -0
- package/dist/556.cocolight-api-client.mjs.js +1 -0
- package/dist/588.cocolight-api-client.mjs.js +1 -1
- package/dist/593.cocolight-api-client.mjs.js +1 -1
- package/dist/839.cocolight-api-client.mjs.js +1 -1
- package/dist/85.cocolight-api-client.browser.js +1 -0
- package/dist/85.cocolight-api-client.cjs +1 -0
- package/dist/85.cocolight-api-client.mjs.js +1 -0
- package/dist/906.cocolight-api-client.browser.js +1 -0
- package/dist/906.cocolight-api-client.cjs +1 -0
- package/dist/906.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 +1 -1
- package/src/Api.ts +21 -2
- package/src/api/BaseEntity.ts +145 -4
- package/src/api/EndpointApi.ts +125 -1
- package/src/api/EndpointApi.types.ts +210 -1
- package/src/api/EntityRegistry.ts +11 -3
- package/src/api/Form.ts +60 -0
- package/src/api/User.ts +2 -0
- package/src/api/UserApi.ts +3 -2
- package/src/api/serverDataType/Form.ts +56 -0
- package/src/endpoints.module.ts +1 -1
- package/src/index.ts +3 -1
- package/src/types/entities.ts +3 -2
- package/types/Api.d.ts +7 -0
- package/types/api/BaseEntity.d.ts +99 -3
- package/types/api/EndpointApi.d.ts +77 -1
- package/types/api/EndpointApi.types.d.ts +194 -1
- package/types/api/EntityRegistry.d.ts +1 -1
- package/types/api/Form.d.ts +23 -0
- package/types/api/Organization.d.ts +1 -1
- package/types/api/User.d.ts +1 -0
- package/types/api/serverDataType/Form.d.ts +51 -0
- package/types/endpoints.module.d.ts +2994 -168
- package/types/index.d.ts +3 -1
- package/types/types/entities.d.ts +3 -2
package/package.json
CHANGED
package/src/Api.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { Comment } from "./api/Comment.js";
|
|
|
5
5
|
import EndpointApi from "./api/EndpointApi.js";
|
|
6
6
|
import { createFromCollection, registerEntity } from "./api/EntityRegistry.js";
|
|
7
7
|
import { Event } from "./api/Event.js";
|
|
8
|
+
import { Form } from "./api/Form.js";
|
|
8
9
|
import { News } from "./api/News.js";
|
|
9
10
|
import { Organization } from "./api/Organization.js";
|
|
10
11
|
import { Poi } from "./api/Poi.js";
|
|
@@ -29,6 +30,7 @@ registerEntity("EndpointApi", EndpointApi);
|
|
|
29
30
|
registerEntity("News", News);
|
|
30
31
|
registerEntity("Comment", Comment);
|
|
31
32
|
registerEntity("Answer", Answer);
|
|
33
|
+
registerEntity("Form", Form);
|
|
32
34
|
|
|
33
35
|
|
|
34
36
|
|
|
@@ -126,9 +128,9 @@ export default class Api {
|
|
|
126
128
|
async user(userData: EntityData): Promise<User> {
|
|
127
129
|
try {
|
|
128
130
|
if (!userData.id && !userData.slug) {
|
|
129
|
-
return new User(this._client, userData, { EndpointApi, Organization, Project, Event, Poi, Badge, News, Comment });
|
|
131
|
+
return new User(this._client, userData, { EndpointApi, Organization, Project, Event, Poi, Badge, News, Comment, Answer });
|
|
130
132
|
} else {
|
|
131
|
-
const user = new User(this._client, userData, { EndpointApi, Organization, Project, Event, Poi, Badge, News, Comment });
|
|
133
|
+
const user = new User(this._client, userData, { EndpointApi, Organization, Project, Event, Poi, Badge, News, Comment, Answer });
|
|
132
134
|
await user.get();
|
|
133
135
|
return user;
|
|
134
136
|
}
|
|
@@ -224,6 +226,23 @@ export default class Api {
|
|
|
224
226
|
}
|
|
225
227
|
}
|
|
226
228
|
|
|
229
|
+
/**
|
|
230
|
+
* Creates a new Form instance and optionally retrieves form data.
|
|
231
|
+
*/
|
|
232
|
+
async form(formData: { id: string }): Promise<Form> {
|
|
233
|
+
try {
|
|
234
|
+
const form = new Form(this._client, formData, { EndpointApi, User, Organization, Project });
|
|
235
|
+
if (!formData.id) {
|
|
236
|
+
throw new Error("Vous devez fournir un id pour créer une instance Form.");
|
|
237
|
+
}
|
|
238
|
+
await form.get();
|
|
239
|
+
return form;
|
|
240
|
+
} catch (error) {
|
|
241
|
+
console.error("[Api.form] Erreur lors de la création d'un objet Form :", (error as Error).message);
|
|
242
|
+
throw error;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
227
246
|
/**
|
|
228
247
|
* Retourne une entité à partir d'un slug.
|
|
229
248
|
*/
|
package/src/api/BaseEntity.ts
CHANGED
|
@@ -47,7 +47,9 @@ import type {
|
|
|
47
47
|
GetEventsData,
|
|
48
48
|
CostumFilterCoformData,
|
|
49
49
|
GetCountriesData,
|
|
50
|
-
SearchZonesData
|
|
50
|
+
SearchZonesData,
|
|
51
|
+
CoformAnswersByFormsData,
|
|
52
|
+
FundingEnvelopeData
|
|
51
53
|
} from "./EndpointApi.types.js";
|
|
52
54
|
import type { GetElementsKeyResponse } from "../types/api-responses.js";
|
|
53
55
|
import type { TransformsMap } from "../types/entities.js";
|
|
@@ -85,9 +87,10 @@ type News = import("./News.js").News;
|
|
|
85
87
|
type Badge = import("./Badge.js").Badge;
|
|
86
88
|
type Comment = import("./Comment.js").Comment;
|
|
87
89
|
type Answer = import("./Answer.js").Answer;
|
|
90
|
+
type Form = import("./Form.js").Form;
|
|
88
91
|
|
|
89
92
|
// Types d'union
|
|
90
|
-
type AnyEntity = User | Organization | Project | Poi | EventEntity | Badge | News | Comment | Answer;
|
|
93
|
+
type AnyEntity = User | Organization | Project | Poi | EventEntity | Badge | News | Comment | Answer | Form;
|
|
91
94
|
type ParentLike = BaseEntity<any> & { apiClient: ApiClient, userContext?: User | null };
|
|
92
95
|
|
|
93
96
|
// Types pour les dépendances
|
|
@@ -105,6 +108,7 @@ interface Deps {
|
|
|
105
108
|
News?: any;
|
|
106
109
|
Comment?: any;
|
|
107
110
|
Answer?: any;
|
|
111
|
+
Form?: any;
|
|
108
112
|
}
|
|
109
113
|
|
|
110
114
|
interface BaseEntityConfig {
|
|
@@ -122,6 +126,7 @@ interface EntityTypeMap {
|
|
|
122
126
|
badges: Badge;
|
|
123
127
|
comments: Comment;
|
|
124
128
|
answers: Answer;
|
|
129
|
+
forms: Form;
|
|
125
130
|
}
|
|
126
131
|
|
|
127
132
|
// Types pour les streams et uploads
|
|
@@ -129,6 +134,19 @@ type ReadableWithMeta = import("stream").Readable & { path?: string, mimeType?:
|
|
|
129
134
|
type UploadInput = File | Blob | Buffer | import("stream").Readable;
|
|
130
135
|
type ValidatedUpload = File | Buffer | ReadableWithMeta;
|
|
131
136
|
|
|
137
|
+
// Type de retour pour fundingEnvelope
|
|
138
|
+
export type FundingEnvelopeResult = {
|
|
139
|
+
contextData?: AnyEntity | object;
|
|
140
|
+
context?: AnyEntity | object;
|
|
141
|
+
links?: object;
|
|
142
|
+
form?: object;
|
|
143
|
+
paymentMethods?: object;
|
|
144
|
+
nopropProject?: AnyEntity[] | object;
|
|
145
|
+
projects?: AnyEntity[] | any[];
|
|
146
|
+
userOrga?: AnyEntity[] | object;
|
|
147
|
+
[k: string]: unknown;
|
|
148
|
+
};
|
|
149
|
+
|
|
132
150
|
// Type pour le curseur de pagination utilisé dans _createPaginatorEngine
|
|
133
151
|
type PaginationCursor = {
|
|
134
152
|
searchType?: string[];
|
|
@@ -1894,6 +1912,7 @@ export class BaseEntity<TServerData = any> {
|
|
|
1894
1912
|
News: selfTag === "News" ? selfClass : this.deps.News,
|
|
1895
1913
|
Comment: selfTag === "Comment" ? selfClass : this.deps.Comment,
|
|
1896
1914
|
Answer: selfTag === "Answer" ? selfClass : this.deps.Answer,
|
|
1915
|
+
Form: selfTag === "Form" ? selfClass : this.deps.Form,
|
|
1897
1916
|
};
|
|
1898
1917
|
|
|
1899
1918
|
const map = {
|
|
@@ -1911,6 +1930,7 @@ export class BaseEntity<TServerData = any> {
|
|
|
1911
1930
|
} },
|
|
1912
1931
|
comments: { entityClass: commonDeps.Comment, deps: { ...commonDeps } },
|
|
1913
1932
|
answers: { entityClass: commonDeps.Answer, deps: { ...commonDeps } },
|
|
1933
|
+
forms: { entityClass: commonDeps.Form, deps: { ...commonDeps } },
|
|
1914
1934
|
};
|
|
1915
1935
|
|
|
1916
1936
|
return (map as Record<string, EntityMeta | undefined>)[entityType] || null;
|
|
@@ -4629,10 +4649,37 @@ export class BaseEntity<TServerData = any> {
|
|
|
4629
4649
|
}
|
|
4630
4650
|
|
|
4631
4651
|
|
|
4652
|
+
/**
|
|
4653
|
+
* Recherche paginée des réponses CoForm liées à l'entité courante.
|
|
4654
|
+
* Injecte automatiquement le contexte (costumSlug, contextId, contextType) via `_withCostumContext`,
|
|
4655
|
+
* puis pagine via `_createPaginatorEngine`.
|
|
4656
|
+
*
|
|
4657
|
+
* `searchType` est pré-rempli à `["answers"]` si non fourni.
|
|
4658
|
+
* Les autres champs required (`indexStep`, `count`, `initType`, `fediverse`)
|
|
4659
|
+
* sont injectés automatiquement par AJV via les `default` du schema.
|
|
4660
|
+
*
|
|
4661
|
+
* @param data - Paramètres de recherche (partiels). Seuls `filters` et `fields` sont
|
|
4662
|
+
* généralement nécessaires côté appelant.
|
|
4663
|
+
* @param options - Options de pagination
|
|
4664
|
+
* @param options.restoredState - État de pagination à restaurer (pour reprendre une navigation)
|
|
4665
|
+
* @returns Première page paginée avec `results` (Answer[]), `count`, `hasNext`, `hasPrev`, etc.
|
|
4666
|
+
*
|
|
4667
|
+
* @example
|
|
4668
|
+
* const page = await organization.coformAnswersSearch({
|
|
4669
|
+
* filters: { form: "6927e9f0db22da724360303c" },
|
|
4670
|
+
* fields: ["vote", "voteCount", "user"],
|
|
4671
|
+
* sortBy: { created: -1 }
|
|
4672
|
+
* });
|
|
4673
|
+
* page.results; // Answer[]
|
|
4674
|
+
* page.count.total; // nombre total de résultats
|
|
4675
|
+
* page.hasNext; // true si une page suivante existe
|
|
4676
|
+
*/
|
|
4632
4677
|
async coformAnswersSearch(
|
|
4633
4678
|
data: Partial<CoformAnswersSearchData> = {},
|
|
4634
4679
|
options?: { restoredState?: PaginatorState }
|
|
4635
|
-
): Promise<PaginatorPage<
|
|
4680
|
+
): Promise<PaginatorPage<Answer>> {
|
|
4681
|
+
data.searchType = data.searchType ?? ["answers"];
|
|
4682
|
+
|
|
4636
4683
|
const paginator = this._createPaginatorEngine({
|
|
4637
4684
|
initialData: data,
|
|
4638
4685
|
methodName: "coformAnswersSearch",
|
|
@@ -4641,10 +4688,84 @@ export class BaseEntity<TServerData = any> {
|
|
|
4641
4688
|
(finalData: CoformAnswersSearchData) => this.endpointApi.coformAnswersSearch(finalData)
|
|
4642
4689
|
),
|
|
4643
4690
|
});
|
|
4644
|
-
return paginator.next() as Promise<PaginatorPage<
|
|
4691
|
+
return paginator.next() as Promise<PaginatorPage<Answer>>;
|
|
4645
4692
|
}
|
|
4646
4693
|
|
|
4647
4694
|
|
|
4695
|
+
/**
|
|
4696
|
+
* Récupère les réponses pour plusieurs formulaires CoForm.
|
|
4697
|
+
* Chaque entrée du résultat contient les `answers` liées en entités
|
|
4698
|
+
* et les `documents` associés.
|
|
4699
|
+
*
|
|
4700
|
+
* @param data - Paramètres de recherche
|
|
4701
|
+
* @param data.forms - Objet `{ [formId]: pathDeRecherche }` — au moins une entrée requise.
|
|
4702
|
+
* Chaque clé est un ObjectID de formulaire, chaque valeur est un chemin
|
|
4703
|
+
* dot-notation vers le champ answers (ex: `"answers.xxx.finderxxx.orgId"`).
|
|
4704
|
+
* @returns Tableau d'items par formulaire, avec `answers` transformées en entités
|
|
4705
|
+
* @throws {ApiError} Si `forms` est absent, vide, ou n'est pas un objet
|
|
4706
|
+
*
|
|
4707
|
+
* @example
|
|
4708
|
+
* const results = await organization.searchAnswersByForms({
|
|
4709
|
+
* forms: {
|
|
4710
|
+
* "646498a5f2b3d6423d74b7f6": "answers.formName.finderPath.orgId",
|
|
4711
|
+
* "645b300b6d70bb35426fc0e3": "answers.formName.finderPath.orgId"
|
|
4712
|
+
* }
|
|
4713
|
+
* });
|
|
4714
|
+
*/
|
|
4715
|
+
async searchAnswersByForms(
|
|
4716
|
+
data: Partial<CoformAnswersByFormsData> = {},
|
|
4717
|
+
): Promise<{ answers: Answer[]; documents: any[]; [k: string]: unknown }[]> {
|
|
4718
|
+
if(!data.forms || Array.isArray(data.forms) || Object.keys(data.forms).length === 0){
|
|
4719
|
+
throw new ApiError("Le paramètre 'forms' est requis et doit être un objet non vide.", 400);
|
|
4720
|
+
}
|
|
4721
|
+
const result = await this.endpointApi.coformAnswersByForms(data);
|
|
4722
|
+
|
|
4723
|
+
return result.map((item: any) => ({
|
|
4724
|
+
...item,
|
|
4725
|
+
answers: this._linkEntities(Object.values(item.answers || {}))
|
|
4726
|
+
}));
|
|
4727
|
+
}
|
|
4728
|
+
|
|
4729
|
+
/**
|
|
4730
|
+
* Récupère les informations d'enveloppes de financement pour l'entité courante.
|
|
4731
|
+
* Injecte automatiquement le contexte (costumSlug, contextId, contextType) via `_withCostumContext`.
|
|
4732
|
+
*
|
|
4733
|
+
* Les champs `contextData`, `context`, `nopropProject`, `projects` et `userOrga`
|
|
4734
|
+
* de la réponse sont automatiquement liés en entités quand possible.
|
|
4735
|
+
*
|
|
4736
|
+
* @param data - Paramètres optionnels de recherche
|
|
4737
|
+
* @param data.action - Action à effectuer (`"getEnvelopeData"`, `"getFormData"`, etc.)
|
|
4738
|
+
* @param data.formId - ID du formulaire cible (pour `action: "getFormData"`)
|
|
4739
|
+
* @param data.financerId - ID du financeur pour filtrer
|
|
4740
|
+
* @param data.financerType - Type du financeur (ex: `"citoyens"`)
|
|
4741
|
+
* @param data.params - Paramètres supplémentaires (ex: `{ project: "all" }`)
|
|
4742
|
+
* @returns Données d'enveloppe avec entités liées
|
|
4743
|
+
*
|
|
4744
|
+
* @example
|
|
4745
|
+
* const envelope = await organization.fundingEnvelope({
|
|
4746
|
+
* action: "getEnvelopeData"
|
|
4747
|
+
* });
|
|
4748
|
+
* envelope.form; // données du formulaire
|
|
4749
|
+
* envelope.projects; // Project[] liés
|
|
4750
|
+
*/
|
|
4751
|
+
async fundingEnvelope(
|
|
4752
|
+
data: Partial<Omit<FundingEnvelopeData, "contextId" | "contextType">> = {},
|
|
4753
|
+
): Promise<FundingEnvelopeResult> {
|
|
4754
|
+
const wrappedFinalizer = this._withCostumContext(
|
|
4755
|
+
(finalData: FundingEnvelopeData) => this.endpointApi.fundingEnvelope(finalData)
|
|
4756
|
+
);
|
|
4757
|
+
|
|
4758
|
+
const result = await wrappedFinalizer(data as FundingEnvelopeData);
|
|
4759
|
+
return {
|
|
4760
|
+
...result,
|
|
4761
|
+
...(result.contextData && { contextData: this._linkEntity(result.contextData.collection, result.contextData) ?? result.contextData }),
|
|
4762
|
+
...(result.context && { context: this._linkEntity(result.context.collection, result.context) ?? result.context }),
|
|
4763
|
+
...(result.nopropProject && { nopropProject: this._linkEntities(Object.values(result.nopropProject)) ?? result.nopropProject }),
|
|
4764
|
+
...(result.projects && { projects: this._linkEntities(result.projects) ?? result.projects }),
|
|
4765
|
+
...(result.userOrga && { userOrga: this._linkEntities(Object.values(result.userOrga)) ?? result.userOrga })
|
|
4766
|
+
};
|
|
4767
|
+
}
|
|
4768
|
+
|
|
4648
4769
|
/**
|
|
4649
4770
|
* Récupère les filtres disponibles basés sur les réponses CoForm de l'entité courante.
|
|
4650
4771
|
* Utilise le contexte Communecter (costumSlug, contextId, contextType) de l'entité.
|
|
@@ -4719,6 +4840,24 @@ export class BaseEntity<TServerData = any> {
|
|
|
4719
4840
|
return this.endpointApi.getCountries(data as GetCountriesData) as Promise<CountryItem[]>;
|
|
4720
4841
|
}
|
|
4721
4842
|
|
|
4843
|
+
/**
|
|
4844
|
+
* Generer un nouveau identifiant unique pour un answers basé sur un formulaire donnée
|
|
4845
|
+
*
|
|
4846
|
+
* @param formId - Identifiant du formulaire pour lequel générer un nouvel ID d'answers
|
|
4847
|
+
* @returns Un nouvel answers avec le nouveau ID généré
|
|
4848
|
+
* @throws {ApiError} Si formId est absent ou invalide
|
|
4849
|
+
*
|
|
4850
|
+
*/
|
|
4851
|
+
async generateNewAnswerId(
|
|
4852
|
+
formId: string
|
|
4853
|
+
): Promise<any> {
|
|
4854
|
+
if (!formId || typeof formId !== "string") {
|
|
4855
|
+
throw new ApiError("formId est requis et doit être une chaîne de caractères.", 400);
|
|
4856
|
+
}
|
|
4857
|
+
const result = await this.endpointApi.generateAnswerFromForm({pathParams: { formId }, action: "new" });
|
|
4858
|
+
return this._linkEntity?.(result.collection, result) ?? result;
|
|
4859
|
+
}
|
|
4860
|
+
|
|
4722
4861
|
/**
|
|
4723
4862
|
* ───────────────────────────────
|
|
4724
4863
|
* Pagination restoration methods
|
|
@@ -4809,6 +4948,8 @@ export class BaseEntity<TServerData = any> {
|
|
|
4809
4948
|
};
|
|
4810
4949
|
}
|
|
4811
4950
|
|
|
4951
|
+
|
|
4952
|
+
|
|
4812
4953
|
}
|
|
4813
4954
|
|
|
4814
4955
|
export default BaseEntity;
|
package/src/api/EndpointApi.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { ApiAuthenticationError } from "../error.js";
|
|
3
3
|
|
|
4
4
|
import type ApiClient from "../ApiClient.js";
|
|
5
|
-
import type { PersonRegisterData, AuthenticateUrlData, RefreshTokenUrlData, PasswordRecoveryData, ServerExchangeTokenData, ChangePasswordData, DeleteAccountData, UpdateSettingsData, UpdateBlockDescriptionData, UpdateBlockInfoData, UpdateBlockSocialData, UpdateBlockLocalityData, UpdateBlockSlugData, CheckData, ProfilImageData, ProfilBannerData, GetElementsAboutData, MulticonnectData, GetNewsData, GetNewsByIdData, AddNewsData, AddImageNewsData, AddFileNewsData, DeleteNewsData, UpdateNewsData, ShareNewsData, GetCommentsData, AddCommentsData, DeleteCommentsData, UpdateCommentsData, SearchTagsData, ShowVoteData, GlobalAutocompleteData, CityAutocompleteData, CityAutocompleteByCountryData, SuggestionInputData, GetProjectsNoAdminData, GetProjectsAdminData, GetPoisNoAdminData, GetPoisAdminData, GetOrganizationsNoAdminData, GetOrganizationsAdminData, GetMembersNoAdminData, GetMembersAdminData, GetFriendsAdminData, GetSubscriptionsData, GetSubscriptionsAdminData, GetSubscribersData, GetSubscribersAdminData, GetContributorsNoAdminData, GetContributorsAdminData, GetBadgesData, GetBadgesFiltersData, ConnectData, DisconnectData, GetElementsKeyData, GetFavorisData, DeleteFavorisData, AddFavorisData, AddOrganizationData, AddProjectData, AddPoiData, AddEventData, DeletePoiData, DeleteEventData, DeleteElementData, AddImageElementData, LinkValidateData, SearchMemberAutocompleteData, GetNotificationsData, GetNotificationsCountData, NotificationUpdateData, MarkNotificationAsReadData, ActivitypubSearchData, ActivitypubLinkData, ActivitypubGetCommunityData, GetBadgeData, AddBadgesData, AssignBadgesData, GetEventsData, ShareEventsData, InviteEventData, FollowData, GetCostumJsonData, GlobalAutocompleteCostumData, CostumEventRequestActorsData, CostumEventRequestSubeventsData, CostumEventRequestElementEventData, CostumEventRequestCategoriesData, CostumEventRequestDatesData, CostumEventRequestEventData, CostumEventRequestLinkTlToEventData, CostumEventRequestLoadContextTagData, GetGalleryData, GetAttendeesNoAdminData, GetAttendeesAdminData, CoformAnswersSearchData, CoformAnswersByIdData, AddVoteData, AddReportAbuseData, UpdatePathValueData, DeleteDocumentByContextData, DemoteAdminData, CostumFilterCoformData, GetCountriesData, SearchZonesData } from "./EndpointApi.types.js";
|
|
5
|
+
import type { PersonRegisterData, AuthenticateUrlData, RefreshTokenUrlData, PasswordRecoveryData, ServerExchangeTokenData, ChangePasswordData, DeleteAccountData, UpdateSettingsData, UpdateBlockDescriptionData, UpdateBlockInfoData, UpdateBlockSocialData, UpdateBlockLocalityData, UpdateBlockSlugData, CheckData, ProfilImageData, ProfilBannerData, GetElementsAboutData, MulticonnectData, GetNewsData, GetNewsByIdData, AddNewsData, AddImageNewsData, AddFileNewsData, DeleteNewsData, UpdateNewsData, ShareNewsData, GetCommentsData, AddCommentsData, DeleteCommentsData, UpdateCommentsData, SearchTagsData, ShowVoteData, GlobalAutocompleteData, CityAutocompleteData, CityAutocompleteByCountryData, SuggestionInputData, GetProjectsNoAdminData, GetProjectsAdminData, GetPoisNoAdminData, GetPoisAdminData, GetOrganizationsNoAdminData, GetOrganizationsAdminData, GetMembersNoAdminData, GetMembersAdminData, GetFriendsAdminData, GetSubscriptionsData, GetSubscriptionsAdminData, GetSubscribersData, GetSubscribersAdminData, GetContributorsNoAdminData, GetContributorsAdminData, GetBadgesData, GetBadgesFiltersData, ConnectData, DisconnectData, GetElementsKeyData, GetFavorisData, DeleteFavorisData, AddFavorisData, AddOrganizationData, AddProjectData, AddPoiData, AddEventData, DeletePoiData, DeleteEventData, DeleteElementData, AddImageElementData, LinkValidateData, SearchMemberAutocompleteData, GetNotificationsData, GetNotificationsCountData, NotificationUpdateData, MarkNotificationAsReadData, ActivitypubSearchData, ActivitypubLinkData, ActivitypubGetCommunityData, GetBadgeData, AddBadgesData, AssignBadgesData, GetEventsData, ShareEventsData, InviteEventData, FollowData, GetCostumJsonData, GlobalAutocompleteCostumData, CostumEventRequestActorsData, CostumEventRequestSubeventsData, CostumEventRequestElementEventData, CostumEventRequestCategoriesData, CostumEventRequestDatesData, CostumEventRequestEventData, CostumEventRequestLinkTlToEventData, CostumEventRequestLoadContextTagData, GetGalleryData, GetAttendeesNoAdminData, GetAttendeesAdminData, CoformAnswersSearchData, CoformAnswersByIdData, GetCoformByIdData, CoformUploadAnswerFileData, CoformGetAnswerFilesData, SaveCoformAnswerData, AddVoteData, AddReportAbuseData, UpdatePathValueData, DeleteDocumentByContextData, DeleteDocumentByIdData, DemoteAdminData, CostumFilterCoformData, GetCountriesData, SearchZonesData, CoformAnswersByFormsData, GenerateAnswerFromFormData, FundingEnvelopeData } from "./EndpointApi.types.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Classe EndpointApi générée automatiquement depuis endpoints-copie.json
|
|
@@ -1640,6 +1640,69 @@ export class EndpointApi {
|
|
|
1640
1640
|
return this.call("COFORM_ANSWERS_BY_ID", data);
|
|
1641
1641
|
}
|
|
1642
1642
|
|
|
1643
|
+
/**
|
|
1644
|
+
* Récupérer un formulaire par son ID : Récupère les informations complètes d'un formulaire CoForm par son ID parent
|
|
1645
|
+
* Constant : GET_COFORM_BY_ID
|
|
1646
|
+
* @param data - Données envoyées à l'API
|
|
1647
|
+
* @returns Les données de réponse.
|
|
1648
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1649
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1650
|
+
*/
|
|
1651
|
+
async getCoformById(data: GetCoformByIdData): Promise<any> {
|
|
1652
|
+
if (!data || typeof data !== "object") {
|
|
1653
|
+
throw new TypeError("Le paramètre data doit être un objet.");
|
|
1654
|
+
}
|
|
1655
|
+
return this.call("GET_COFORM_BY_ID", data);
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
/**
|
|
1659
|
+
* Uploader un fichier de réponse CoForm : Endpoint de pré-upload CoForm (image/document). Si answerId est absent, l'endpoint crée un MongoId de réponse, réutilise la logique d'upload document existante et retourne answerId + docPath.
|
|
1660
|
+
* Constant : COFORM_UPLOAD_ANSWER_FILE
|
|
1661
|
+
* @param data - Données envoyées à l'API
|
|
1662
|
+
* @returns Les données de réponse.
|
|
1663
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1664
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
1665
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1666
|
+
*/
|
|
1667
|
+
async coformUploadAnswerFile(data: CoformUploadAnswerFileData): Promise<any> {
|
|
1668
|
+
if (!data || typeof data !== "object") {
|
|
1669
|
+
throw new TypeError("Le paramètre data doit être un objet.");
|
|
1670
|
+
}
|
|
1671
|
+
return this.callIsConnected("COFORM_UPLOAD_ANSWER_FILE", data);
|
|
1672
|
+
}
|
|
1673
|
+
|
|
1674
|
+
/**
|
|
1675
|
+
* Récupérer les fichiers d'une réponse CoForm : Récupère la liste des fichiers uploadés pour un input spécifique dans une réponse CoForm. Utilisé pour récupérer les fichiers de l'ancien système qui n'ont que 'updateDate' sans la clé 'files'.
|
|
1676
|
+
* Constant : COFORM_GET_ANSWER_FILES
|
|
1677
|
+
* @param data - Données envoyées à l'API
|
|
1678
|
+
* @returns Les données de réponse.
|
|
1679
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1680
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
1681
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1682
|
+
*/
|
|
1683
|
+
async coformGetAnswerFiles(data: CoformGetAnswerFilesData): Promise<any> {
|
|
1684
|
+
if (!data || typeof data !== "object") {
|
|
1685
|
+
throw new TypeError("Le paramètre data doit être un objet.");
|
|
1686
|
+
}
|
|
1687
|
+
return this.callIsConnected("COFORM_GET_ANSWER_FILES", data);
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1690
|
+
/**
|
|
1691
|
+
* Sauvegarder une réponse de formulaire CoForm : Enregistre ou met à jour les réponses d'un utilisateur pour un formulaire CoForm
|
|
1692
|
+
* Constant : SAVE_COFORM_ANSWER
|
|
1693
|
+
* @param data - Données envoyées à l'API
|
|
1694
|
+
* @returns Les données de réponse.
|
|
1695
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1696
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
1697
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1698
|
+
*/
|
|
1699
|
+
async saveCoformAnswer(data: SaveCoformAnswerData): Promise<any> {
|
|
1700
|
+
if (!data || typeof data !== "object") {
|
|
1701
|
+
throw new TypeError("Le paramètre data doit être un objet.");
|
|
1702
|
+
}
|
|
1703
|
+
return this.callIsConnected("SAVE_COFORM_ANSWER", data);
|
|
1704
|
+
}
|
|
1705
|
+
|
|
1643
1706
|
/**
|
|
1644
1707
|
* Voter sur un élément (commentaire ou news) : Permet de voter sur un commentaire ou une news en spécifiant un statut de vote
|
|
1645
1708
|
* Constant : ADD_VOTE
|
|
@@ -1704,6 +1767,22 @@ export class EndpointApi {
|
|
|
1704
1767
|
return this.callIsConnected("DELETE_DOCUMENT_BY_CONTEXT", data);
|
|
1705
1768
|
}
|
|
1706
1769
|
|
|
1770
|
+
/**
|
|
1771
|
+
* Supprimer un document par son ID : Supprime un document (fichier ou image) par son identifiant MongoDB
|
|
1772
|
+
* Constant : DELETE_DOCUMENT_BY_ID
|
|
1773
|
+
* @param data - Données envoyées à l'API
|
|
1774
|
+
* @returns Les données de réponse.
|
|
1775
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1776
|
+
* @throws {ApiAuthenticationError} - En cas d'erreur d'authentification.
|
|
1777
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1778
|
+
*/
|
|
1779
|
+
async deleteDocumentById(data: DeleteDocumentByIdData): Promise<any> {
|
|
1780
|
+
if (!data || typeof data !== "object") {
|
|
1781
|
+
throw new TypeError("Le paramètre data doit être un objet.");
|
|
1782
|
+
}
|
|
1783
|
+
return this.callIsConnected("DELETE_DOCUMENT_BY_ID", data);
|
|
1784
|
+
}
|
|
1785
|
+
|
|
1707
1786
|
/**
|
|
1708
1787
|
* Rétirer les droits d’administrateur d’un membre : Rétirer les droits d’administrateur d’un membre d’une organisation ou d’un projet
|
|
1709
1788
|
* Constant : DEMOTE_ADMIN
|
|
@@ -1765,6 +1844,51 @@ export class EndpointApi {
|
|
|
1765
1844
|
return this.call("SEARCH_ZONES", data);
|
|
1766
1845
|
}
|
|
1767
1846
|
|
|
1847
|
+
/**
|
|
1848
|
+
* Recuperer la liste des reponses pour plusieurs formulaires : Recuperer la liste des reponses pour plusieurs formulaires
|
|
1849
|
+
* Constant : COFORM_ANSWERS_BY_FORMS
|
|
1850
|
+
* @param data - Données envoyées à l'API
|
|
1851
|
+
* @returns Les données de réponse.
|
|
1852
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1853
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1854
|
+
*/
|
|
1855
|
+
async coformAnswersByForms(data: CoformAnswersByFormsData): Promise<any> {
|
|
1856
|
+
if (!data || typeof data !== "object") {
|
|
1857
|
+
throw new TypeError("Le paramètre data doit être un objet.");
|
|
1858
|
+
}
|
|
1859
|
+
return this.call("COFORM_ANSWERS_BY_FORMS", data);
|
|
1860
|
+
}
|
|
1861
|
+
|
|
1862
|
+
/**
|
|
1863
|
+
* Generer une nouvelle reponse à partir d'un formulaire : Generer une nouvelle reponse à partir d'un formulaire
|
|
1864
|
+
* Constant : GENERATE_ANSWER_FROM_FORM
|
|
1865
|
+
* @param data - Données envoyées à l'API
|
|
1866
|
+
* @returns Les données de réponse.
|
|
1867
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1868
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1869
|
+
*/
|
|
1870
|
+
async generateAnswerFromForm(data: GenerateAnswerFromFormData): Promise<any> {
|
|
1871
|
+
if (!data || typeof data !== "object") {
|
|
1872
|
+
throw new TypeError("Le paramètre data doit être un objet.");
|
|
1873
|
+
}
|
|
1874
|
+
return this.call("GENERATE_ANSWER_FROM_FORM", data);
|
|
1875
|
+
}
|
|
1876
|
+
|
|
1877
|
+
/**
|
|
1878
|
+
* Trouver les informations sur les enveloppes d’un formulaire : Trouver les informations sur les enveloppes d’un formulaire
|
|
1879
|
+
* Constant : FUNDING_ENVELOPE
|
|
1880
|
+
* @param data - Données envoyées à l'API
|
|
1881
|
+
* @returns Les données de réponse.
|
|
1882
|
+
* @throws {ApiResponseError} - En cas d'erreur détectée dans la réponse.
|
|
1883
|
+
* @throws {Error} - En cas d'erreur inattendue.
|
|
1884
|
+
*/
|
|
1885
|
+
async fundingEnvelope(data: FundingEnvelopeData): Promise<any> {
|
|
1886
|
+
if (!data || typeof data !== "object") {
|
|
1887
|
+
throw new TypeError("Le paramètre data doit être un objet.");
|
|
1888
|
+
}
|
|
1889
|
+
return this.call("FUNDING_ENVELOPE", data);
|
|
1890
|
+
}
|
|
1891
|
+
|
|
1768
1892
|
}
|
|
1769
1893
|
|
|
1770
1894
|
export default EndpointApi;
|
|
@@ -2719,6 +2719,36 @@ export interface AddOrganizationData {
|
|
|
2719
2719
|
float: true;
|
|
2720
2720
|
[k: string]: unknown;
|
|
2721
2721
|
};
|
|
2722
|
+
costum?: {
|
|
2723
|
+
bannerImageUrl?: string;
|
|
2724
|
+
bannerLogoUrl?: string;
|
|
2725
|
+
bannerText?: string;
|
|
2726
|
+
/**
|
|
2727
|
+
* Pour bien indiquer que l'orga est un commune transparente
|
|
2728
|
+
*/
|
|
2729
|
+
transparentCommune?: boolean;
|
|
2730
|
+
/**
|
|
2731
|
+
* Pour bien indiquer que l'orga est un centre ville
|
|
2732
|
+
*/
|
|
2733
|
+
cocity?: boolean;
|
|
2734
|
+
slug?: string;
|
|
2735
|
+
typeCocity?: string;
|
|
2736
|
+
[k: string]: unknown;
|
|
2737
|
+
};
|
|
2738
|
+
/**
|
|
2739
|
+
* Thématiques de l’organisation
|
|
2740
|
+
*/
|
|
2741
|
+
thematic?: string[];
|
|
2742
|
+
/**
|
|
2743
|
+
* Dictionnaire de filières par thématique
|
|
2744
|
+
*/
|
|
2745
|
+
filiere?: {
|
|
2746
|
+
[k: string]: {
|
|
2747
|
+
name: string;
|
|
2748
|
+
icon: string;
|
|
2749
|
+
tags: string[];
|
|
2750
|
+
};
|
|
2751
|
+
};
|
|
2722
2752
|
address?: {
|
|
2723
2753
|
"@type": "PostalAddress";
|
|
2724
2754
|
addressCountry: string;
|
|
@@ -4829,6 +4859,108 @@ export interface CoformAnswersByIdData {
|
|
|
4829
4859
|
* Liste des champs à retourner
|
|
4830
4860
|
*/
|
|
4831
4861
|
fields?: string[];
|
|
4862
|
+
/**
|
|
4863
|
+
* ID du formulaire parent (utilisé pour calculer les droits d'édition côté serveur)
|
|
4864
|
+
*/
|
|
4865
|
+
formId?: string;
|
|
4866
|
+
[k: string]: unknown;
|
|
4867
|
+
}
|
|
4868
|
+
|
|
4869
|
+
|
|
4870
|
+
export interface GetCoformByIdData {
|
|
4871
|
+
/**
|
|
4872
|
+
* ID du formulaire parent à récupérer
|
|
4873
|
+
*/
|
|
4874
|
+
parentFormId: string;
|
|
4875
|
+
[k: string]: unknown;
|
|
4876
|
+
}
|
|
4877
|
+
|
|
4878
|
+
|
|
4879
|
+
export interface CoformUploadAnswerFileData {
|
|
4880
|
+
/**
|
|
4881
|
+
* ID du formulaire parent (pour contrôles d'accès).
|
|
4882
|
+
*/
|
|
4883
|
+
formId: string;
|
|
4884
|
+
/**
|
|
4885
|
+
* ID de réponse existant. Si absent, un MongoId est généré côté serveur.
|
|
4886
|
+
*/
|
|
4887
|
+
answerId?: string;
|
|
4888
|
+
/**
|
|
4889
|
+
* Type de document à uploader.
|
|
4890
|
+
*/
|
|
4891
|
+
docType?: "image" | "file";
|
|
4892
|
+
/**
|
|
4893
|
+
* Clé de contenu (ex: slider pour images).
|
|
4894
|
+
*/
|
|
4895
|
+
contentKey?: string;
|
|
4896
|
+
/**
|
|
4897
|
+
* Sous-clé optionnelle pour rattachement du document.
|
|
4898
|
+
*/
|
|
4899
|
+
subKey?: string;
|
|
4900
|
+
/**
|
|
4901
|
+
* UUID client du fichier (compat fine-uploader).
|
|
4902
|
+
*/
|
|
4903
|
+
qquuid: string;
|
|
4904
|
+
/**
|
|
4905
|
+
* Nom original du fichier.
|
|
4906
|
+
*/
|
|
4907
|
+
qqfilename: string;
|
|
4908
|
+
/**
|
|
4909
|
+
* Taille du fichier en octets.
|
|
4910
|
+
*/
|
|
4911
|
+
qqtotalfilesize: number;
|
|
4912
|
+
/**
|
|
4913
|
+
* Fichier binaire multipart.
|
|
4914
|
+
*/
|
|
4915
|
+
qqfile: {
|
|
4916
|
+
[k: string]: unknown;
|
|
4917
|
+
};
|
|
4918
|
+
[k: string]: unknown;
|
|
4919
|
+
}
|
|
4920
|
+
|
|
4921
|
+
|
|
4922
|
+
export interface CoformGetAnswerFilesData {
|
|
4923
|
+
/**
|
|
4924
|
+
* ID de la réponse CoForm
|
|
4925
|
+
*/
|
|
4926
|
+
answerId: string;
|
|
4927
|
+
/**
|
|
4928
|
+
* Clé d'identification de l'input (ex: formId.inputId)
|
|
4929
|
+
*/
|
|
4930
|
+
subKey: string;
|
|
4931
|
+
/**
|
|
4932
|
+
* Clé de contenu utilisée lors de l'upload
|
|
4933
|
+
*/
|
|
4934
|
+
contentKey?: string;
|
|
4935
|
+
/**
|
|
4936
|
+
* Type de document à récupérer
|
|
4937
|
+
*/
|
|
4938
|
+
docType?: "image" | "file";
|
|
4939
|
+
[k: string]: unknown;
|
|
4940
|
+
}
|
|
4941
|
+
|
|
4942
|
+
|
|
4943
|
+
export interface SaveCoformAnswerData {
|
|
4944
|
+
/**
|
|
4945
|
+
* ID du formulaire parent
|
|
4946
|
+
*/
|
|
4947
|
+
formId: string;
|
|
4948
|
+
/**
|
|
4949
|
+
* Réponses du formulaire sérialisées en JSON, organisées par subFormId > inputId > valeur
|
|
4950
|
+
*/
|
|
4951
|
+
answers: string;
|
|
4952
|
+
/**
|
|
4953
|
+
* ID d'une réponse existante (pour mise à jour)
|
|
4954
|
+
*/
|
|
4955
|
+
answerId?: string;
|
|
4956
|
+
/**
|
|
4957
|
+
* Options ajoutées dynamiquement sérialisées en JSON (pour multiCheckboxPlus avec addValue)
|
|
4958
|
+
*/
|
|
4959
|
+
addedOptions?: string;
|
|
4960
|
+
/**
|
|
4961
|
+
* Links des champs Finder sérialisés en JSON (pour answer.links). Format: { "organizations": { "mongoId": { "name": "...", "type": "organizations" } } }
|
|
4962
|
+
*/
|
|
4963
|
+
links?: string;
|
|
4832
4964
|
[k: string]: unknown;
|
|
4833
4965
|
}
|
|
4834
4966
|
|
|
@@ -4891,7 +5023,7 @@ export interface UpdatePathValueData {
|
|
|
4891
5023
|
/**
|
|
4892
5024
|
* Collection de l’entité
|
|
4893
5025
|
*/
|
|
4894
|
-
collection: "citoyens" | "organizations" | "projects" | "events" | "poi";
|
|
5026
|
+
collection: "citoyens" | "organizations" | "projects" | "events" | "poi" | "answers" | "forms";
|
|
4895
5027
|
/**
|
|
4896
5028
|
* Chemin de la valeur à mettre à jour
|
|
4897
5029
|
*/
|
|
@@ -4936,6 +5068,18 @@ export interface DeleteDocumentByContextData {
|
|
|
4936
5068
|
}
|
|
4937
5069
|
|
|
4938
5070
|
|
|
5071
|
+
export interface DeleteDocumentByIdData {
|
|
5072
|
+
pathParams?: {
|
|
5073
|
+
/**
|
|
5074
|
+
* ID MongoDB du document à supprimer
|
|
5075
|
+
*/
|
|
5076
|
+
id: string;
|
|
5077
|
+
[k: string]: unknown;
|
|
5078
|
+
};
|
|
5079
|
+
[k: string]: unknown;
|
|
5080
|
+
}
|
|
5081
|
+
|
|
5082
|
+
|
|
4939
5083
|
export interface DemoteAdminData {
|
|
4940
5084
|
parentId: string;
|
|
4941
5085
|
/**
|
|
@@ -5025,3 +5169,68 @@ export interface SearchZonesData {
|
|
|
5025
5169
|
costumType?: string;
|
|
5026
5170
|
[k: string]: unknown;
|
|
5027
5171
|
}
|
|
5172
|
+
|
|
5173
|
+
|
|
5174
|
+
export interface CoformAnswersByFormsData {
|
|
5175
|
+
/**
|
|
5176
|
+
* Liste des IDs de formulaires pour lesquels récupérer les réponses et le champ de recherche
|
|
5177
|
+
*/
|
|
5178
|
+
forms?: {
|
|
5179
|
+
/**
|
|
5180
|
+
* This interface was referenced by `undefined`'s JSON-Schema definition
|
|
5181
|
+
* via the `patternProperty` "^[a-fA-F0-9]{24}$".
|
|
5182
|
+
*/
|
|
5183
|
+
[k: string]: string;
|
|
5184
|
+
};
|
|
5185
|
+
[k: string]: unknown;
|
|
5186
|
+
}
|
|
5187
|
+
|
|
5188
|
+
|
|
5189
|
+
export interface GenerateAnswerFromFormData {
|
|
5190
|
+
action?: string;
|
|
5191
|
+
pathParams?: {
|
|
5192
|
+
/**
|
|
5193
|
+
* ID du formulaire pour lequel générer une nouvelle réponse
|
|
5194
|
+
*/
|
|
5195
|
+
formId: string;
|
|
5196
|
+
[k: string]: unknown;
|
|
5197
|
+
};
|
|
5198
|
+
[k: string]: unknown;
|
|
5199
|
+
}
|
|
5200
|
+
|
|
5201
|
+
|
|
5202
|
+
export interface FundingEnvelopeData {
|
|
5203
|
+
/**
|
|
5204
|
+
* ID du contexte de l’entité
|
|
5205
|
+
*/
|
|
5206
|
+
contextId: string;
|
|
5207
|
+
/**
|
|
5208
|
+
* Type de contexte de l’entité
|
|
5209
|
+
*/
|
|
5210
|
+
contextType: string;
|
|
5211
|
+
/**
|
|
5212
|
+
* ID du formulaire pour lequel générer une nouvelle réponse
|
|
5213
|
+
*/
|
|
5214
|
+
formId?: string;
|
|
5215
|
+
action?: string;
|
|
5216
|
+
/**
|
|
5217
|
+
* ID du projet
|
|
5218
|
+
*/
|
|
5219
|
+
project?: string;
|
|
5220
|
+
/**
|
|
5221
|
+
* ID de la réponse
|
|
5222
|
+
*/
|
|
5223
|
+
answer?: string;
|
|
5224
|
+
/**
|
|
5225
|
+
* ID du financeur
|
|
5226
|
+
*/
|
|
5227
|
+
financerId?: string;
|
|
5228
|
+
financerType?: string;
|
|
5229
|
+
/**
|
|
5230
|
+
* Paramètres supplémentaires pour la recherche d’enveloppes
|
|
5231
|
+
*/
|
|
5232
|
+
params?: {
|
|
5233
|
+
[k: string]: unknown;
|
|
5234
|
+
};
|
|
5235
|
+
[k: string]: unknown;
|
|
5236
|
+
}
|