import { grpc } from "@improbable-eng/grpc-web";
import { type Handler, type RequestMetadata } from "../handlers/HandlerChainBuilder";
import type { CameraKitConfiguration } from "../configuration";
import type { Result } from "../common/result";
import type { FetchHandler } from "../handlers/defaultFetchHandler";
import type { RequestStateEventTarget } from "../handlers/requestStateEmittingHandler";
export interface GrpcRequest {
    serviceName: string;
    methodName: string;
    requestType: grpc.ProtobufMessageClass<grpc.ProtobufMessage>;
    responseType: grpc.ProtobufMessageClass<grpc.ProtobufMessage>;
}
export type GrpcHandler = Handler<GrpcRequest, GrpcResult, RequestMetadata>;
export type GrpcResult = Result<grpc.UnaryOutput<grpc.ProtobufMessage> & {
    status: grpc.Code.OK;
}, grpc.UnaryOutput<grpc.ProtobufMessage>>;
export declare const GRPC_CALL_REQUEST_TYPE = "grpc_call";
export interface GrpcRequestDimensions extends Record<string, string> {
    requestType: typeof GRPC_CALL_REQUEST_TYPE;
    methodName: string;
}
/**
 * An Injectable handler that can make requests to the CameraKit backend service via grpc-web. This handler can be
 * passed to {@link createTsProtoClient} to produce a well-typed service client.
 *
 * @internal
 */
export declare const grpcHandlerFactory: {
    (args_0: CameraKitConfiguration, args_1: FetchHandler, args_2: RequestStateEventTarget): GrpcHandler;
    token: "grpcHandlerFactory";
    dependencies: readonly ["configuration", "cameraKitServiceFetchHandler", "requestStateEventTarget"];
};
//# sourceMappingURL=grpcHandler.d.ts.map