import { ApiPage } from "../pages/api-page.js";
import { ApiQuery } from "../pages/api-query.js";
import type { StandardSchemaV1 } from "../validation/standard-schema.js";
export declare const BC_BASE_URL = "https://api.businesscentral.dynamics.com/v2.0";
export declare const DEFAULT_TIMEOUT = 30000;
export declare const BC_DEFAULT_SCOPE = "https://api.businesscentral.dynamics.com/.default";
export type BCConfig = {
    tenantId: string;
    environment: string;
    companyId: string;
    timeout?: number;
    baseURL?: string;
    userAgent?: string;
};
export type RequestOpts = {
    method?: "GET" | "POST" | "PATCH" | "DELETE";
    params?: URLSearchParams;
    payload?: unknown;
    timeout?: number;
    serverPageSize?: number;
};
export interface AuthClient {
    getToken(scope: string): Promise<string>;
}
export declare class BCClient {
    readonly auth: AuthClient;
    readonly apiPath: string;
    readonly apiURL: string;
    readonly scope = "https://api.businesscentral.dynamics.com/.default";
    readonly userAgent: string;
    readonly timeout: number;
    constructor(config: BCConfig, apiPath: string, authClient: AuthClient);
    getToken(): Promise<string>;
    request(endpoint: string, opts?: RequestOpts): Promise<unknown>;
    requestWithSchema<TSchema extends StandardSchemaV1>(endpoint: string, schema: TSchema, opts?: RequestOpts): Promise<StandardSchemaV1.InferOutput<TSchema>>;
    for<T>(endpoint: string, schema: StandardSchemaV1<unknown, T>): ApiPage<T>;
    forQuery<T>(endpoint: string, schema: StandardSchemaV1<unknown, T>): ApiQuery<T>;
}
//# sourceMappingURL=client.d.ts.map