import Ajv from 'ajv' import { ObjectType } from 'yaschva' import { Elastic, KeyValue } from '../DataDriverTypes.js' import { HttpMethods, SearchTypes } from 'declarapi-runtime' export type AuthType = (string | {createdBy: boolean})[] | boolean export type ManageableFields ={ createdBy?: boolean } export type Contract = { name: string; type?: HttpMethods; authentication: AuthType; manageFields: ManageableFields; arguments: ObjectType; returns: ObjectType; description?: string; }; export type CrudAuthAll = { get: AuthType; put: AuthType; post: string[] | boolean; delete: AuthType; }; export type CrudAuthSome = { get: AuthType; modify: AuthType; delete?: AuthType; }; export type CrudContract = { name: string; methods?: { get?:boolean, post?:boolean, put?: boolean, patch?:boolean, delete?:boolean}, authentication: AuthType | CrudAuthAll | CrudAuthSome; manageFields?:ManageableFields; dataType: ObjectType; search?: SearchTypes; description?: string; preferredImplementation?: {type: 'elasticsearch'; index: string}; }; export type OutputSuccess = { name: string; authentication: AuthType; manageFields: ManageableFields; method: HttpMethods; arguments: ObjectType; returns: ObjectType; preferredImplementation?: Elastic | KeyValue; search?: SearchTypes; }; export type Output = | {type: 'result'; key: string; results: OutputSuccess[]; errors?: undefined;} | {type: 'error'; key?: undefined; errors: (Ajv.ErrorObject | string)[] | string; results?: undefined;};