import type { Patch } from "./patch";
import type { QueryResult } from "./query-result";
import type { RpcMethod } from "./rpc-request";
type Arrayable<TResult> = TResult | TResult[];
type TypeMap = Record<"Uuid" | "Thing", object>;
type NormalRecord<TTypeMap extends TypeMap> = {
    id: string | TTypeMap["Thing"];
    [p: string]: unknown;
};
type RelationRecord<TTypeMap extends TypeMap> = {
    id: string | TTypeMap["Thing"];
    in: string | TTypeMap["Thing"];
    out: string | TTypeMap["Thing"];
    [p: string]: unknown;
};
export type RpcResultMapping<TTypeMap extends TypeMap = TypeMap> = {
    ping: void;
    use: void;
    info: NormalRecord<TTypeMap> | null | undefined;
    signup: string;
    signin: string;
    authenticate: void;
    invalidate: void;
    let: void;
    unset: void;
    live: string | TTypeMap["Uuid"];
    kill: void;
    query: QueryResult[];
    select: Arrayable<NormalRecord<TTypeMap>>;
    create: Arrayable<NormalRecord<TTypeMap>>;
    insert: NormalRecord<TTypeMap>[];
    insert_relation: RelationRecord<TTypeMap>[];
    update: Arrayable<NormalRecord<TTypeMap>>;
    upsert: Arrayable<NormalRecord<TTypeMap>>;
    merge: Arrayable<NormalRecord<TTypeMap>>;
    patch: Arrayable<NormalRecord<TTypeMap>> | Arrayable<Patch>[];
    delete: Arrayable<NormalRecord<TTypeMap>>;
    version: string;
    run: unknown;
    graphql: string;
    relate: Arrayable<RelationRecord<TTypeMap>>;
};
export type RpcResult<TMethod extends RpcMethod = RpcMethod> = RpcResultMapping[TMethod];
export type BidirectionalRpcResponseOk<TResult = unknown> = {
    id: `${RpcMethod}_${number}`;
    result: TResult;
    error?: never;
};
export type BidirectionalRpcResponseErr = {
    id: `${RpcMethod}_${number}`;
    result?: never;
    error: {
        code: number;
        message: string;
    };
};
export type BidirectionalRpcResponse<TResult = unknown> = BidirectionalRpcResponseOk<TResult> | BidirectionalRpcResponseErr;
export type IdLessRpcResponseOk<TResult = unknown> = Omit<BidirectionalRpcResponseOk<TResult>, "id">;
export type IdLessRpcResponseErr = Omit<BidirectionalRpcResponseErr, "id">;
export type IdLessRpcResponse<TResult = unknown> = IdLessRpcResponseOk<TResult> | IdLessRpcResponseErr;
export type RpcResponse<TResult = unknown> = BidirectionalRpcResponse<TResult> | IdLessRpcResponse<TResult>;
export {};
//# sourceMappingURL=rpc-response.d.ts.map