import type { Client } from 'openapi-fetch';
import type { RequestOptions } from './common.js';
import type { MeterCreate, operations, paths } from './schemas.js';
/**
 * Meters
 * @description Meters are used to track and manage usage of your application.
 */
export declare class Meters {
    private client;
    constructor(client: Client<paths, `${string}/${string}`>);
    /**
     * Create a meter
     * @param meter - The meter to create
     * @param signal - An optional abort signal
     * @returns The created meter
     */
    create(meter: MeterCreate, options?: RequestOptions): Promise<{
        readonly id: string;
        description?: string;
        metadata?: import("./schemas.js").components["schemas"]["Metadata"] | null;
        readonly createdAt: Date;
        readonly updatedAt: Date;
        readonly deletedAt?: Date;
        name?: string;
        slug: string;
        aggregation: import("./schemas.js").components["schemas"]["MeterAggregation"];
        eventType: string;
        eventFrom?: Date;
        valueProperty?: string;
        groupBy?: {
            [key: string]: string;
        };
        readonly annotations?: import("./schemas.js").components["schemas"]["Annotations"] | null;
    } | undefined>;
    /**
     * Get a meter by ID or slug
     * @param idOrSlug - The ID or slug of the meter
     * @param signal - An optional abort signal
     * @returns The meter
     */
    get(idOrSlug: operations['getMeter']['parameters']['path']['meterIdOrSlug'], options?: RequestOptions): Promise<{
        readonly id: string;
        description?: string;
        metadata?: import("./schemas.js").components["schemas"]["Metadata"] | null;
        readonly createdAt: Date;
        readonly updatedAt: Date;
        readonly deletedAt?: Date;
        name?: string;
        slug: string;
        aggregation: import("./schemas.js").components["schemas"]["MeterAggregation"];
        eventType: string;
        eventFrom?: Date;
        valueProperty?: string;
        groupBy?: {
            [key: string]: string;
        };
        readonly annotations?: import("./schemas.js").components["schemas"]["Annotations"] | null;
    } | undefined>;
    /**
     * List meters
     * @param signal - An optional abort signal
     * @returns The meters
     */
    list(options?: RequestOptions): Promise<{
        readonly id: string;
        description?: string;
        metadata?: import("./schemas.js").components["schemas"]["Metadata"] | null;
        readonly createdAt: Date;
        readonly updatedAt: Date;
        readonly deletedAt?: Date;
        name?: string;
        slug: string;
        aggregation: import("./schemas.js").components["schemas"]["MeterAggregation"];
        eventType: string;
        eventFrom?: Date;
        valueProperty?: string;
        groupBy?: {
            [key: string]: string;
        };
        readonly annotations?: import("./schemas.js").components["schemas"]["Annotations"] | null;
    }[] | undefined>;
    /**
     * Query usage data for a meter by ID or slug
     * @param idOrSlug - The ID or slug of the meter
     * @param query - The query parameters
     * @param signal - An optional abort signal
     * @returns The meter data
     */
    query(idOrSlug: operations['queryMeter']['parameters']['path']['meterIdOrSlug'], query?: operations['queryMeter']['parameters']['query'], options?: RequestOptions): Promise<{
        from?: Date;
        to?: Date;
        windowSize?: import("./schemas.js").components["schemas"]["WindowSize"];
        data: import("./schemas.js").components["schemas"]["MeterQueryRow"][];
    }>;
    /**
     * Update a meter by ID or slug
     * @param idOrSlug - The ID or slug of the meter
     * @param meter - The meter update data
     * @param options - Optional request options
     * @returns The updated meter
     */
    update(idOrSlug: operations['updateMeter']['parameters']['path']['meterIdOrSlug'], meter: operations['updateMeter']['requestBody']['content']['application/json'], options?: RequestOptions): Promise<{
        readonly id: string;
        description?: string;
        metadata?: import("./schemas.js").components["schemas"]["Metadata"] | null;
        readonly createdAt: Date;
        readonly updatedAt: Date;
        readonly deletedAt?: Date;
        name?: string;
        slug: string;
        aggregation: import("./schemas.js").components["schemas"]["MeterAggregation"];
        eventType: string;
        eventFrom?: Date;
        valueProperty?: string;
        groupBy?: {
            [key: string]: string;
        };
        readonly annotations?: import("./schemas.js").components["schemas"]["Annotations"] | null;
    } | undefined>;
    /**
     * Delete a meter by ID or slug
     * @param idOrSlug - The ID or slug of the meter
     * @param signal - An optional abort signal
     * @returns The deleted meter
     */
    delete(idOrSlug: operations['deleteMeter']['parameters']['path']['meterIdOrSlug'], options?: RequestOptions): Promise<undefined>;
    /**
     * List meter group-by values
     * @description List all values for a specific group-by key in a meter.
     * @param idOrSlug - The ID or slug of the meter
     * @param groupByKey - The group-by key to list values for
     * @param query - The query parameters
     * @param options - Optional request options
     * @returns The list of group-by values
     */
    listGroupByValues(idOrSlug: operations['listMeterGroupByValues']['parameters']['path']['meterIdOrSlug'], groupByKey: operations['listMeterGroupByValues']['parameters']['path']['groupByKey'], query?: operations['listMeterGroupByValues']['parameters']['query'], options?: RequestOptions): Promise<string[] | undefined>;
    /**
     * Query usage data for a meter by ID or slug using POST
     * @description Query meter using POST method. This is useful for complex queries that exceed URL length limits.
     * @param idOrSlug - The ID or slug of the meter
     * @param body - The query body parameters
     * @param options - Optional request options
     * @returns The meter data
     */
    queryPost(idOrSlug: operations['queryMeterPost']['parameters']['path']['meterIdOrSlug'], body: operations['queryMeterPost']['requestBody']['content']['application/json'], options?: RequestOptions): Promise<{
        from?: Date;
        to?: Date;
        windowSize?: import("./schemas.js").components["schemas"]["WindowSize"];
        data: import("./schemas.js").components["schemas"]["MeterQueryRow"][];
    } | undefined>;
}
