@ritas-inc/hanaqueryapi-client
Version:
TypeScript client for HANA Query API with full type safety and error handling
1,103 lines • 27.5 kB
TypeScript
/**
* HANA Query API Client - Type Definitions
*
* Complete TypeScript interfaces matching the current API response structures.
* These types are based on the actual API implementation and ensure type safety.
*/
/**
* Base API response structure
*/
export interface BaseAPIResponse {
success: boolean;
}
/**
* Successful API response
*/
export interface SuccessResponse<TData = any, TMetadata = any> extends BaseAPIResponse {
success: true;
data: TData;
metadata?: TMetadata;
}
/**
* Error API response
*/
export interface ErrorResponse extends BaseAPIResponse {
success: false;
problem: ProblemDetails;
}
/**
* Generic API response (success or error)
*/
export type APIResponse<TData = any, TMetadata = any> = SuccessResponse<TData, TMetadata> | ErrorResponse;
/**
* Problem details for error responses (RFC 7807)
*/
export interface ProblemDetails {
status: number;
type: string;
title: string;
detail: string;
instance: string;
context: {
request: string;
responseText: string;
};
issues: string[];
}
/**
* Date range parameters for sales endpoint
*/
export interface SalesParams {
from: string;
to: string;
}
/**
* Generic request options
*/
export interface RequestOptions {
timeout?: number;
retries?: number;
signal?: AbortSignal;
}
/**
* API response headers
*/
export interface APIResponseHeaders {
'x-response-time'?: string;
'x-authorization-response'?: 'ok' | 'unauthorized';
'content-type'?: string;
}
/**
* Health check response data
*/
export interface HealthData {
status: 'ok';
timestamp: string;
uptime: number;
}
/**
* Health endpoint metadata containing system information
*
* @example
* ```typescript
* {
* systemInfo: true,
* serverTime: "2025-06-30T12:00:00.000Z",
* nodeVersion: "v24.0.2",
* platform: "linux",
* arch: "x64"
* }
* ```
*/
export interface HealthMetadata {
/** Indicates that system information is included in the metadata */
systemInfo: boolean;
/** Server current time in ISO 8601 format */
serverTime: string;
/** Node.js version (e.g., "v24.0.2") */
nodeVersion: string;
/** Operating system platform (e.g., "linux", "darwin", "win32") */
platform: string;
/** System architecture (e.g., "x64", "arm64") */
arch: string;
}
/**
* Health endpoint response
*/
export type HealthResponse = SuccessResponse<HealthData, HealthMetadata>;
/**
* API documentation response data
*/
export interface DocsData {
name: string;
version: string;
endpoints: Record<string, string>;
}
/**
* Documentation endpoint metadata containing API information
*
* @example
* ```typescript
* {
* endpointCount: 9,
* apiVersion: "v1",
* generatedAt: "2025-06-30T12:00:00.000Z",
* documentation: true
* }
* ```
*/
export interface DocsMetadata {
/** Total number of available API endpoints */
endpointCount: number;
/** API version identifier (e.g., "v1") */
apiVersion: string;
/** Documentation generation timestamp in ISO 8601 format */
generatedAt: string;
/** Indicates this is a documentation endpoint response */
documentation: boolean;
}
/**
* Documentation endpoint response
*/
export type DocsResponse = SuccessResponse<DocsData, DocsMetadata>;
/**
* Individual item status
*/
export interface ItemStatus {
itemgroup: string;
itemcode: string;
description: string;
onhand: number;
onorder: number;
onassembly: number;
min: number;
max: number;
sector: string | null;
}
/**
* Individual sales order item
*/
export interface SalesItem {
orderEntry: number;
orderNum: number;
cardName: string;
dueDate: string;
itemcode: string;
openqty: number;
}
/**
* Items parameters for filtering
*/
export interface ItemsParams {
groups?: number[];
}
/**
* Items response data
*/
export interface ItemsStatusData {
items: ItemStatus[];
}
/**
* Sales response data
*/
export interface SalesData {
sales: SalesItem[];
}
/**
* Individual item group
*/
export interface ItemGroup {
code: string;
name: string;
}
/**
* Item groups response data
*/
export interface ItemGroupsData {
groups: ItemGroup[];
}
/**
* Items metadata
*/
export interface ItemsStatusMetadata {
count: number;
groupCodes?: number[];
}
/**
* Sales metadata
*/
export interface SalesMetadata {
count: number;
from: string;
to: string;
}
/**
* Item groups metadata
*/
export interface ItemGroupsMetadata {
count: number;
}
/**
* Items endpoint response
*/
export type ItemsStatusResponse = SuccessResponse<ItemsStatusData, ItemsStatusMetadata>;
/**
* Sales endpoint response
*/
export type SalesResponse = SuccessResponse<SalesData, SalesMetadata>;
/**
* Item groups endpoint response
*/
export type ItemGroupsResponse = SuccessResponse<ItemGroupsData, ItemGroupsMetadata>;
/**
* Individual item hierarchy
*/
export interface Hierarchy {
rank: string;
root: string;
parent: string | null;
node: string;
quantity: number;
injections: number;
}
/**
* Item hierarchies response data
*/
export interface HierarchiesData {
hierarchies: Hierarchy[];
}
/**
* Item hierarchies metadata
*/
export interface HierarchiesMetadata {
count: number;
}
/**
* Item hierarchies endpoint response
*/
export type HierarchiesResponse = SuccessResponse<HierarchiesData, HierarchiesMetadata>;
/**
* Individual tree relationship
*/
export interface Tree {
parent: string;
itemcode: string;
quantity: number;
injPerUn?: number;
injPerEtiq?: number;
parentSector?: string;
itemSector?: string;
parentMaxPerOrder?: number;
itemMaxPerOrder?: number;
}
/**
* Trees response data
*/
export interface TreesData {
trees: Tree[];
}
/**
* Trees metadata
*/
export interface TreesMetadata {
count: number;
}
/**
* Trees endpoint response
*/
export type TreesResponse = SuccessResponse<TreesData, TreesMetadata>;
/**
* Individual quantity per tag item
*/
export interface QtyPerTag {
itemcode: string;
injPerTag: number;
qtyPerTag: number;
}
/**
* Quantity per tag response data
*/
export interface QtyPerTagData {
qtyPerTag: QtyPerTag[];
}
/**
* Quantity per tag metadata
*/
export interface QtyPerTagMetadata {
count: number;
}
/**
* Quantity per tag endpoint response
*/
export type QtyPerTagResponse = SuccessResponse<QtyPerTagData, QtyPerTagMetadata>;
/**
* Individual production sector
*/
export interface ProductionSector {
code: string;
name: string;
order: number;
}
/**
* Production sectors response data
*/
export interface ProductionSectorsData {
sectors: ProductionSector[];
}
/**
* Production sectors metadata
*/
export interface ProductionSectorsMetadata {
count: number;
lastUpdated: string;
}
/**
* Production sectors endpoint response
*/
export type ProductionSectorsResponse = SuccessResponse<ProductionSectorsData, ProductionSectorsMetadata>;
/**
* Individual database company
*/
export interface DatabaseCompany {
dbName: string;
cmpName: string;
}
/**
* Database companies response data
*/
export interface DatabaseCompaniesData {
companies: DatabaseCompany[];
}
/**
* Database companies metadata
*/
export interface DatabaseCompaniesMetadata {
count: number;
lastUpdated: string;
}
/**
* Database companies endpoint response
*/
export type DatabaseCompaniesResponse = SuccessResponse<DatabaseCompaniesData, DatabaseCompaniesMetadata>;
/**
* Tag status enum
*
* @remarks
* Status values:
* - idle: Tag created but not yet activated
* - activated: Tag activated for production
* - quantified: Production quantity recorded
* - partUtilized: Some quantity has been used
* - utilized: Fully utilized
* - discarded: Tag discarded
* - used: Has usage records (calculated by service layer)
*/
export type TagStatus = 'idle' | 'activated' | 'quantified' | 'partUtilized' | 'utilized' | 'discarded' | 'used';
/**
* Tag usage record
*/
export interface TagUsage {
tagCode: number;
workOrder: number;
useDateTime: string;
quantity: number;
employee: string | null;
}
/**
* Individual production tag
*/
export interface Tag {
tagEntry: number;
workOrderEntry: number | null;
workOrderNum: number | null;
itemCode: string | null;
status: TagStatus;
activationDateTime: string | null;
activationEmployee: string | null;
injectionMachine: string | null;
mold: string | null;
quantificationDateTime: string | null;
quantificationEmployee: string | null;
quantity: number | null;
quantityUoM: string;
discardDateTime: string | null;
discardEmployee: string | null;
usage: TagUsage[];
}
/**
* Tag response data
*/
export interface TagData {
tag: Tag;
}
/**
* Tag metadata
*/
export interface TagMetadata {
tagEntry: number;
}
/**
* Tag endpoint response
*/
export type TagResponse = SuccessResponse<TagData, TagMetadata>;
/**
* Work order tags response data
*/
export interface WorkOrderTagsData {
tags: Tag[];
}
/**
* Work order tags metadata
*/
export interface WorkOrderTagsMetadata {
workOrderEntry: number;
count: number;
}
/**
* Work order tags endpoint response
*
* @remarks
* API Behavior:
* - Returns all tags associated with the specified work order
* - Returns empty array if work order has no tags
* - No 404 if work order doesn't exist - just returns empty array
*/
export type WorkOrderTagsResponse = SuccessResponse<WorkOrderTagsData, WorkOrderTagsMetadata>;
/**
* Individual injection machine
*/
export interface InjectionMachine {
resCode: string;
resName: string;
active: string;
}
/**
* Injection machines response data
*/
export interface InjectionMachinesData {
machines: InjectionMachine[];
}
/**
* Single injection machine response data
*/
export interface SingleInjectionMachineData {
machine: InjectionMachine;
}
/**
* Injection machines metadata
*/
export interface InjectionMachinesMetadata {
count: number;
}
/**
* Single injection machine metadata
*/
export interface SingleInjectionMachineMetadata {
machineCode: string;
}
/**
* Injection machines endpoint response
*/
export type InjectionMachinesResponse = SuccessResponse<InjectionMachinesData, InjectionMachinesMetadata>;
/**
* Single injection machine endpoint response
*/
export type SingleInjectionMachineResponse = SuccessResponse<SingleInjectionMachineData, SingleInjectionMachineMetadata>;
/**
* Individual mold
*/
export interface Mold {
resCode: string;
resName: string;
active: string;
pieceModel: string | null;
cavities: number | null;
injectionsPerTag: number | null;
standardCycle: number | null;
}
/**
* Molds response data
*/
export interface MoldsData {
molds: Mold[];
}
/**
* Single mold response data
*/
export interface SingleMoldData {
mold: Mold;
}
/**
* Molds metadata
*/
export interface MoldsMetadata {
count: number;
}
/**
* Single mold metadata
*/
export interface SingleMoldMetadata {
moldCode: string;
}
/**
* Molds endpoint response
*/
export type MoldsResponse = SuccessResponse<MoldsData, MoldsMetadata>;
/**
* Single mold endpoint response
*/
export type SingleMoldResponse = SuccessResponse<SingleMoldData, SingleMoldMetadata>;
/**
* Business partner record. Most fields are nullable since the source SAP HANA data
* is sparsely populated.
*/
export interface BusinessPartner {
cardcode: string;
cardname: string | null;
localarea_number: string | null;
phone_number: string | null;
cellular_number: string | null;
email: string | null;
indcode: string | null;
indname: string | null;
ind_description: string | null;
tercode: string | null;
territory_description: string | null;
parent_territory: string | null;
zipcode: string | null;
street_type: string | null;
street_name: string | null;
street_number: string | null;
neighborhood: string | null;
city: string | null;
state: string | null;
country: string | null;
}
/**
* List response data for /business-partners and /business-partners/search.
*/
export interface BusinessPartnersData {
partners: BusinessPartner[];
}
/**
* Metadata for /business-partners (plain list).
*/
export interface BusinessPartnersMetadata {
count: number;
}
/**
* Metadata for /business-partners/search — echoes the criteria back.
*/
export interface BusinessPartnersSearchMetadata {
count: number;
criteria: SearchCriteria;
}
/**
* List response.
*/
export type BusinessPartnersResponse = SuccessResponse<BusinessPartnersData, BusinessPartnersMetadata>;
/**
* Search response.
*/
export type BusinessPartnersSearchResponse = SuccessResponse<BusinessPartnersData, BusinessPartnersSearchMetadata>;
/**
* Contact record (sbo_ritas.ocpr). `cardname` is populated by the search endpoint
* (it joins ocrd) but is null/absent on the plain /contacts and
* /business-partners/:cardCode/contacts endpoints.
*/
export interface Contact {
contactcode: string;
contactname: string | null;
first_name: string | null;
middle_name: string | null;
last_name: string | null;
title: string | null;
position: string | null;
email: string | null;
phone_number_1: string | null;
phone_number_2: string | null;
cell_phone_number: string | null;
notes: string | null;
notes_2: string | null;
cardcode: string;
cardname?: string | null;
}
/**
* List response data for /contacts, /contacts/search,
* and /business-partners/:cardCode/contacts.
*/
export interface ContactsData {
contacts: Contact[];
}
/**
* Metadata for /contacts (plain list).
*/
export interface ContactsMetadata {
count: number;
}
/**
* Metadata for /contacts/search — echoes the criteria back.
*/
export interface ContactsSearchMetadata {
count: number;
criteria: SearchCriteria;
}
/**
* Metadata for /business-partners/:cardCode/contacts.
*/
export interface BusinessPartnerContactsMetadata {
count: number;
cardCode: string;
}
/**
* List response.
*/
export type ContactsResponse = SuccessResponse<ContactsData, ContactsMetadata>;
/**
* Search response.
*/
export type ContactsSearchResponse = SuccessResponse<ContactsData, ContactsSearchMetadata>;
/**
* Nested contacts-of-partner response.
*/
export type BusinessPartnerContactsResponse = SuccessResponse<ContactsData, BusinessPartnerContactsMetadata>;
/**
* Search criteria shared by /business-partners/search and /contacts/search.
*
* The server requires at least one of `phone`, `email`, `q`, or `cardCode` —
* a request with only `fuzziness` (or no criteria at all) returns HTTP 400.
* The client does not pre-validate this; the server's error is propagated as
* a `ValidationError`.
*/
export interface SearchCriteria {
/**
* Digits-only substring match. Non-digits in the input are stripped server-side.
* For BP search this also matches the Phone2||Phone1 / Phone2||Cellular concatenations,
* so it handles "with area code" and "without area code" transparently.
*/
phone?: string;
/**
* Exact match after canonical email extraction (first `[A-Za-z0-9._%+-]+@…` substring,
* lowercased on both sides).
*/
email?: string;
/**
* Free-text fuzzy search via HANA `CONTAINS(..., FUZZY(fuzziness))`. Words are split on
* whitespace and OR-ed; each word may match any of the searched fields.
*/
q?: string;
/**
* Exact match on CardCode. Useful to scope contact search to a known partner.
*/
cardCode?: string;
/**
* Fuzziness threshold for `q` (range 0.1–1.0, default 0.7). Higher values are stricter;
* lower values catch more typos and accent variants but return more false positives.
* Ignored when `q` is omitted.
*/
fuzziness?: number;
}
/**
* Production plan
*/
export interface Plan {
plan_id: number;
plan_createdate: string;
plan_username: string;
plan_sapstatus: string;
plan_status: string;
plan_releasedate: string | null;
plan_salesfromdate: string | null;
plan_salestodate: string | null;
products_total: number;
products_generated: number;
products_canceled: number;
products_released: number;
products_closed: number;
injections_generated: number;
injections_canceled: number;
injections_released: number;
injections_closed: number;
}
/**
* Plans list response data
*/
export interface PlansData {
plans: Plan[];
}
/**
* Plans list metadata
*/
export interface PlansMetadata {
count: number;
}
/**
* Plans list endpoint response
*/
export type PlansResponse = SuccessResponse<PlansData, PlansMetadata>;
/**
* Single plan response data
*/
export interface SinglePlanData {
plan: Plan;
}
/**
* Single plan metadata
*/
export interface SinglePlanMetadata {
planId: number;
}
/**
* Single plan endpoint response
*/
export type SinglePlanResponse = SuccessResponse<SinglePlanData, SinglePlanMetadata>;
/**
* Plan product
*/
export interface PlanProduct {
itemcode: string;
quantity: number;
breakQty: number;
group: string;
}
/**
* Plan products response data
*
* @remarks
* The products array can be empty when a plan exists but has no products.
* This is a normal, successful response (HTTP 200), not an error condition.
*/
export interface PlanProductsData {
products: PlanProduct[];
}
/**
* Plan products metadata
*/
export interface PlanProductsMetadata {
count: number;
planId: number;
}
/**
* Plan products endpoint response
*
* @remarks
* API Behavior:
* - HTTP 200: Plan exists (products array may be empty or populated)
* - HTTP 404: Plan with the specified ID does not exist
* - Empty products array indicates the plan exists but has no products
*/
export type PlanProductsResponse = SuccessResponse<PlanProductsData, PlanProductsMetadata>;
/**
* Work order
*/
export interface WorkOrder {
order_id: number;
order_num: number;
order_itemcode: string;
order_plannedqty: number;
order_status: string;
order_completedqty: number;
order_rejectqty: number;
order_createdate: string;
order_originabs: number | null;
order_originnum: number | null;
order_releasedate: string | null;
order_productionsector: string | null;
}
/**
* Plan work orders response data
*
* @remarks
* The workOrders array can be empty when a plan exists but has no work orders.
* This is a normal, successful response (HTTP 200), not an error condition.
*/
export interface PlanWorkOrdersData {
workOrders: WorkOrder[];
}
/**
* Plan work orders metadata
*/
export interface PlanWorkOrdersMetadata {
count: number;
planId: number;
}
/**
* Plan work orders endpoint response
*
* @remarks
* API Behavior:
* - HTTP 200: Plan exists (workOrders array may be empty or populated)
* - HTTP 404: Plan with the specified ID does not exist
* - Empty workOrders array indicates the plan exists but has no work orders
*/
export type PlanWorkOrdersResponse = SuccessResponse<PlanWorkOrdersData, PlanWorkOrdersMetadata>;
/**
* Plan tag
*/
export interface PlanTag {
tag_entry: number;
tag_workorder_num: number;
tag_item_name: string;
}
/**
* Plan tags response data
*/
export interface PlanTagsData {
tags: PlanTag[];
}
/**
* Plan tags metadata
*/
export interface PlanTagsMetadata {
planId: number;
count: number;
}
/**
* Plan tags endpoint response
*
* @remarks
* API Behavior:
* - HTTP 200: Plan exists (tags array may be empty or populated)
* - HTTP 404: Plan with the specified ID does not exist
* - Empty tags array indicates the plan exists but has no tags
*/
export type PlanTagsResponse = SuccessResponse<PlanTagsData, PlanTagsMetadata>;
/**
* Plan sector summary
*/
export interface PlanSectorSummary {
plan_entry: number;
sector_name: string;
sector_planned_qtty: number;
sector_open_qtty: number;
sector_completed_qtty: number;
sector_abandoned_qtty: number;
}
/**
* Single plan sectors summary response data
*/
export interface PlanSectorsSummaryData {
sectors: PlanSectorSummary[];
}
/**
* Single plan sectors summary metadata
*/
export interface PlanSectorsSummaryMetadata {
plan_id: number;
sector_count: number;
total_planned: number;
total_completed: number;
completion_rate: number;
}
/**
* Single plan sectors summary endpoint response
*
* @remarks
* API Behavior:
* - HTTP 200: Plan exists (sectors array may be empty or populated)
* - HTTP 404: Plan with the specified ID does not exist
* - Empty sectors array indicates the plan exists but has no sectors
*/
export type PlanSectorsSummaryResponse = SuccessResponse<PlanSectorsSummaryData, PlanSectorsSummaryMetadata>;
/**
* All plans sectors summary response data
*/
export interface AllPlansSectorsSummaryData {
sectors: PlanSectorSummary[];
}
/**
* All plans sectors summary metadata
*/
export interface AllPlansSectorsSummaryMetadata {
total_sectors: number;
unique_plans: number;
unique_sector_names: string[];
total_planned: number;
total_completed: number;
overall_completion_rate: number;
}
/**
* All plans sectors summary endpoint response
*/
export type AllPlansSectorsSummaryResponse = SuccessResponse<AllPlansSectorsSummaryData, AllPlansSectorsSummaryMetadata>;
/**
* User lookup response data
*/
export interface UserData {
userId: number;
}
/**
* User lookup metadata
*/
export interface UserMetadata {
username: string;
}
/**
* User lookup endpoint response
*/
export type UserResponse = SuccessResponse<UserData, UserMetadata>;
/**
* Client configuration options
*/
export interface ClientConfig {
baseUrl: string;
timeout?: number;
retries?: number;
retryDelay?: number;
enableLogging?: boolean;
logLevel?: 'debug' | 'info' | 'warn' | 'error';
headers?: Record<string, string>;
}
/**
* Request context for logging/debugging
*/
export interface RequestContext {
method: string;
url: string;
startTime: number;
endTime?: number;
duration?: number;
attempt?: number;
maxAttempts?: number;
}
/**
* Client error types
*/
export type ClientErrorType = 'network_error' | 'timeout_error' | 'validation_error' | 'authorization_error' | 'not_found_error' | 'server_error' | 'unknown_error';
/**
* Client error details
*/
export interface ClientErrorDetails {
type: ClientErrorType;
message: string;
statusCode?: number;
originalError?: Error;
context?: RequestContext;
problemDetails?: ProblemDetails;
}
/**
* Extract data type from API response
*/
export type ExtractData<T> = T extends SuccessResponse<infer TData, any> ? TData : never;
/**
* Extract metadata type from API response
*/
export type ExtractMetadata<T> = T extends SuccessResponse<any, infer TMetadata> ? TMetadata : never;
/**
* Type guard for success responses
*/
export declare function isSuccessResponse<T, M>(response: APIResponse<T, M>): response is SuccessResponse<T, M>;
/**
* Type guard for error responses
*/
export declare function isErrorResponse(response: APIResponse): response is ErrorResponse;
/**
* Client method return types - all methods return consistent { data, metadata } format
*
* @example
* ```typescript
* // All client methods return the same structure:
* const healthResult: ClientHealthResult = await client.getHealth();
* const { data, metadata } = healthResult;
*
* // Consistent destructuring pattern for all methods:
* const { data: healthData, metadata: healthMeta } = await client.getHealth();
* const { data: docsData, metadata: docsMeta } = await client.getDocs();
* const { data: itemsData, metadata: itemsMeta } = await client.getItemsStatus();
* ```
*/
export type ClientHealthResult = {
data: HealthData;
metadata: HealthMetadata;
};
export type ClientDocsResult = {
data: DocsData;
metadata: DocsMetadata;
};
export type ClientItemsStatusResult = {
data: ItemsStatusData;
metadata: ItemsStatusMetadata;
};
export type ClientHierarchiesResult = {
data: HierarchiesData;
metadata: HierarchiesMetadata;
};
export type ClientTreesResult = {
data: TreesData;
metadata: TreesMetadata;
};
export type ClientProductionSectorsResult = {
data: ProductionSectorsData;
metadata: ProductionSectorsMetadata;
};
export type ClientDatabaseCompaniesResult = {
data: DatabaseCompaniesData;
metadata: DatabaseCompaniesMetadata;
};
export type ClientPlansResult = {
data: PlansData;
metadata: PlansMetadata;
};
export type ClientSinglePlanResult = {
data: SinglePlanData;
metadata: SinglePlanMetadata;
};
export type ClientPlanProductsResult = {
data: PlanProductsData;
metadata: PlanProductsMetadata;
};
export type ClientPlanWorkOrdersResult = {
data: PlanWorkOrdersData;
metadata: PlanWorkOrdersMetadata;
};
export type ClientUserResult = {
data: UserData;
metadata: UserMetadata;
};
export type ClientBusinessPartnersResult = {
data: BusinessPartnersData;
metadata: BusinessPartnersMetadata;
};
export type ClientBusinessPartnersSearchResult = {
data: BusinessPartnersData;
metadata: BusinessPartnersSearchMetadata;
};
export type ClientContactsResult = {
data: ContactsData;
metadata: ContactsMetadata;
};
export type ClientContactsSearchResult = {
data: ContactsData;
metadata: ContactsSearchMetadata;
};
export type ClientBusinessPartnerContactsResult = {
data: ContactsData;
metadata: BusinessPartnerContactsMetadata;
};
/**
* Map of all available endpoints and their response types
*/
export interface EndpointMap {
'GET /health': HealthResponse;
'GET /docs': DocsResponse;
'GET /items/status': ItemsStatusResponse;
'GET /items/hierarchies': HierarchiesResponse;
'GET /items/trees': TreesResponse;
'GET /production-sectors': ProductionSectorsResponse;
'GET /plans': PlansResponse;
'GET /plans/{planId}': SinglePlanResponse;
'GET /plans/{planId}/products': PlanProductsResponse;
'GET /plans/{planId}/work-orders': PlanWorkOrdersResponse;
'GET /users/{username}': UserResponse;
}
/**
* Map of client method return types
*/
export interface ClientEndpointMap {
'getHealth': ClientHealthResult;
'getDocs': ClientDocsResult;
'getItemsStatus': ClientItemsStatusResult;
'getItemHierarchies': ClientHierarchiesResult;
'getItemTrees': ClientTreesResult;
'getProductionSectors': ClientProductionSectorsResult;
'getDatabaseCompanies': ClientDatabaseCompaniesResult;
'getPlans': ClientPlansResult;
'getPlan': ClientSinglePlanResult;
'getPlanProducts': ClientPlanProductsResult;
'getPlanWorkOrders': ClientPlanWorkOrdersResult;
'getUser': ClientUserResult;
'getBusinessPartners': ClientBusinessPartnersResult;
'searchBusinessPartners': ClientBusinessPartnersSearchResult;
'getBusinessPartnerContacts': ClientBusinessPartnerContactsResult;
'getContacts': ClientContactsResult;
'searchContacts': ClientContactsSearchResult;
}
/**
* Union of all possible API responses
*/
export type AnyAPIResponse = EndpointMap[keyof EndpointMap];
/**
* Union of all possible client method results
*/
export type AnyClientResult = ClientEndpointMap[keyof ClientEndpointMap];
//# sourceMappingURL=types.d.ts.map