import { DeepReadonly } from '@whisklabs/deep-readonly'; import { Field, FieldGet, Service, ServiceRequest, ServiceResponse } from '../types'; export type GSuccess = { success: true; data: T; error?: { data?: unknown; message?: string; httpStatus?: number; grpcCode?: number; }; }; export type GError = { success: false; data?: undefined; error: { data?: unknown; message?: string; httpStatus?: number; grpcCode?: number; }; }; export type GResult = { success: never; data?: T; error?: { data?: unknown; message?: string; httpStatus?: number; grpcCode?: number; }; }; export type GOutput = GSuccess | GError | GResult; type LoggerFn = (message?: any, ...optionalParams: any[]) => void; export interface ConfigGRPC { server: string; credentials?: boolean; timeout?: number; devtool?: boolean; debug?: boolean; logger?: { warn: LoggerFn; error: LoggerFn; info: LoggerFn; }; transformRequest?(params: { xhr: XMLHttpRequest; data: T; meta?: Meta; }): T | void | Promise; transformResponse?(params: { xhr: XMLHttpRequest; data: GOutput; meta?: Meta; }): GOutput | Promise>; } export interface Cancel { (): void; abort?(): void; } export interface LocalGRPC { mask?: boolean | ('mask' extends keyof FieldGet ? { field: keyof FieldGet; outField?: keyof FieldGet; } : { field: keyof FieldGet; outField: keyof FieldGet; }); cancel?: Cancel | string; timeout?: number; onDownload?: (e: ProgressEvent) => void; onUpload?: (e: ProgressEvent) => void; meta?: Meta; } export type GRPC = (...[field, values, options]: {} extends ServiceRequest> ? [Service, ServiceRequest>?, LocalGRPC?] : [Service, ServiceRequest>, LocalGRPC?]) => Promise>>>; export type GRPCDeep = (...[field, values, options]: {} extends ServiceRequestDeep> ? [Service, ServiceRequestDeep>?, LocalGRPC?] : [Service, ServiceRequestDeep>, LocalGRPC?]) => Promise, DeepReadonly>>>>; export type FieldGetDeep> = T extends Field ? DeepReadonly : never; export type ServiceRequestDeep> = T extends Service ? FieldGetDeep : never; export type ServiceResponseDeep> = T extends Service ? FieldGetDeep : never; export {};