import { ErrorDto, OptionDto, PagedListDto } from "@excopartners/utils/dist/lib/Dto"; import { CreateRequest, DeleteRequest, DownloadRequest, DownloadResponse, Expand, RetrieveMultipleRequest, RetrieveRequest, UpdateRequest, UploadRequest, UpsertRequest } from "dynamics-web-api"; import NodeCache from "node-cache"; import { SessionUser } from '../../auth/SessionUser'; import { DynamicsApi } from "./DynamicsApi"; import { SecurityPolicySet } from "./Security"; export interface DataverseRepositoryOptions { session?: SessionUser; hasCreateAccess?: (d: any, session?: SessionUser) => Promise; hasReadAccess?: (d: D, session?: SessionUser) => Promise; hasUpdateAccess?: (d: D, session?: SessionUser) => Promise; hasDeleteAccess?: (d: D, session?: SessionUser) => Promise; securityPolicy?: SecurityPolicySet; } export interface DataverseFormProps { title: string; value: D; errors?: ErrorDto[]; open: boolean; onClose: () => void; onChange: (value: D) => void; onError: (errors: ErrorDto[]) => void; onUpdated: (value: D | any) => void; } export interface DataverseDto { id: string; createdon?: Date; modifiedon?: Date; } export type OmitId = Omit; export declare abstract class DataverseRepository { abstract readonly _collection: string; abstract readonly _expand: Expand[] | undefined; abstract readonly _select: string[] | undefined; abstract readonly _orderby: string[] | undefined; private _options; private _dynamicsApi; private _cache; constructor(options: DataverseRepositoryOptions, dynamicsApi: DynamicsApi, cache?: NodeCache); get pageSize(): number; get dynamicsWebApi(): import("dynamics-web-api").DynamicsWebApi; get collection(): string; get options(): DataverseRepositoryOptions; get cache(): NodeCache; get user(): { id: string; name: string; email: string; image?: string; }; get expand(): Expand[] | undefined; get select(): string[] | undefined; get orderBy(): string[] | undefined; get expandMultiple(): Expand[]; abstract mapDto(data: A): D; /** * Map any object to the create form. Typically used to reverse DTO mapping for creates * @param dto * @returns */ mapCreateForm(dto: any): C; /** * Map any object to the update form. Typically used to revese DTO mapping for updates * @param dto * @returns */ mapUpdateForm(dto: any): U; /** * Map any object from FetchXml to the DTO. The default is to call the mapDto function * which can be overridden if custom mapping is needed * @param value to map * @returns */ mapFromFetchXml(value: any): D; mapUpsertForm(dto: any): C; fetchAllActive(): Promise; retrieveMultipleRequest(request: RetrieveMultipleRequest, options?: { mapDto?: (data: any) => any; hasAccess: (d: D, session?: SessionUser) => Promise; }): Promise; retrieveRequest(request: RetrieveRequest, options?: { mapDto?: (data: any) => any; hasAccess: (d: D, session?: SessionUser) => Promise; }): Promise; downloadFileRequest(request: DownloadRequest): Promise; updateRequest(request: UpdateRequest): Promise; upsertRequest(request: UpsertRequest): Promise; createRequest(request: CreateRequest): Promise; deleteRequest(request: DeleteRequest): Promise; uploadRequest(request: UploadRequest): Promise; fetchByXml(fetchXml: string, page: number, pageSize?: number): Promise>; fetchAll(filter?: string): Promise; fetchById(id: string): Promise; update(id: string, form: any): Promise; upsert(id: string, form: any): Promise; create(form: any): Promise; alternativeKey(map: { [key: string]: any; }): string; upload(id: string, fieldName: string, fileName: string, file: any): Promise; downloadFile(id: string, fieldName: string): Promise; downloadFileUrl(id: string, fieldName: string): string; delete(id: string): Promise; /** * * @param name the logical name of the OptionSet, eg. exco_schooltype * @returns */ fetchOptionsByName(name: string): Promise; /** * * @param key the GUID or Alternate Key for the OptionSet, eg. Name='exco_schooltype' * @returns */ fetchOptions(key: string): Promise; fetchOptionByLabel(name: string, optionLabel: string): Promise; fetchOptionByValue(name: string, value: number): Promise; private hasReadAccess; private hasUpdateAccess; private hasCreateAccess; private hasDeleteAccess; }