export interface ErrorResult { errorCode: string; errorMessage: string; hasManyErrors?: boolean; multipleErrors?: { errorCode: string; errorMessage: string; }[]; } export interface TotalumApiResponse { data: T; errors?: ErrorResult | null; metadata?: any; } export interface StructureLevels { id: string; typeId: string; propertyId?: string; children: Array; } export interface FilterSearchQueryI { filter?: FiltersArrayI; sort?: ISearchQuerySort; pagination?: { limit?: number; page?: number; skip?: number; }; returnCount?: boolean; } export interface NestedQueryFilterI { [tableName: string]: NestedQueryFilterItem; } interface NestedQueryFilterItem { tableFilter?: FiltersArrayI; propertyName?: string; [tableName: string]: NestedQueryFilterItem | FiltersArrayI | string | undefined; } export type FilterLookupSearchQueryI = { pagination: { limit?: number; page?: number; skip?: number; }; filters: FilterStructureLevelsI; }; export interface filterNestedOptionsI { pagination: { limit?: number; page?: number; skip?: number; }; } export interface FilterStructureLevelsI extends StructureLevels { filters?: FiltersArrayI; children: FilterStructureLevelsI[]; } export type FiltersArrayI = Array; export interface ISearchQueryFilterOr { or: ISearchQueryFilterOptions[]; } export interface ISearchQuerySort { [key: string]: 1 | -1; } export interface ISearchQueryFilterOptions { [key: string]: number | Date | boolean | string | PropertyQueryOptionsI; } export interface PropertyQueryOptionsI { regex?: number | string; options?: 'i' | 'm' | 'x' | 's'; gte?: number | Date; lte?: number | Date; gt?: number | Date; lt?: number | Date; ne?: number | Date | boolean | string; } export type fieldValuesEnabled = string | number | boolean | Date | fieldFileI | fieldFileI[]; export type FileTypesI = 'image' | 'video' | 'audio' | 'word' | 'pdf' | 'excel' | 'other'; export type fieldFileI = { name: string; url: string; type?: FileTypesI; order?: number; }; export type fieldTypesEnabled = 'string' | 'number' | 'boolean' | 'date' | 'options' | 'file' | 'long-string' | /*'array' |*/ 'objectReference'; export interface DataValues { _id?: string; createdAt?: Date; updatedAt?: Date; [key: string]: fieldValuesEnabled | any; } export interface DataProperties { [key: string]: fieldValuesEnabled | any; } export interface NestedQuery { [tableName: string]: any; } /** * Query options for sdk.crud.query(tableName, queryOptions). * System keys use _ prefix. All other keys are property names (child expansions). * * Example: * ``` * sdk.crud.query('company', { * _filter: { country: "Spain" }, * _sort: { name: "asc" }, * _limit: 10, * employee: { * _has: true, * _filter: { status: "active" }, * _count: true, * task: true * } * }) * ``` */ export interface QueryOptions { _filter?: QueryFilter; _sort?: { [key: string]: 'asc' | 'desc' | 1 | -1; }; _limit?: number; _offset?: number; _has?: boolean | 'some' | 'none' | 'every'; _include?: boolean; _count?: boolean; _aggregate?: QueryAggregateOptions; _groupBy?: string | string[]; _select?: { [fieldName: string]: true; }; _omit?: { [fieldName: string]: true; }; [propertyName: string]: QueryOptions | boolean | string | string[] | QueryFilter | QueryAggregateOptions | { [key: string]: any; } | number | undefined; } /** * Object-based filter for query endpoint. * Keys are field names, values are exact matches or operator objects. * Use _or for OR conditions. * * Example: * ``` * { name: "Acme", status: { in: ["active", "pending"] }, _or: [{ role: "admin" }, { role: "mod" }] } * ``` */ export interface QueryFilter { _or?: QueryFilter[]; [fieldName: string]: any; } /** * Aggregation options (Prisma-style). * Used with _aggregate in query(). * * Example: * ``` * { _sum: { amount: true }, _avg: { amount: true }, _count: true } * ``` */ export interface QueryAggregateOptions { _sum?: { [fieldName: string]: true; }; _avg?: { [fieldName: string]: true; }; _min?: { [fieldName: string]: true; }; _max?: { [fieldName: string]: true; }; _count?: true; } export interface AuthOptions { token?: { accessToken: string; }; apiKey?: { 'api-key': string; }; baseUrl?: string; } export interface TotalumHeaders { authorization?: string; 'api-key'?: string; fromEvent?: string; [key: string]: string | undefined; } export interface NotificationI { name: string; title: string; description: string; visibility: { sendTo: 'all' | 'admins' | 'specificUsers'; specificUsersEmails?: string[]; }; action: { actionType: 'link' | 'none'; actionName?: string; link?: string; }; email: { sendEmail: boolean; totalumSupportBtn?: boolean; }; createdAt?: Date; visibleUntil?: Date; seen?: boolean; } export interface StatisticOptionsI { statisticType: 'quantity' | 'add'; tableName: string; propertyName: string; idsOfMultipleNodesToSearch?: string[]; } export {};